Wie löse ich diese Python-Aufgabe?
Hey kann mir jemand dabei helfen oder die Lösung sagen
Hier die Aufgabenstellung:
Schreibe ein Programm, das alle Teiler einer Zahl N ausgibt, jeden in eine eigene Zeile. Zum Beispiel soll für N = 24 die Ausgabe
2
3
4
6
8
12
entstehen (die Zahlen 1 und 24 werden also jetzt nicht als Teiler verstanden - es sind nur die "echten" Teiler gefragt). Den Wert N erhältst mit
from daten import N
Danke im Voraus LG Maybeyoubeinthe
3 Antworten
Du probierst einfach alle Teiler aus. Der "größte" Teiler bis zu dem du gucken solltest ist die Wurzel der Zahl, in dem Fall hier ~ 4,89, also bis 4.
Dafür brauchen wir die Funktion math.floor() und math.sqrt() und dann probieren wir einfach aus, ob eine Division 0 ergibt. Das machen wir mit dem Modulo Operator. Das können wir jetzt direkt ausgeben. Das ist dann aber nicht sortiert. Daher fügen wir den Teiler und das Ergebnis der Division noch an eine Liste an, die wir anschließend sortieren.
from daten import N
import math
divisor = list()
for i in range(1, math.floor(math.sqrt(N))):
if N % i == 0:
divisor.append(i)
divisor.append(int(N/i))
print(sorted(divisor))
Es gab ne Fehler Meldung weißt du wieso :Jede Zeile der Ausgabe soll eine einzelne Zahl enthalten. Deine Ausgabe enthält aber die Zeile
[2,
Und wo hast du da Probleme? Wenn du nicht beschreibst, woran es scheitert, kann man dir schlecht gezielt weiterhelfen. Ich könnte dir höchstens schreiben, wie ich die Aufgabe lösen würde.
Man kann dafür einfach mit einer for-Schleife alle Zahlen k von 1 bis N durchlaufen und jeweils prüfen, ob k ein Teiler von N ist. Wenn k ein Teiler von N ist, wird k mit der print-Funktion ausgegeben.
from daten import N
for k in range(1, N+1):
if N % k == 0:
print(k)
Das folgende Bild zeigt die Beispielsituation für „N = 24“ in „daten.py“...
Edit: Ich habe überlesen, dass nur die echten Teiler ausgegeben werden sollen. Demnach sollte man nur von 2 bis N - 1 statt von 1 bis N laufen.
from daten import N
for k in range(2, N):
if N % k == 0:
print(k)


Wo genau kommst du denn nicht weiter? Du brauchst eine Variable, die in einer while Schleife von bis n hoch zählt.
Testen, ob eine Zahl durch eine andere teilbar ist, kannst du beispielsweise, indem du überprüfst, ob int(var1 / var2) == var1 / var2
Bei der gesamten Aufgabe da es eine zufällige Zahl ist
Und wäre ist der Unterschied zu einer vorher festgelegten Zahl?
Inwiefern sollte es damit schwieriger sein? o.O
Das Verfahren ist exakt das gleiche.
Wenn das wirklich klappen sollte dann Dankeschön für die Hilfe