Wie löse ich diese Python-Aufgabe?

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))

Maybeyoubeinthe 
Beitragsersteller
 09.04.2020, 18:09

Wenn das wirklich klappen sollte dann Dankeschön für die Hilfe

Maybeyoubeinthe 
Beitragsersteller
 09.04.2020, 18:16
@KuarThePirat

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“...

Bild zum Beitrag

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)

Bild zum Beitrag

 - (Computer, Computerspiele, Software)  - (Computer, Computerspiele, Software)

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


Isendrak  09.04.2020, 19:05
int(var1 / var2) == var1 / var2

das oder aber mit var1 % var2 == 0