Seite 1 von 1
Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Dienstag 3. November 2020, 20:32
von PythonerXY
Hallo,
gerade habe ich versucht ein Programm zur Primfaktorzerlegung zu schreiben.
Das Programm ist natürlich noch nicht fertig. Allerdings habe ich im Debugger versucht das Programm nur mit dem Teil, in dem ich alle Primzahlen in eine Liste schreibe auszuführen.
Das Ganze hat so lange geklappt bis ich versucht habe das mit Variablen etwas auszubauen. Allerdings kommt jedes mal der Fehler, dass ich einen String und keinen Integer verwenden würde. (Bei meiner Variable "inputNumb")
Ich bin noch ein Anfänger deshalb entschuldigt bitte, wenn der Fehler offensichtlich ist.
Hier der Code:
Code: Alles auswählen
import math
inputNumb = int(input("Bitte geben Sie die umzuwandelnde Nummer ein (Sie muss eine ganze Zahl sein)."))
primes = []
def isprime(number):
if number <= 1:
return False
if number == 2:
return True
if number % 2 == 0:
return False
for ind in range(3, int(math.sqrt(number))+1):
if number % ind == 0:
return False
return True
for i in range (1, inputNumb / 2):
if isprime(i):
primes.append(i)
else:
continue
print(primes)
Vielen Dank im Voraus für Eure Hilfe.
Re: Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Dienstag 3. November 2020, 21:25
von sparrow
@PythonerXY: Poste immer die Fehlermeldung - also den kompletten Traceback - zu deinem Code. Denn der Fehler ist nicht der, den du beschreibst.
Code: Alles auswählen
for i in range (1, inputNumb / 2):
TypeError: 'float' object cannot be interpreted as an integer
Range braucht zwei Ganzzahlen.
Das Ergebnis der Division von zwei Ganzzahlen ist in Python 3.x immer eine Fließkommazahl (float):
Es gibt aber auch Ganzzahlige Division:
Wobei hier immer abgerundet wird.
Re: Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Dienstag 3. November 2020, 21:41
von __blackjack__
@PythonerXY: Anmerkungen zum Quelltext: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Namen sollten nicht kryptisch abgekürzt werden. Oder was ist eine indische Zahl (`ind`) und wie kann eine Eingabe taub oder gefühllos sein (`inputNumb`)?
Eingerückt wird mit vier Leerzeichen pro Ebene.
Das ``else: continue`` ist sinnfrei weil das an der Stelle nichts bewirkt. Mit ``continue`` würde ich auch eher sparsam umgehen weil das ein unbedingter Sprung ist, den man dem Code nicht an den Einrückungen ablesen kann. ``continue`` erschwert also die Lesbarkeit/das Verständnis von Code.
Bei der ``for``-Schleife in der Funktion könnte man die Anzahl der Durchläufe halbieren in dem man nur über die ungeraden Zahlen iteriert. Denn wenn die zu testende Zahl durch eine gerade Zahl teilbar währe, dann wäre sie ja davor schon durch 2 teilbar gewesen.
Re: Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Mittwoch 4. November 2020, 12:51
von PythonerXY
@sparrow
@_blackjack_
Ok, vielen Dank.
Ich hatte einfach das 2. "/" vergessen.
Danke auch für die Vereinfachungshilfen.
Primfaktorzerlegung Funktionsfehler
Verfasst: Mittwoch 4. November 2020, 14:38
von PythonerXY
Hallo Forum,
ich hatte gestern ein Programmteil bereits veröffentlicht in dem ich jetzt auch alle Fehler beheben konnte.
Dieses Mal kann es sich allerdings nur um einen Anfängerfehler handeln, denn meine Calculator Methode kann ich keine Werte mitgeben was allerdings zwingend notwendig ist.
Hier das Programm:
import math
Code: Alles auswählen
def isprime(number):
if number <= 1:
return False
if number == 2:
return True
if number % 2 == 0:
return False
for int_numb in range(3, int(math.sqrt(number))+1):
if number % int_numb == 0:
return False
else:
return True
def calculator(primes, input_numb, solution):
solution = input_numb
while solution > 2 and solution != primes.index():
laufvariable = 0
if True == isinstance(solution / primes[laufvariable], int):
endergebnis = endergebnis + laufvariable + ["*"]
solution = solution / primes.index(laufvariable)
laufvariable = 0
else:
laufvariable = laufvariable + 1
return endergebnis
while bool(input("Wenn Sie das Programm starten wollen bestätigen Sie mit *True* (Ohne *)")):
input_numb = int(input("Bitte geben Sie die umzuwandelnde Nummer ein (Sie muss eine ganze Zahl sein)."))
primes = []
for i in range(1, input_numb // 2):
if isprime(i):
primes.append(i)
solution = 0
calculator(primes, input_numb, solution)
print("Dies ist eine Liste mit allen benötigten Primzahlen für die Rechnung: ")
print(primes)
Hier der Fehler:
Traceback (most recent call last):
File "C:/Users/foer1/PycharmProjects/ZahlenInPrimzahlen/main.py", line 41, in <module>
calculator(primes, input_numb, solution)
File "C:/Users/foer1/PycharmProjects/ZahlenInPrimzahlen/main.py", line 20, in calculator
while solution > 2 and solution != primes.index():
TypeError: index expected at least 1 argument, got 0
PS: Ich weiß auch, dass die Bedingung der while Schleife noch nicht ausgereift ist.
Re: Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Mittwoch 4. November 2020, 14:47
von Jankie
Die index Methode wendet man z.B. auf Strings an um zu schauen an welcher Stelle sich das erste Zeichen befindet, nachdem man sucht. Das ist auch der Paramter der übergeben werden muss, das Zeichen welches in einem String gesucht werden soll. Was soll das denn deiner Meinung nach machen oder was hast du vor?
Code: Alles auswählen
sentence = "Das ist ein Beispieltext."
print(sentence.index("B"))
Die Zeile
Code: Alles auswählen
if True == isinstance(solution / primes[laufvariable], int)
ist genau wie, da isinstance schon einen Wahrheitswert zurückgibt.
Statt
kannst du auch
schreiben.
Re: Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Mittwoch 4. November 2020, 15:20
von PythonerXY
Kurze Korrektur von dem letzten Beitrag, da ich diesen nicht mehr ändern kann.
Anstatt Methode war natürlich Funktion gemeint.
Re: Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Mittwoch 4. November 2020, 15:22
von PythonerXY
@Jankie
Im Index Teil soll eigentlich nach dem Element der Liste gesucht werden.
Habe ich dafür INDEX falsch verwendet?
Re: Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Mittwoch 4. November 2020, 15:26
von PythonerXY
@Jankie
Mit dem ersten Index will ich sagen, dass die Zahl kein Element der Liste primes[] sein darf.
Mit dem 2. hatte ich vor das Element "Laufvariable" von Liste auszulesen.
Re: Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Mittwoch 4. November 2020, 15:34
von Jankie
Zum prüfen ob ein Element in einer Liste oder einem String vorkommt benutzt man in.
Code: Alles auswählen
sentence = "Das ist ein Beispieltext."
print("a" in sentence)
print("y" in sentence)
Hier teilst du solution durch den index der Zahl 0 in der Liste primes.
Re: Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Mittwoch 4. November 2020, 15:35
von PythonerXY
Ok vielen Dank
Re: Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Mittwoch 4. November 2020, 15:37
von PythonerXY
Und wenn man nach einem bestimmten Element in der Liste sucht?
Re: Stings und Integar in Bedingungen (Initialisierungsfehler)
Verfasst: Mittwoch 4. November 2020, 15:39
von __blackjack__
@PythonerXY: Dann benutzt man immer noch ``in``.