Seite 1 von 1

For- und While Schleife

Verfasst: Mittwoch 18. November 2020, 07:52
von JannisS
#Aufgabe f
for x in range (100,-1,-10):
print (x)
if x != x / 30 :
print ("Bingo")


Ich habe in der Schule die Aufgabe einfache While- und For- SChleifen zu erstellen. Nun soll ich in einer Forschleife in 10-ner Schritten von 100 bis 0 zählen und wenn die Zahl durch 30 teilbar ist, soll neben der Zahl "Bingo" ausgegeben werden. Ich würde es nun so machen.

100
Bingo
90
Bingo
80
Bingo
70
Bingo
60
Bingo
50
Bingo
40
Bingo
30
Bingo
20
Bingo
10
Bingo
0


Das kommt als Ergebnis raus, was ja theoretisch auch stimmt, da alle Zahlen theoretisch durch 30 teilbar sind. Da ich aber glaube, dass er die Zahlen 90, 60, 30 meint würde ich gerne wissen wie das geht. Habe etwas mit
for x in range (100,-1,-10):
print (x)
if x % 30 == 0 :
print ("Bingo")

gefunden aber weiß nicht wie das funktioniert und was das Prozentzeichen zu bedeuten hat. Wäre nett wenn mir einer helfen könnte.

Re: For- und While Schleife

Verfasst: Mittwoch 18. November 2020, 08:04
von snafu
Bei solchen Aufgaben geht es um die Teilbarkeit ohne Rest, also ist der Ansatz mit dem Modulo-Operator (%-Zeichen) schon richtig. Wenn du dir schon die Lösung rausgesucht hast, dann schau dir zumindest an, was Modulo und der range()-Aufruf in dieser speziellen Form genau bewirken.

Re: For- und While Schleife

Verfasst: Mittwoch 18. November 2020, 08:43
von sparrow
@JannisS: Ein paar Anmerkungen zu deinem Code, den ich hier nochmal in Code-Tags setze, damit er entsprechend zu lesen ist (Code-tags werden automatisch eingefügt, wenn du in "Vollständiger Editor & Vorschau" den </>-Button drückst. Zwischen die Tags gehört der Code):

Code: Alles auswählen

#Aufgabe f
for x in range (100,-1,-10):
    print (x)
    if x != x / 30 :
        print ("Bingo")

Es gibt bestimmte Konventionen, wie Python-Code aussehen soll. Zwischen den Namen der Funktion und die öffnende Klammer der Parameterliste gehört kein Leerzeichen. Nach den Kommata in der Parameterliste aber schon. Der Doppelpunkt in der Zeile mit dem if wird nicht durch ein Leerzeichen abgetrennt. Dein Code sollte also so aussehen:

Code: Alles auswählen

for x in range(100, -1, -10):
    print(x)
    if x != x / 30:
        print("Bingo")
Er ist aber trotzdem falsch.
Was denkst du denn, was die Zeile if x != x / 30: tut? Übersetz die mal wörtlich:" Wenn x ungleich x geteilt durch 30 ist". Mir fällt keine Möglichkeit kein, wie diese Bedingung unwahr sein soll.

Wie snafu schon schrieb: Das % ist ein Modulo-Operator. Und er ist korrekt für die Lösung.

Re: For- und While Schleife

Verfasst: Mittwoch 18. November 2020, 10:58
von __blackjack__
@sparrow: Also mir fällt da mindestens ein mehr oder weniger offensichtliches `x` ein:

Code: Alles auswählen

In [17]: x != x / 30                                                            
Out[17]: True

In [18]: type(x)  # Als Tipp.
Out[18]: float
🤓

Re: For- und While Schleife

Verfasst: Mittwoch 18. November 2020, 11:59
von sparrow
@__blackjack__: Aber da True heraus zu bekommen ist doch zu erwarten? Spannend aber eher offensichtlich:

Code: Alles auswählen

>>> x != x / 30
False
>>> type(x)
<class 'int'>
Aber das mit den Zahlen ist nicht so meins.

Re: For- und While Schleife

Verfasst: Mittwoch 18. November 2020, 12:36
von __blackjack__
Ups. Ich brauche wohl dringend noch einen Kaffee so früh am morgen. 😎

Edit: Um Überraschungen zu vermeiden schlage ich mich übrigens auch nicht mit negativen Argumenten bei `range()` herum sondern verwende lieber `reversed()`. Da brauche ich dann beim Schreiben nicht so viel denken und der Leser beim lesen auch nicht.

Edit2: Um das mal zu demonstrieren eine Lösunge in dogelang (dg), einer Programmiersprache die eine Haskell-ähnliche Syntax in Python Bytecode übersetzt:

Code: Alles auswählen

is_divisible_by = a b -> a % b == 0

for i in reversed (range 0 101 10) =>
  print i $ if (i `is_divisible_by` 30 => "Bingo") (otherwise => "")

Re: For- und While Schleife

Verfasst: Mittwoch 18. November 2020, 12:54
von Sirius3
falls x = 0 ist?