warum ist meine Parameter nicht definiert in python?
Bevor ich meine debug-code, ich würde gerne wissen, warum es ist ein Fehler aufgetreten, wenn ich die Funktion aufrufen?
Er sagt: "NameError: name 'stDigs' ist nicht definiert". Ich habe versucht, mit "avgUntilLetter(0123a)" und "avgUntilLetter("0123a")" aber keiner von Ihnen arbeitet. Helft mir plz!
Diese Funktion erhält als Eingabe einen string mit Ziffern oder Buchstaben.
Die Funktion zurückgeben soll eine float-Zahl, contaning der Durchschnitt berechnet unter Berücksichtigung aller der Ziffern in der Zeichenkette beginnend form der ersten position und considerign alle Ziffern, bis ein Buchstabe gefunden wird oder bis das Ende der Zeichenfolge.
Ein Beispiel:
avgUntilLetter('0123a456') zurückgeben sollte, 1.5
def avgUntilLetter (stDigs):
num = 0
each_char = stDigs[num]
while each_char.isdigit() == True and num < len(stDigs):
num = num + 1
each_char = stDigs[num]
digits = stDigs[0:num]
avg = sum(digits)/len(digits)
return avg
avgUntilLetter(stDigs)
Ja, ich weiß, es gibt eine Menge Fehler, die gelöst werden musste. Ich muss nur, es zu lösen, ein zu einer Zeit. Wenn ich den Aufruf der Funktion mit "avgUntilLetter ("0123a")", die angegebenen Fehler verschwunden, aber eine Art Fehler aufgetaucht. Hmm.. ich bin immer noch halten, der es versucht.
- stDigs muss einen Wert haben, entweder eine Liste oder ein string, etc.. Bei der Definition der avguntilletter Funktion, die stDigs ist nur ein argument, das muss etwas Wert wenn Sie die Funktion aufrufen.
- Der Grund, warum Sie bekommen, dass der Fehler beim Aufruf von
avgUntilLetter(stDigs)
ist, weilstDigs
ist nicht definiert. Welche Fehler haben Sie, wenn Sie anrufenavgUntilLetter('0123a')
? - Sie werden auch erhalten eine
IndexError
wie Sie versuchen, Zugriff aufstDigs[len(stDigs)]
in Ihremwhile
Schleife. Undsum(digits)
wird nicht funktionieren, entweder, wiedigits
ist eine Zeichenfolge, keine Zahl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es mehrere Probleme in deinem code:
Können Sie versuchen, am Ende den Zugang
stDigs[len(stDigs)]
weilnum < len(stDigs)
wahr sein könnte, aber Sie fügen dann 1 vor der Verwendung als index.sum(digits)
wird nicht funktionieren, weildigits
ist ein string.Nur Schleife über den string direkt statt mit einem
while
Schleife addieren Sie die zahlen in der Schleife:Diese Griffe Rand-Fällen sowie:
stDigs
ist nicht belegt Wert.In Sie Fall, ist es ein string ist, einfach set
stDigs
einen string zuerst.Den
TypeError
kommt von dieser Zeile:weil die, die, bevor es macht
digits
einen string. Und, Sie können nichtsum
auf strings.Kann man Ihren code, indem Sie ändern die Zeile oben an:
Aber Sie kann diese Aufgabe viel einfacher und mehr effizient mit einer list comprehension und
itertools.takewhile
:Beachten Sie, dass der obige code ist für Python 3.x. Konvertieren Python-2.x., ändern Sie die return-Anweisung dieser:
Müssen Sie
float
dort, weil, wie Python-2.x Griffe division.