Python while循环用户输入,直到在sql中找到结果



我希望我的代码要求用户输入用户ID。如果在SQL数据库中找到用户ID,系统将成功打印。否则,它会一直要求用户输入用户ID。现在,如果我先输入一个有效的用户ID(U0020(,代码运行良好。

问题是,如果我首先键入错误的用户ID(ewehri(,即使我随后键入有效的用户ID,输出仍然是";对不起,数据库中没有这样的记录。请再试一次"并再次提示用户输入。我不知道如何解决这个问题。

首先,我定义调用sql数据库以从用户ID:中获取帐号

conn=create_connection()
def getacct(userid): 
query = """
select Account_Number
from User_Account
where UserID = '{}'
""" .format(userid)
return (execute_read_query (conn, query))

这很好用。之后,我这样做是为了将结果放入一个列表:

userid = input("Please enter your user id:")
acct_no = getacct(userid)
accountno = []
for i in acct_no:
accountno.append(i[0])

然后是有问题的部分。我检查列表[accountno]是否为空。如果为空,则表示用户ID不在数据库中,因此无法返回任何帐号。如果它不是空的,那么它应该打印";"成功";并退出循环。但是,如前所述,它不会退出循环。

def User():
while accountno:
print("successful")
break
else:
print ("Sorry, no such record in the database. Please try again")
userid = input("Please enter your user id:")

我还尝试了该代码的多次迭代,比如将";将结果放入列表";def User((中代码的一部分,或者这个:

def User():
while not accountno:
print ("Sorry, no such record in the database. Please try again")
userid = input("Please enter your user id:")

if accountno:
print ("Successful!")

还有很多,但我就是得不到我需要的输出。我希望这里有人知道我做错了什么。谢谢你的帮助!

您可以使用accountno.pop()。紧接在CCD_ 2之后。通过使用pop方法而不是del,您可以稍后使用该值,例如saveUserID = accountno.pop()。另一种选择是在print("Successful")部分之后立即使用break语句。然而,您的另一个问题是,您没有将userid附加到accountno,而是使用if来检查accountno,而不是userid中的新输入。最后,应该将accountno作为函数参数传递给User(),并将其用作返回类型。这里有一个更好的例子:

def User(userid):
while not userid:
print ("Sorry, no such record in the database. Please try again")
userid = input("Please enter your user id:")
print ("Successful!")
return userid

这样,您的accountno变量将包含一个成功输入的用户ID。你的打印应该在while循环之后,因为它只在成功后打印。

要使用,请说出以下内容:

accountno.append(User(accountno))

最新更新