2016-09-17 9 views
-1

Ich wollte die Summe von (1 + 1 + 1 + ... + 1)^2 mit einer for-Schleife, aber mit einer Variablen n als Obergrenze so berechnen dass die Summe zu einer Funktion f (n) = n^2 führt. Bei einer nicht negativen ganzen Zahl x als Eingangs könnte die Schleife einfach codiert werden alsVariable n als obere Grenze einer for-Schleife

p==0 
def f(x): 
    global p 
    for i in range(0,x): 
     p=p+1 
    return p**2 

I eine Zeichenkette n auf diese Art von Schleife einzuspeisen wollte. Ist das machbar (mit oder ohne Modifikation)? Muss ich String-Conversion Hijinks a la SymPy machen?

bearbeiten: wow ich habe dieses Problem wirklich schlecht formuliert. Schlaf erraten ist wichtig, schließlich

nehme ich eine Funktion f (x) haben, wo

f(1) = 1 
f(2) = f(1+1) = (1+1)^2 = 4 
f(3) = f(1+2*1) = (1+2)^2 = 9 

Dann f (n)

f(n) = f(1+(n-1)*1) = (1+(n-1))^2 = n^2 

wäre, wenn ich das Ergebnis berechnen waren Mit einer for-Schleife oben (was ein Chaos wegen Schlafentzug ist), würde ich f (1), f (2), f (3), ... in die obige for-Schleife eingeben. Ich frage, ob ich n mit oder ohne Modifikation in die obige for-Schleife eingeben kann und n^2 bekommen kann.

(Die Beziehung zwischen f (1), f (2), ... hier ist nicht das gleiche wie das Problem, das ich gerade habe - ich frage mich nur, ob diese Idee möglich ist oder nicht, und wenn . ja, wie würde ich nichts lernen, wenn ich die Frage direkt fragen, würde ich)

edit2: Ein Beispiel für Eingabe/Ausgabe mit dem Algorithmus oben:

(Integer-Eingang)

f(1) = 1^2 
f(2) = 2^2 
f(423) = 423^2 

(Float-Eingang)

f(0.5) = (0.5)^2 
f(1.5) = (1.5)^2 
f(234.23) = (234.23)^2 

(String-Eingang - ohne zuerst auf diese Strings integer/float-Werte zuweisen)

f(a) = a^2 
f(df) = (df)^2 
f(the_speed_of_an_unladen_swallow) = (the_speed_of_an_unladen_swallow)^2 

Was denn ich bin mit dem Ziel ist eine Modifikation für die Schleife oben, so dass ich dies für f tun kann, (a) wobei f die obige Funktion ist:

def g(a): 
    return f(a) 

oder das Äquivalent davon.

Ich werde das hier einfach hier lassen, da ich weniger wie ein schlaftrunkener Uni-Student aussehe und eher wie ein schlaftrunkener, zurückgebliebener Uni-Student.

+1

was würden Sie weitergeben? Ein Beispiel vielleicht? –

+1

Welche Art von String? Können Sie ein Beispiel für solche Eingaben geben? NB: warum das globale "p"? Warum die Schleife über den Bereich, wenn Sie 'x ** 2 'effektiv zurückgeben? – trincot

+0

Weitere Details zum Problem im ursprünglichen Beitrag hinzugefügt. – sync

Antwort

0

Möchten Sie etwas wie def('123') machen?

Wenn ja, die Zeichenfolge werfen, bevor int es in range verwenden, wie zum Beispiel:

for i in range(0,int(x)): 
+0

ist die Schleife wirklich erforderlich p sollte einfach aktualisiert werden als p + = x unter der Annahme, dass x in int konvertiert werden – armak

0

Sie schrieb:

(String input - without assigning integer/float values to these strings first)

f(a) = a^2 
f(df) = (df)^2 
f(the_speed_of_an_unladen_swallow) = (the_speed_of_an_unladen_swallow)^2 

Also, Sie haben Variablen (a, df, the_speed_of_an_unladen_swallow) , die zum Zeitpunkt des Aufrufs f noch keinen (guten) Wert enthalten.Später würden sie einen numerischen Wert haben, und Sie möchten das in Ihrer Funktion oft wiederholen.

Da Variablen mit einem primitiven Datentyp als Wert übergeben werden, müssten Sie stattdessen den Namen der Variablen übergeben, um etwas Ähnliches zu tun.

Vielleicht suchen Sie das?

def f(x): 
    def localF(): 
     return globals()[x]**2 # loop could be here, but this is the essence 
    return localF 

# n does not have its value yet 
n = None 

# call f: it should not produce the result yet, as n is not correctly set yet 
g = f('n') 

# set n to its intended value 
n = 5; 

# Call the function we got from f: 
print (g()); 

# output is 25. 
+0

Danke, aber ich fürchte, das ist nicht das, was ich suche. Ich suche nach einer Modifikation einer Schleife für eine Funktion f (x), die mir nicht den Fehler gibt "NameError: name 'n' ist nicht definiert", das passiert, wenn Sie versuchen, eine Zeichenfolge direkt in eine Funktion zu setzen , wenn ich versuche, f (n) zu setzen. Das Problem ist sowieso analytisch lösbar, also denke ich, ich werde f (x) = (die analytische Lösung) als eine Art Antwort machen. Danke trotzdem! – sync

+0

Es wäre hilfreich, wenn Sie ein Beispiel für den Aufruf Ihrer Funktion und den gewünschten Rückgabewert hinzufügen würden. Ich habe keine Ahnung, was Sie mit * meinen, wenn ich versuche, f (n) * zu setzen, noch was Sie mit der analytischen Lösung meinen. Können Sie ein konkretes Beispiel für Input/Output geben? – trincot

+0

Beispiele hinzugefügt und eine andere (hoffentlich bessere) Erklärung dessen, was ich anstrebe. (Wenn ich "analytische Lösung" meinte, meinte ich das f (x), das ich mit herkömmlichem Stift-und-Papier-Ansatz gefunden habe.) – sync

Verwandte Themen