Seite 1 von 1

Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 16:01
von Eliazz

Code: Alles auswählen

prim_bis_1500 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,
              67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137,
              139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,
              211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277,
              281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359,
              367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,
              443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521,
              523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
              613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683,
              691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773,
              787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
              877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967,
              971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039,
              1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109,
              1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201,
              1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283,
              1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367,
              1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451,
              1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499]

def primzerlegung(zahl):
    primfaktoren = []
    zahl_w = zahl
    while zahl_w > 1:
        for zerlegung in prim_bis_1500:
            if zahl_w %  zerlegung == 0:
                primfaktoren.append(zerlegung)
                zahl_w = zahl_w / zerlegung
                break
     return primfaktoren
zahl_input = input('Gib eine zu zerlegende Zahl ein: ')
primzerlegung(zahl_input)
print(primfaktoren)
    
Möchte einen Primfaktorzerleger schreiben und die Funktion auch noch in anderen Programmen verwenden.
Danke :)
PS: Kann mir mal kurz jemand das mit diesem: if __name__ = __main__ erklären? Warum macht ihr das gleich alle in eure Programme?
MFG
Eliazz

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 16:15
von Sirius3
@Eliazz: Du gibst Dir die Antwort mit dem "__main__" doch gleich selbst: Du willst die Funktion auch noch in anderen Programmen verwenden.

Wie kommst Du darauf, dass diese Funktion falsch ist? Gibt es eine Fehlermeldung?

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 16:23
von BlackJack
@Eliazz: Die Funktion hat einen Rückgabewert mit dem Du dann aber nach dem Aufruf überhaupt nichts machst. Du solltest den vielleicht an einen Namen binden. Und dann *den* Namen für die Ausgabe verwenden. Den Namen den Du da jetzt verwendest gibt es auf Modulebene ja gar nicht. Den gibt es nur lokal *in* der Funktion. Da kommt man von aussen nicht dran.

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 16:36
von Eliazz
Edit: Hier die Fehlermeldung:
unindent does not match any outer level.
Danach ist die Zeile hinter der return anweisung rot markiert.
Ich verstehe nicht so richtig was du meinst Blackjack..
Ich lasse sie doch hinterher ausgeben, die liste "primfaktoren"
Was muss ich ändern damit der Code funzt? (Ohne alles komplett umzuwerfen bitte :P)
Ich bin mir irgendwie sicher, dass es nur ein parr zeichen wären
MFG

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 16:54
von Sirius3
@Eliazz: dann ist wohl die Zeile mit dem "return" falsch eingerückt.

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 17:00
von Eliazz
hab ich auch schon dran gedacht, aber ist sie eigentlich nicht, steht auf dem selben niveau wie die while schleife, was bedeutet, dass sie nach der while schleife ausgeführt werden müsste, könntet ihr da nochmal einen blick drauf werfen? :( Danke :)

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 17:05
von EyDu
Vielleicht solltest du doch noch einmal nachzählen ;-)

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 17:07
von Eliazz
Omg omg omg....
Bitte steinigt mich und werft mich aus der Community, ich bin zu doof für diese Welt ;(
Es war nicht richtig eingerückt, es tut mir so leid
Verdammt, entschuldigung!!!! :cry:
Thread geschlossen

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 17:12
von Eliazz
Okay, also wartet doch noch mal kurz :P
Hier, habe jetzt weiter gearbeitet, aber folgendes, ich glaube darauf hat Blackjack schon angespielt:

Code: Alles auswählen

prim_bis_1500 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,
              67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137,
              139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,
              211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277,
              281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359,
              367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,
              443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521,
              523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
              613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683,
              691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773,
              787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
              877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967,
              971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039,
              1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109,
              1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201,
              1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283,
              1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367,
              1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451,
              1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499]

def primzerlegung(zahl):
    primfaktoren = []
    zahl_w = zahl
    while zahl_w > 1:
        for zerlegung in prim_bis_1500:
            if zahl_w %  zerlegung == 0:
                primfaktoren.append(zerlegung)
                zahl_w = zahl_w / zerlegung
                break
    return primfaktoren
