在下面的代码中,我试图获得第二个'while'语句(而digit_check)以从之前的while_count语句接收新日期。但它似乎从第一个分配行中获取了user_date变量的原始赋值。
如何将新变量赋值传递给第二个while语句?
非常感谢
def main():
user_date = raw_input("Enter a date in the format mm/dd/yyyy and press 'Enter' ")
count = len(user_date)
digit = ''
digit_check = ''
while count != 10:
user_date = raw_input('try again ')
count = len(user_date)
if user_date[0].isdigit() and user_date[1].isdigit() and user_date[3].isdigit() \
and user_date[4].isdigit() and user_date[6].isdigit() and user_date[7].isdigit() \
and user_date[8].isdigit() and user_date[9].isdigit() and user_date[2] == '/' \
and user_date[5] == '/':
digit_check = True
while digit_check != True :
user_date = raw_input('Not right - try again')
convert_date(user_date)
print 'That date is ',convert_date(user_date) + ' ' + user_date[3] + user_date[4] + ',' + user_date[6:]
def convert_date(user_date):
# Convert date to different format
month = ''
if user_date[0] == '0' and user_date[1] == '1':
month = 'January'
elif user_date[0] == '0' and user_date[1] == '2':
month = 'February'
elif user_date[0] == '0' and user_date[1] == '3':
month = 'March'
elif user_date[0] == '0' and user_date[1] == '4':
month = 'April'
elif user_date[0] == '0' and user_date[1] == '5':
month = 'May'
elif user_date[0] == '0' and user_date[1] == '6':
month = 'June'
elif user_date[0] == '0' and user_date[1] == '7':
month = 'July'
elif user_date[0] == '0' and user_date[1] == '8':
month = 'August'
elif user_date[0] == '0' and user_date[1] == '9':
month = 'September'
elif user_date[0] == '1' and user_date[1] == '0':
month = 'October'
elif user_date[0] == '1' and user_date[1] == '1':
month = 'November'
elif user_date[0] == '1' and user_date[1] == '2':
month = 'December'
return month
main()
答案 0 :(得分:1)
一个问题是你没有在这里重新计算digit_check:
while digit_check != True :
user_date = raw_input('Not right - try again')
这将进入一个无限循环。
我建议不要用很多循环和大量的赋值编写一个庞大的函数,而是将代码重构为更小的函数并使用更简单的逻辑。例如:
def getDate():
while True:
user_date = raw_input('Enter a date')
if validate(user_date):
return user_date
else:
print 'Error, try again.'
def validate(user_date):
# etc...
答案 1 :(得分:1)
或者使用内置的库函数?
import re
import datetime
def getDate(msg="Enter a date in the format mm/dd/yyyy and press 'Enter': ", pat=re.compile(r'(\d{1,2})/(\d{1,2})/(\d{4})$')):
while True: # repeat until a valid date is entered
s = raw_input(msg) # get input
match = pat.match(s.strip()) # match against regular expression
if match: # match found?
m,d,y = match.groups()
try:
# parse to date
return datetime.date(int(y), int(m), int(d))
except ValueError:
# parsing failed (month 93 is invalid, etc)
pass
def main():
userDate = getDate()
print('You entered {0}'.format(userDate.strftime('%B %d, %Y')))
if __name__=="__main__":
main()
答案 2 :(得分:0)
你没有在while循环中重新计算digit_check,所以它永远失败,即使user_date正在改变。在user_date = raw_input之后在while循环中添加if块('不正确 - 再试一次')修复它。
话虽如此,你肯定应该把这个检查作为一个单独的功能,特别是因为你现在要调用它两次而不是一次。