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
用于输入错误的姓名和姓氏。从SQLite 3数据库内部的表中提取“ stdpaden”。使用打印语句看起来像这样:
[('4', 'Joswa', 'Schrevel', '1', 'Intelligent Systems', 'nee')]
但是,当我调用vrnaam = Joswa
和atnaam = Schrevel
时,它不起作用,仅停留在循环中。我有什么要监督的吗?
答案 0 :(得分:0)
首先,stdpaden
是一个元组列表,因此您需要将其展平为字符串列表。您可以通过列表理解([i for x in stdpaden for i in x]
)来实现。然后,您的or
语句就没有意义了:我想您是在尝试查看vrnaam
还是atnaam
,因此您需要给每个{{1 }}语句。我认为这可行(如果您插入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