Nummern hinzufügen und mit einem Sentinel beenden

8

Meine Aufgabe besteht darin, eine Reihe von Zahlen mit Hilfe einer Schleife zu addieren, und diese Schleife benötigt den Sentinel-Wert von 0 , damit sie anhält. Es sollte dann die Gesamtzahl der hinzugefügten Nummern anzeigen. Bis jetzt ist mein Code:

%Vor%

Aber wenn ich es ausführe, wird die Gesamtanzahl nicht gedruckt, nachdem ich 0 eingegeben habe. Es gibt nur "Enter a number or 0 to quit" aus, obwohl es keine Endlosschleife ist.

    
Baroness Sledjoys 17.10.2015, 14:16
quelle

5 Antworten

5

Der Hauptgrund, warum Ihr Code nicht funktioniert, ist, weil break die innerste Schleife (in diesem Fall Ihre while loop) sofort beendet und somit Ihre Codezeilen nach der Pause nicht ausgeführt werden. Dies kann leicht mit den Methoden behoben werden, auf die andere hingewiesen haben, aber ich würde vorschlagen, die Struktur Ihrer while -Schleife ein wenig zu ändern. Derzeit verwenden Sie:

%Vor%

Statt:

%Vor%

Möglicherweise haben Sie einen Grund dafür, aber der Code, den Sie uns zur Verfügung gestellt haben, ist nicht sichtbar. Wenn wir Ihren Code ändern, um die letztere Struktur zu verwenden, wird das allein das Programm vereinfachen und das Hauptproblem beheben. Sie drucken auch "Enter a number or 0 to quit:" mehrmals, was unnötig ist. Sie können es einfach an die input übergeben und das reicht.

%Vor%

Der einzige "Nachteil" (nur Kosmetik) ist, dass wir number vor der Schleife definieren müssen.

Beachten Sie auch, dass wir die total -Nummer drucken möchten, nachdem die ganze Schleife beendet ist. Daher wird der Ausdruck am Ende nicht eingerückt und nicht in jedem Zyklus von while ausgeführt. Schleife.

    
Markus Meskanen 17.10.2015, 14:32
quelle
3

Sie sollten die Zahlen innerhalb der Schleife summieren, auch wenn sie keine Nullen sind, aber die Summe nach dem Ende der Schleife ausdrucken, nicht in der Schleife:

%Vor%     
Mureinik 17.10.2015 14:20
quelle
2

Wenn die Zahl 0 ist, ist das erste, was Sie tun, break , wodurch die Schleife beendet wird.

Sie addieren die Zahl auch nicht zu der Summe, es sei denn, es ist 0, was nicht das ist, wonach Sie suchen.

%Vor%     
Simon Fraser 17.10.2015 14:20
quelle
2

Sie waren sehr nah, aber Sie hatten ein Problem mit der Einrückung.

Erstens, warum all diese print -Aussagen? Ich schätze, du versuchst es zu drucken, bevor du Eingaben machst. Dafür wird die untere Zeile ausreichen.

%Vor%

Zweitens, unterscheiden Sie zwischen dem, was Sie tun möchten, wenn nur die number==0 und was in jeder Iteration zu tun ist.

Sie möchten die folgende Anweisung in jeder Iteration so verwenden, wie jede Zahl mit total hinzugefügt werden soll. Behalte es also außerhalb von if block.

%Vor%

Und wenn number==0 , möchtest du zuerst print etwas und dann break die Schleife.

%Vor%

Stelle sicher, dass du zuerst mit total hinzufügst und dann die Bedingung if kontrollierst, denn wenn du einmal die Schleife durchbrochen hast, kannst du die Zahl später nicht mehr hinzufügen.

Also könnte die Lösung so sein,

%Vor%     
Ahsanul Haque 17.10.2015 14:20
quelle
2
%Vor%

Wenn Sie break vor Ihren anderen Code setzen, wird die Schleife beendet und Ihr Code danach break wird nicht ausgeführt.

Übrigens können Sie try...except verwenden, um den Fehler zu erfassen, wenn der Benutzer keine Nummer eingegeben hat:

%Vor%     
Kevin Guan 17.10.2015 14:19
quelle

Tags und Links