Python Fizzbuzz Probleme mit Schleife

Ich habe für die Antwort für etwa eine Stunde gesucht, und es scheint, die meisten Menschen haben coded fizzbuzz einen anderen Weg als ich selbst.

Allerdings habe ich versucht alles herauszufinden, warum dieser einfache Code nicht funktionieren wird, werde ich sehr frustriert.

Kann jemand auf das einfache Problem hinweisen, bin ich mir sicher? Der Code läuft, aber es gibt einfach den Wert 1 zurück.

def fizzbuzz(intList): for n in intList: if n % 3 == 0 and n % 5 == 0: return n.replace(str(n),"Fizzbuzz") elif n % 3 == 0: return n.replace(str(n),"Fizz") elif n % 5 == 0: return n.replace(str(n),"Buzz") else: return n 

6 Solutions collect form web for “Python Fizzbuzz Probleme mit Schleife”

Der erste Wert, den es ansieht, ist 1 . Da 1%x nur 0 für ein x von 1 , geht es zum else und gibt 1 . Und dann ist es fertig, denn das ist, was return ist.

Das führt zu dem größeren Problem, das ist, dass Sie eine Schleife starten und dann garantieren, dass Sie diese Schleife nach nur einer Iteration verlassen werden, denn es gibt eine return in jedem Zweig. Sie müssen diese return Anweisungen durch entweder append() s zu einer list ersetzen (vergessen Sie nicht, die resultierende list ) oder print() Anrufe.

Auch wenn du mit so etwas wie 3 angefangen hast, würde dein Code versuchen, replace auf eine Ganzzahl zu verwenden, was du nicht mit ganzen Zahlen machen kannst. Sie würden einen Rückblick bekommen.

Der Code gibt 1 weil diese Liste [1,2,3,4,5,6,7,8,9,10] berücksichtigt wird. Alle drei Bedingungen werden false und das letzte Mal wird 1 . Wenn Sie die Antwort wünschen, fügen Sie sie in die Liste ein.

Etwas wie das:

 def fizzbuzz(intList): temp = [] for n in intList: if n % 3 == 0 and n % 5 == 0: temp.append("Fizzbuzz") elif n % 3 == 0: temp.append("Fizz") elif n % 5 == 0: temp.append("Buzz") else: temp.append(n) return temp print fizzbuzz(range(1,20)) 

Vielleicht, wenn du einen Blick auf diesen Code werdest, wirst du dich besser verstehen. Obwohl dies eine völlig andere Implementierung von fizzbuzz in Python3 ist

 #!/usr/bin/python3 for i in range(1,100): msg = "Fizz" * bool(i%3==0) msg += "Buzz" * bool(i%5==0) if not msg: msg = i print(msg) 

Meine Fähigkeiten in Python sind ziemlich durchschnittlich, aber ich liebe die Verwendung von Dicitonaries. Hier ist das Fizz Buzz Programm mit Wörterbüchern. Ohne ein if.

 for data in range(1, 101): msg = [str((data % 3 == 0)), str((data % 5 == 0))] // msg returns a list with ['True' ,'False'] depending on the condition conveter = {"True False": "Fizz", "False True": "Buzz", "True True": "Fizz Buzz", "False False": data } val = conveter[" ".join(msg)] print(val) 

Ich habe gerade FizzBuzz implementiert

 for n in range(1, 100): if n%15==0: print "FizzBuzz" elif n%5==0: print "Buzz" elif n%3==0: print "Fizz" else: print n 

Das Beste daran ist das

  • Es klappt

  • Es passt in einen Tweet, mit einer Marge

Jahre später, auf dieser …

FizzBuzz: Für ganze Zahlen bis einschließlich 100, druckt FizzBuzz, wenn die ganze Zahl durch 3 und 5 (15) teilbar ist; Fizz, wenn es durch 3 (und nicht 5) teilbar ist; Buzz, wenn es durch 5 (und nicht 3) teilbar ist; Und die Ganzzahl sonst.

 def FizzBuzz(): for i in range(1,101): print { 3 : "Fizz", 5 : "Buzz", 15 : "FizzBuzz"}.get(15*(not i%15) or 5*(not i%5 ) or 3*(not i%3 ), '{}'.format(i)) 

Die .get() -Methode wirkt hier Wunder.

Betreibt wie folgt

Für alle ganzen Zahlen von 1 bis 100 (101 ist nicht enthalten),
Drucken Sie den Wert des Wörterbuchschlüssels, den wir anrufen, erhalten Sie nach diesen Regeln.

"Holen Sie sich das erste Nicht-Falsche Element in den Rufen an, oder geben Sie die Ganzzahl als String zurück."

Bei der Prüfung auf einen True Wert, also einen Wert, den wir nachschlagen können, wertet Python 0 auf False . Wenn ich mod 15 = 0, das ist False, würden wir zum nächsten gehen.

Deshalb haben wir NOT jeden der "Mods" (aka Rest), so dass, wenn die mod == 0, welche == False, erhalten wir eine True-Anweisung. Wir multiplizieren True mit dem Wörterbuchschlüssel, der den Wörterbuchschlüssel zurückgibt (dh 3*True == 3 )

Wenn die Integer es nicht durch 3, 5 oder 15 teilbar ist, dann fallen wir auf die Standard-Klausel des Druckens der int '{}'.format(i) fügt einfach in diesen String – als String ein.

Ein Teil der Ausgabe

Fizz
79
Summen
Fizz
82
83
Fizz
Summen
86
Fizz
88
89
FizzBuzz
91.
92
Fizz
94
Summen
Fizz
97
98
Fizz
Summen

  • Ablehnen oder Schleifen der Benutzereingabe, wenn zwei Bedingungen nicht erfüllt sind
  • Schalten Sie Indizes, erstellen Sie die nächsthöhere Zahl mit den gleichen exakten 9 Ziffern präsentiert
  • Finde maximale Nummer in der .CSV-Datei in Python
  • Python drucken eine Zeile gleichen Raum
  • Python: Nur einmal in einer Schleife drucken
  • Python mehrere Schleifen zur gleichen Zeit
  • Tkinter loop und serial schreiben
  • Python öffnen mehrere Dateien und verwenden mehrere Verzeichnisse auf einmal
  • Senden von StopIteration auf Schleife von außerhalb des Iterators
  • Ausbrechen von verschachtelten Schleifen [doppelte]
  • Zuweisungsbedingung in Python while Loop
  • Python ist die beste Programmiersprache der Welt.