Python: Kleinstmögliche teilbare Zahl finden

Robinbux

Newbie
Registriert
Feb. 2017
Beiträge
7
Hey, ich bin noch ein totaler Anfänger im Thema programmieren und wollte nur zur Übung mal die Eulerprobleme mit Python versuchen. Meine jetzige Aufgabe lautet, die kleinstmögliche Zahl zu finden, die sich gerade durch die Zahlen 1 - 20 teilen lässt.
Ich habe einen Code geschrieben, der das sogar hinbekommen hat:
for i in range(1, 100000000):
if (i % 1 == 0 and i % 2 == 0 and i % 3 == 0 and i % 4 == 0 and i % 5 == 0
and i % 6 == 0 and i % 7 == 0 and i % 8 == 0 and i % 9 == 0 and i % 10 == 0
and i % 11 == 0 and i % 12 == 0 and i % 13 == 0 and i % 14 == 0 and i % 15 == 0
and i % 16 == 0 and i % 17 == 0 and i % 18 == 0 and i % 19 == 0 and i % 20 == 0):
print (i)

Wie ihr bestimmt sofort seht, ist dieser Code verdammt hässlich.
Einfach für meine Verbesserung würde ich gerne wissen, wie man das Problem "eleganter" lösen kann, ohne Modulo für alles einzeln anwenden zu müssen. Mir ist da nichts eingefallen :/
Kann mir bitte wer Tipps geben?
 
Robinbux schrieb:
Wie ihr bestimmt sofort seht, ist dieser Code verdammt hässlich.
Einfach für meine Verbesserung würde ich gerne wissen, wie man das Problem "eleganter" lösen kann, ohne Modulo für alles einzeln anwenden zu müssen. Mir ist da nichts eingefallen :/
Kann mir bitte wer Tipps geben?
Ich sag mal als Fingerzeig die Zahlen 1 bis 20 auch durch ne Schleife laufen lassen.
 
Äh. Modulo 1 kannst du eh weglassen, ebenso 2,3,4 usw. durch die die Zahl auch immer teilbar ist, wenn sie es durch z.B. 12 ist.
Und dann halt nicht alles durchprobieren.
 
Ja, würde ich auch so machen, nur, dass du statt den ganzen if-Anweisungen da auch noch eine for-Schleife draus basteln könntest ;)

Lg, Franz
 
Hi, danke erstmal für die Antworten :)
Ich habe jetzt noch
for i in range(1, 100000000):
for x <= 20:
if i % x == 0:
print (i)
probiert, aber da sagt der mir "invalid syntax" bei x <= 20.
Das ist doch eigentlich korrekt oder nicht?
 
du musst das "for" natürlich genauso wie oben verwenden.

Also

Code:
for x in range(1,20):

kenne mich in Python aber nicht so aus...
 
Ok, also mit diesem Code:
for i in range(1, 100000000):
for x in range (1, 20):
if i % x == 0:
print (i)

gibt der mir jetzt gerade alle Zahlen von 1 bis 100000000.
Wie sag ich ihm, dass das Modulo für alle gelten soll?
 
Naja, ist ja auch klar. Du gibst i aus, wenn es durch eine Zahl restlos teilbar ist, die zwischen 1 und 20 liegt. Durch 1 sind alle teilbar, also werden alle ausgegeben.
Du könntest z.B. eine Variable erstellen, die "true" ist und wenn i NICHT durch x restlos teilbar ist, setzt du sie auf false. Wenn dann am Ende der inneren for-Schleife die Variable noch "true" als Wert hat, ist i durch alle Zahlen zw 1u20 teilbar, dann gibst dus aus.

In Skizze:
Code:
für i, während i < 10000000:
   Weise Variable "teilbar" den Wert "true" zu
   für x, während x < 20
      wenn i mod x NICHT 0
         Weise Variable "teilbar" den Wert "false" zu

   Wenn "teilbar" den Wert "true" hat
       Gebe Variable "i" aus

Dann hast du sozusagen drei Blöcke. Den umfassenden "Prüfe Zahl x", den ersten inneren "Prüfe die Zahl auf alle mögl. Teilbarkeiten" und den zweiten inneren "Gebe, wenn Prüfung richtig ergibt, die Zahl aus"

Lg, Franz
 
Wie sag ich denn " für x, während x < 20" ?

Ich habe es jetzt so probiert:

for i in range(1, 100000000):
teilbar = True
for x < 20:
if i % x != 0:
teilbar = False
if teilbar == True:
print (i)

Da hat der aber ein Problem mit x < 20. Wenn ich es mit range mache, gibt der mit wieder jede einzelne Zahl an.
 
Das mit Range ist schon der richtige Weg, bedenke aber, dass in Python die Einrücktiefe deiner Code-Zeilen eine entscheidende Rolle spielt. So zumindest meine Erinnerung ans Studium.

Wenn du so einrückst, wie FranzvonAssisi seinen Pseudo-Code eingerückt hat, dann sollte es funktionieren.
 
Zuletzt bearbeitet:
Zurück
Oben