我希望我的代码要求用户输入用户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))