zahl_input = int(input('Gib eine zu zerlegende Zahl ein: '))
primzerlegung(zahl_input)
print(primfaktoren)
Jetzt sagt der Compiler, dass "primfaktoren" nicht definiert ist.
Kann mir jemand sagen warum??
Was muss JETZT noch geändert werden?
Sorry nochmal

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 17:17
von cofi
Na schau mal hin, welche Stelle dir der Interpreter nennt. Der Fehler ist viel offensichtlicher ;)

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 17:19
von Eliazz
Once again, ich schreibe wohl mit mir selber :P
Hier, funktioniert ganz wie geplant:

Code: Alles auswählen

prim_bis_1500 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,
              67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137,
              139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,
              211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277,
              281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359,
              367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,
              443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521,
              523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
              613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683,
              691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773,
              787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
              877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967,
              971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039,
              1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109,
              1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201,
              1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283,
              1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367,
              1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451,
              1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499]

def primzerlegung(zahl):
    primfaktoren = []
    zahl_w = zahl
    while zahl_w > 1:
        for zerlegung in prim_bis_1500:
            if zahl_w %  zerlegung == 0:
                primfaktoren.append(zerlegung)
                zahl_w = zahl_w / zerlegung
                break
    return primfaktoren
zahl_input = int(input('Gib eine zu zerlegende Zahl ein: '))
primzerlegung(zahl_input)
print(primfaktoren)
Danke trotzdem und sorry nochmal :=)

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 17:20
von Malta
Bestimmt wird dir dabei auch die Zeile 33 eingezeigt?
Den du hast primfaktoren innerhalb definiert, aber nicht ausserhalb.

Lösche Zeile 33 oder kopiere sie zwischen 29 und 30.

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 17:50
von cofi
Eliazz hat geschrieben:Hier, funktioniert ganz wie geplant:
Dann ist der NameError also geplant?

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 18:07
von Eliazz
Ups warte kurz..

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 18:13
von Eliazz
Upps nochmal, habe eine zu dem Zeitpunkt nicht mehr aktuelle Version gepostet,
HIER :D

Code: Alles auswählen

prim_bis_1500 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,
              67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137,
              139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,
              211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277,
              281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359,
              367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,
              443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521,
              523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
              613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683,
              691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773,
              787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
              877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967,
              971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039,
              1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109,
              1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201,
              1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283,
              1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367,
              1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451,
              1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499]
 
def primzerlegung(zahl):
    primfaktoren = []
    zahl_w = zahl
    while zahl_w > 1:
        for zerlegung in prim_bis_1500:
            if zahl_w %  zerlegung == 0:
                primfaktoren.append(zerlegung)
                zahl_w = zahl_w / zerlegung
                break
    return primfaktoren
zahl_input = int(input('Gib eine zu zerlegende Zahl ein: '))
primfaktoren = primzerlegung(zahl_input)
print(primfaktoren)
Sorry :D so, jetzt, alles klar, fertig :P

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 18:29
von BlackJack
@Eliazz: Funktioniert nicht mit 2301253 :-P

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 19:55
von Sirius3
@BlackJack: das Problem läßt sich einfach lösen:

Code: Alles auswählen

def primzerlegung(zahl):
    if zahl == 2301253:
        return [1511, 1523]
    primfaktoren = []
    zahl_w = zahl
    while zahl_w > 1:
        for zerlegung in prim_bis_1500:
            if zahl_w %  zerlegung == 0:
                primfaktoren.append(zerlegung)
                zahl_w = zahl_w / zerlegung
                break
    return primfaktoren

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 20:01
von BlackJack
:mrgreen:

Re: Was ist falsch an dieser Funktion?

Verfasst: Mittwoch 23. Oktober 2013, 20:04
von bb1898
BlackJack hat geschrieben:@Eliazz: Funktioniert nicht mit 2301253 :-P
Und sollen all die überflüssigen Divisionsversuche wirklich stehen bleiben? Falsch sind sie zugegebenermaßen nicht.