Во-первых, stdpaden
- это список кортежей, поэтому вам нужно сгладить его в список строк. Вы можете сделать это в понимании списка ([i for x in stdpaden for i in x]
). Тогда ваше утверждение or
не имеет смысла как таковое: я полагаю, вы пытаетесь увидеть, оба ли vrnaam
или atnaam
, поэтому вам нужно дать каждому собственное утверждение not in
. Я думаю, что это работает (это выходит из цикла, если вы вставляете Joswa
и Schrevel
):
while vrnaam not in [i for x in stdpaden for i in x] or atnaam not in [i for x in stdpaden for i in x]:
print("Foute invoer")
vrnaam = input("Vul de voornaam van de student in: ")
atnaam = input("Vul de achternaam van de student in: ")
Для ясности кода я бы сначала распаковал ваш список кортежей:
stdpaden = [i for x in stdpaden for i in x]
while vrnaam not in stdpaden or atnaam not in stdpaden:
print("Foute invoer")
vrnaam = input("Vul de voornaam van de student in: ")
atnaam = input("Vul de achternaam van de student in: ")
Альтернатива пониманию списка
Вместо [i for x in stdpaden for i in x]
вы можете использовать itertools
для выравнивания списка stdpaden
кортежей:
stdpaden = list(itertools.chain(*stdpaden))
while vrnaam not in stdpaden or atnaam not in stdpaden:
print("Foute invoer")
vrnaam = input("Vul de voornaam van de student in: ")
atnaam = input("Vul de achternaam van de student in: ")