2017-06-02 1 views
0

Als Reaktion auf this challenge, schrieb ich den folgenden Code:Gibt es eine Möglichkeit, zu überprüfen, ob mehrere Aussagen mit einem einzigen 'elif' wahr sind?

for i in range(1, 101): 
    if i % 3 == 0: 
     print("Fizz") 
    if i % 5 == 0: 
     print("Buzz") 
    if i % 15 == 0: 
     print("Fizzbuzz") 
    elif i % 3 !=0: 
     print(i) 
    elif i % 5 !=0: 
     print(i) 
    elif i % 15 !=0: 
     print(i) 

Es funktioniert, aber ich bin nicht sicher, ob es die effizienteste Methode ist. Zum Beispiel war eines der Dinge, die ich unsicher war, wie man mehrere Tests für die Teilbarkeit mit nur 1 elif einschließen. Jede Hilfe wird geschätzt!

+2

Ich glaube nicht, diese Arbeit macht. Dies wird "FizzBuzz" zweimal für ein Vielfaches von 15 drucken. – CollinD

+2

Was Sie geschrieben haben, funktioniert nicht wirklich. – user2357112

Antwort

1

Dies ist die effizienteste Art und Weise für eine beliebige Anzahl ist:

def fizzbuzz(n): 
    output = '' 
    if n % 3 == 0: 
     ''.join(output, 'Fizz') 
    if n % 5 == 0: 
     ''.join(output, 'Buzz') 
    return output if output else str(n) 

print "\n".join(fizzbuzz(n) for n in xrange(1, 21)) 
+0

Ihre erste, wenn es nur 'n% 15' sein könnte. Einzelvergleich statt zwei für das gleiche Ergebnis. Sie können einen Vergleich auch entfernen, indem Sie eine Return-Zeichenfolge beibehalten und "Fizz" für 3 und "Buzz" für 5 beitreten. Wenn beide Werte zutreffen, geben Sie "FizzBuzz" zurück. Keine Notwendigkeit, nach 15 zu suchen. –

+0

Fordern Sie eine Bearbeitung für die Antwort, wenn Sie es richtig formatieren können, würde ich mich freuen, Sie als Mitarbeiter hinzuzufügen. :) – Jeremy

0

Statt tun:

elif i % 3 !=0: 
    print(i) 
elif i % 5 !=0: 
    print(i) 
elif i % 15 !=0: 
    print(i) 

können Sie tun

elif i % 3 !=0 or i % 5 != 0 or i % 15 != 0: 
    print(i) 
+0

Wie so? Ich verstehe nicht warum. – Splinxyy

+3

Wenn eine Zahl durch 15 teilbar ist, ist sie notwendigerweise durch 3 * und * 5 teilbar. – DeepSpace

+0

Ich beantworte seine Frage. Ich habe seine Logik zur Lösung des Problems nicht in Frage gestellt. Es mag nicht stimmen, das ist nicht meine Sache. Er bat um Hilfe, um das Programm zu verkürzen, und das gab ich ihm. – Splinxyy

Verwandte Themen