Seite 1 von 1

Frage zum Code

Verfasst: Samstag 29. Januar 2022, 22:53
von Eikan
Hallo,
ich habe grade erst angefangen Python zu lernen.
Zur Übung wollte ich ein Programm schreiben, das einen Satz selbstständig vervollständtigt und dazu aus zwei Listen Wörter auswählt und diese einsetzt.
Zudem mussen in jeder Listen min. 4 Einträge sein, ansonsten muss man diese zuserst ergänzen.
Allerdings bekomme ich immer diese Fehlermeldung:

Traceback (most recent call last):
File "C:\Users\Carl\PycharmProjects\Schmeichelprogramm\main.py", line 11, in <module>
while Anzahl_Adjektive < 3 and Anzahl_Substantive < 3:
TypeError: '<' not supported between instances of 'NoneType' and 'int'

Ich dachte das beides int Werte sind. Ich würde mich über eine Erklärung freuen.
Vielen Dank :)

Code: Alles auswählen

from random import randint

Adjektiv = ["schnellste",]
Substantiv= ["Mensch", ]
Anzahl_Substantiv = len(Substantiv) -1
Anzahl_Adjektiv = len(Adjektiv) -1
Random_Adjektiv = randint(0,Anzahl_Adjektiv)
Random_Substantiv = randint(0,Anzahl_Substantiv)


while Anzahl_Adjektive < 3 and Anzahl_Substantiv < 3:
    if Anzahl_Adjektive < 3:
        Anzahl_Adjektive = Adjektiv.append(input("Bitte gebe ein Adjektive ein:"))
    else:
        Substantiv.append(input("Bitte gebe ein Substantiv ein:"))
print("Er ist der " + Adjektiv[Random_Adjektiv] + " " + Substantiv[Random_Substantiv])

Re: Frage zum Code

Verfasst: Samstag 29. Januar 2022, 23:12
von Sirius3
Variablennamen schreibt man nach Konvention komplett klein.
`append` liefert als Rückgabewert None, und nicht die Länge der Liste.
`Anzahl_Substantiv` wird innerhalb der while-Schleife nie geändert, Du hast also eine Endlosschleife.
Die Anzahl ist auch gar nicht die Anzahl sondern Anzahl minus 1, was sehr verwirrend ist, weil der Name der Variable nicht mit dem Inhalt übereinstimmt.
Die Random-Indizes werden schon bestimmt, bevor Du alle Adjektive oder Substantive eingegeben hast, was die Zufälligkeit stark einschränkt.
Statt random.randint benutzt man hier am besten random.choice.
Statt die Anzahl selbst zu verwalten, benutzt man einfach len(adjektive).
Statt eine while-Schleife würde man besser zwei (eine für Adjektive und eine für Substantive) schreiben.
Statt Strings mit + zusammenzustückeln benutzt man f-Strings.

Code: Alles auswählen

from random import choice

adjektive = ["schnellste"]
substantive = ["Mensch"]

while len(adjektive) < 3:
    adjektive.append(input("Bitte gebe ein Adjektive ein:"))

while len(substantive) < 3:
    substantive.append(input("Bitte gebe ein Substantiv ein:"))

random_adjektiv = choice(adjektive)
random_substantiv = choice(substantive)
print(f"Er ist der {random_adjektiv} {random_substantiv}.")