2016-03-24 7 views
1

Ich bin neu in der Programmierung und arbeite derzeit durch "Python-Programmierung: Eine Einführung in die Informatik, 2. Ausgabe" von Zelle.Probleme zu verstehen, was * (Sternchen) in Python Variablenzuweisung

Während ich an einer der Übungen in diesem Buch arbeitete, hatte ich Schwierigkeiten, die vom Autor zur Verfügung gestellte Lösung zu verstehen. Die Übung besteht im Wesentlichen darin, ein Programm zu erstellen, das einen Buchstabengrad für einen bestimmten Bereich von Punkten angibt.

Die Frage ist, wie folgt: „Ein gewisser Professor CS 100-Punkte-Prüfungen gibt, die 90-100 auf der Skala benotet: A, 80-89: B, 70-79: C, 60 bis 698: D , < 60: F. Schreiben Sie ein Programm, das eine Prüfungsnote als Eingabe akzeptiert und die entsprechende Note ausgibt. "

Hier meine eigenen Quellcode für die Übung ist:

score = float(input("Enter your quiz score: ")) 

if score >= 90: 
    print("You got an A.") 
elif score >= 80: 
    print("You got a B.") 
elif score >= 70: 
    print("You got a C.") 
elif score >= 60: 
    print("You got a D.") 
else: 
    print("You got a F.") 

Und es funktioniert sehr gut, und aus meiner sucht, ist eine Standardlösung für ein solches Problem.

Dann Lösung des Autors ist wie folgt:

score = eval(input("Enter the score (out of 100): ")) 
grades = 60*"F"+10*"D"+10*"C"+10*"B"+11*"A" 
print("The grade is", grades[score]) 

Was ich könnte so viel sauberer als die gesamte if-elif-else Brocken erwiesen mehr werden viel kurz und bündig mit nur zwei Linien ausgedrückt. Allerdings finde ich Mühe, die 2. Zeile seines Codes zu verstehen: Grade = 60 * "F" + 10 * "D" + 10 * "C" + 10 * "B" + 11 * "A" Wie funktioniert diese Zeile genau und was macht das * bei einer solchen Variablenzuordnung?

Verzeihen Sie, wenn es bereits eine ähnliche Frage gibt, die meine Frage beantwortet, aber die nächste, die ich finden konnte, war, was * in Parametern tut. Ich würde gerne einen Link dorthin verweisen, wenn das der Fall ist.

Danke für die Hilfe!

+1

Ich würde vorsichtig sein über dieses Buch.Die Verwendung eines gefährlichen Werkzeugs wie "eval" ist unnötig, und während das Erstellen einer Zeichenfolge mit 101 Zeichen kein Problem darstellt, skaliert die Lösung nicht gut, wenn sie auf ähnliche Probleme angewendet wird, bei denen die Zeichenfolge länger ist. – user2357112

+0

Oh, das ist ein guter Punkt zum Skalieren. Oh ja, ich habe die Gefahr in Bezug auf das Eval verstanden, weshalb ich float (input()) anstelle von eval verwendet habe. – Charles

+0

Aber danke für das Heads-up. Ich werde vorsichtig sein! – Charles

Antwort

4

Das hat eigentlich nichts mit Variablenzuordnung zu tun. In Python können Sie eine Zeichenfolge mit einer nicht negativen Ganzzahl multiplizieren. Der Effekt besteht darin, die Zeichenfolge so oft wie nötig zu wiederholen. So ist beispielsweise 5 * "A" + 2 * "B" "AAAAABB".

(also in dem eigentlichen Code an Sie suchen, Sie 60 "F" s haben - so grades[score] werden "F" sein, wenn 0 < = < 60 Partitur - und dann 10 "D" s - so grades[score] wird "D" sein, wenn 60 < = Ergebnis < 70 - und so weiter.)

+0

Oh, richtig! Die Antwort war einfach so einfach. Warum dachte ich, dass es komplexer wäre? Haha danke! – Charles

2

Es hat nichts mit Zuweisung zu tun. 3*"F" ist "FFF", so einfach. "FFF"+"DDD" ist "FFFDDD". grades ist also eine Zeichenfolge von 101 Zeichen (sechzig Fs, zehn Ds ... eine für jeden Punkt zwischen 0 und 100), und Sie wählen nur die richtige mit grades[score].

0

Das Sternchen * wird X-Versionen der vorhergehenden Zeichenfolge verketten, wobei X durch die folgende Nummer definiert ist. Die + wird die vorhergehende und folgende Zeichenfolge verketten

>>> "x"*2 
'xx' 
>>> "x"*2+"y"*2 
'xxyy' 
>>> 
Verwandte Themen