为什么我输入正确时会继续询问?

时间:2015-04-10 01:41:22

标签: python while-loop nested

def main():

 month = 0
 date = 0
 year = 0
 date = [month, date, year]
 user = input("Enter according to mm/dd/yy:")
 user = user.split('/')
 month = user[0]
 date = user[1]
 year = user[2]
 while int(month) > 12  or int(month) < 1 :
    print("Month is incorrect.")
    user = input("Enter according to mm/dd/yy:")
 while int(date) > 31 or int(date) < 0:
    print("Date is incorrect.")
    user = input("Enter according to mm/dd/yy:")
 while int(year) > 15 or int(year) < 15:
    print("Year is incorrect.")
    user = input("Enter according to mm/dd/yy:")

如果月份不对,我会继续纠正错误。请帮忙。我试图让用户的输入与mm / dd / yy的正确形式相匹配。我试图转换yy - &gt; 2015.请帮忙。

2 个答案:

答案 0 :(得分:2)

您的代码中存在错误。 假设我的输入是&#34; 15/30/15&#34;,那么它表示不正确的月份并尝试以格式&#34; mm / dd / yy&#34;来获取用户输入,但现在用户不是基于&#39; \ _分离,所以while循环一直运行直到用户[0]被分配到新月。错误的日期和年份也会发生此错误。 要修复它,只需调用用户输入函数并将用户拆分为while循环本身。

答案 1 :(得分:1)

就像@nneonneo的评论所指出的那样,您忘了更新monthdateyear

这会导致你的while循环只使用这些字段的第一个记录值。

只需在每个while循环结束时添加此代码即可解决当前问题:

 user = input("Enter according to mm/dd/yy:")
 month,date,year = user.split('/')

正如您可能已经猜到的那样,以上是您的问题中这段代码的更好实现:

 user = input("Enter according to mm/dd/yy:")
 user = user.split('/')
 month = user[0]
 date = user[1]
 year = user[2]

这样可以减少每个while循环中的混乱。

此外,假设您当前的缩进是正确的,您的代码将不会为您提供所需的输出,因为它不考虑用户以所有3个无效字段开头的情况:month,{{1} }和date。如果用户首先输入正确的月份,他将能够在以后输入无效月份并仍然产生输出。

您应该使用year块,而不是使用三个while循环。这将确保您得到正确的答案:

if-elif-else