2016-12-22 6 views
1

Wenn eine ganze Zahl von 3, print „Hallo“Python, wenn und sonst Druckbedingung

teilbar ist, wenn es um 7, print „Bye“

teilbar ist, wenn sie sowohl von 3 und 7 teilbar ist, print "HiBye"

Ab jetzt habe ich versucht:

for i in range(1,100): 
    if i % 3 == 0: 
     print "Hi" 
    if i % 7 == 0: 
     print "Bye" 
    if i % 3 == 0 and i % 7 == 0: 
     print "HiBye" 
    else: 
     print i 

Aber meine Zahlen wiederholt werden. Das ist die Ausgabe, die ich bekomme.

1 
2 
Hi 
3 
4 
5 
Hi 
6 
Bye 
7 
8 
Hi 
9 
10 
11 
Hi 
12 
13 
Bye 
14 
Hi 
15 
16 
17 
Hi 
18 
19 
20 
Hi 
Bye 
HiBye 

Wie Sie sehen können, wird die 3 erneut wiederholt. Ich denke, der Fehler in der

else: 
    print i 

Anweisung

ist
+0

Ich denke, Sie vermissen die 'elif' Aussage –

+0

Nun, was macht Ihr Code für' 21'? Was willst du stattdessen tun? – Barry

+0

das Stichwort, das Sie suchen, ist 'elif' – njzk2

Antwort

8

Sie benötigen ersteelif statt if und Test für die 3 und 7 Fall zu verwenden:

if i % 3 == 0 and i % 7 == 0: 
    print "HiBye" 
elif i % 3 == 0: 
    print "Hi" 
elif i % 7 == 0: 
    print "Bye" 
else: 
    print i 

Sie verwendet unabhängigif Aussagen. Jede if-Anweisung wird getestet und ihr Block wird ausgeführt, unabhängig davon, welche anderen if Anweisungen Ihr Code vor oder nach der Ausführung ausführt. elif Blöcke sind jedoch an ihre if Anweisung angehängt und Python wird nur einen der Blöcke ausführen, der erste, dessen Bedingung wahr ist.

So in der obigen if..elif..elif..else Reihe von Tests, wenn i % 3 == 0 and i % 7 == 0 True ist, keiner der anderen Zweige werden, der else Zweig einschließlich ausgeführt.

Jetzt sieht die Ausgabe wie:

>>> for i in range(1, 22): 
...  if i % 3 == 0 and i % 7 == 0: 
...   print "HiBye" 
...  elif i % 3 == 0: 
...   print "Hi" 
...  elif i % 7 == 0: 
...   print "Bye" 
...  else: 
...   print i 
... 
1 
2 
Hi 
4 
5 
Hi 
Bye 
8 
Hi 
10 
11 
Hi 
13 
Bye 
Hi 
16 
17 
Hi 
19 
20 
HiBye 
0

Sie müssen Sie Code

for i in range(1,100): 
if i % 3 == 0 and i % 7 == 0: 
    print "HiBye" 
elif i % 3 == 0: 
    print "Hi" 
elif i % 7 == 0: 
    print "Bye" 
else: 
    print i 

ändern, da es sonst einzeln an jeder wenn Aussage aussehen wird und wenn sein auf 3 zum Beispiel es tut den ersten Teil des Codes, aber wenn es versucht, if i % 3 == 0 and i % 7 == 0: wird es falsch sein, so druckt es

0

Wenn ich Sie richtig verstehe, sind dies die Bedingungen: 1) Wenn die Zahl durch 3 teilbar ist, drucken "Hi" 2) wenn die Zahl durch 7 teilbar ist, drucken "Tschüss" 4) wenn die Zahl durch 3 teilbar ist 7 Drucken "HiBye" 5) Wenn keine der oben genannten Bedingungen erfüllt ist, drucken Sie die Nummer.

for i in range(1,100): 
if i % 3 == 0 and i % 7 == 0: 
    print "HiBye" 
elif i % 3 == 0: 
    print "Hi" 
elif i % 7 == 0: 
    print "Bye" 

elif i % 3 != 0 and i % 7!= 0: 
    print i 

Dieser Code funktioniert für die oben genannten Bedingungen. Sie gibt sie explizit an und erzwingt die Logik.

+0

Ich habe es geändert, um das Problem zu beheben –

+0

Warum das letzte 'elif'? Warum nicht einfach 'else' benutzen? –

+0

Nur um sicherzustellen, dass die Bedingung erfüllt ist. In diesen Fällen finde ich es besser, explizit zu sein. Es ist wirklich die Reihenfolge, in der Python iteriert und die Zahlen durchläuft, auf die es ankommt. –