SQLite3 импортировал информацию, не работающую в цикле while - PullRequest
0 голосов
/ 04 июля 2018
vrnaam = input("Vul de voornaam van de student in: ")
atnaam = input("Vul de achternaam van de student in: ")
while vrnaam or atnaam not in str(stdpaden):
    print("Foute invoer")
    vrnaam = input("Vul de voornaam van de student in: ")
    atnaam = input("Vul de achternaam van de student in: ")

while loop - это если кто-то неверно вводит имя и фамилию. "stdpaden" извлекается из таблицы в базе данных SQLite 3. С помощью оператора print это выглядит так:

[('4', 'Joswa', 'Schrevel', '1', 'Intelligent Systems', 'nee')]

Тем не менее, когда я звоню vrnaam = Joswa и atnaam = Schrevel, это не работает и просто остается внутри цикла. Есть ли что-то, что я наблюдаю?

1 Ответ

0 голосов
/ 04 июля 2018

Во-первых, 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: ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...