Python SQLite3导入的信息在while循环中不起作用
Python SQLite3导入的信息在while循环中不起作用,python,database,while-loop,sqlite,Python,Database,While Loop,Sqlite,while循环用于在某人输入姓名时出错。“stdpaden”是从SQLite 3数据库中的表中提取的。使用print语句时,它如下所示: 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")
while循环
用于在某人输入姓名时出错。“stdpaden”是从SQLite 3数据库中的表中提取的。使用print语句时,它如下所示:
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: ")
然而,当我调用
vrnaam=Joswa
和atnaam=Schrevel
时,它不起作用,只是停留在循环中。有什么我在监督的吗?首先,stdpaden
是一个元组列表,所以您需要将其展平为一个字符串列表。您可以在列表理解中这样做([stdpaden中的i代表x中的i]
)。然后,您的或语句就没有意义了:我想您是想看看vrnaam或atnaam是否都是,所以您需要在语句中分别给出它们自己的。我认为这是可行的(如果您插入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: ")
列表理解的备选方案
您可以使用itertools
来展平stdpaden
元组列表,而不是[stdpaden中的i代表x]
:
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: ")
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: ")
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: ")