SQLite3导入的信息在while循环中不起作用

时间:2018-07-04 18:00:09

标签: python database while-loop sqlite

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 = Joswaatnaam = Schrevel时,它不起作用,仅停留在循环中。我有什么要监督的吗?

1 个答案:

答案 0 :(得分:0)

首先,stdpaden是一个元组列表,因此您需要将其展平为字符串列表。您可以通过列表理解([i for x in stdpaden for i in x])来实现。然后,您的or语句就没有意义了:我想您是在尝试查看vrnaam还是atnaam,因此您需要给每个{{1 }}语句。我认为这可行(如果您插入not inJoswa,它将打破循环):

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