0

当我运行这个程序时,我收到错误,ValueError: invalid literal for int() with base 10: '',我觉得这与 int 和 str 转换有关,但我真的不太确定,感谢任何帮助:)

CalendarDict = {1:"January", 2:"February", 3:"March", 4:"April", 5:"May", 
6:"June", 7:"July", 8:"August", 9:"September", 10:"October", 11:"Novemeber", 
12:"December"}

InputError = True
while InputError:
    try:
        BirthDate = str(input("Enter Birth Date in format DDMMYY - "))
    except ValueError:
        print("Error - Numbers in format DDMMYY only")
        InputError = False

DD = BirthDate[0:2] 
MM = BirthDate[3:4]
YY = BirthDate[4:6]

if MM == BirthDate[3:4]:
   print("Your Birth Month is - ", (CalendarDict[int(MM)]))
4

3 回答 3

2

我宁愿把它放在评论中,但没有足够的代表,所以就这样吧。

首先,Python 中的数组切片要求您以格式给出数字[a:b],其中 a 是您想要获取的第一个字符的索引,b 是该字符的索引,但包括您想要获取的字符,所以变量 MM 应该是BirthDate[2:4].

接下来,要检查某些内容是否符合您的“DDMMYY”要求,您可能应该使用int(input("Enter your DOB)) 因为如果您使用 str() 函数将其转换为字符串,任何人都可以输入随机文本并逃脱它(因为我相信你正在寻找积分输入)

此外,正如其中一条评论所述,尝试放入InputError=False零件try而不是except零件。

所以代码将如下所示:

CalendarDict = {1:"January", 2:"February", 3:"March", 4:"April", 5:"May", 
6:"June", 7:"July", 8:"August", 9:"September", 10:"October", 11:"Novemeber", 
12:"December"}

InputError = True
while InputError:
    try:
        BirthDate = int(input("Enter Birth Date in format DDMMYY - ")) # change to int() from str()
        InputError = False # set error to false since the above line got evaluated
    except ValueError:
        print("Error - Numbers in format DDMMYY only")

DD = BirthDate[0:2] 
MM = BirthDate[2:4]
YY = BirthDate[4:6]

print("Your Birth Month is - ", (CalendarDict[MM])) # converting into integer is not required since it already is one!  
于 2017-08-23T15:44:03.043 回答
1

您可以使用该datetime模块非常有效地做您想做的事情。

import datetime

while True:
    try:
        birthDate = datetime.datetime.strptime(input("Enter Birth Date in format DD/MM/YYYY - "), "%d/%m/%Y")
        break
    except ValueError as ve:
        print(ve)
        continue

print("Your Birth Month is - {}".format(birthDate.strftime("%B")))

这导致使用:

Enter Birth Date in format DD/MM/YYYY - 31/10/2000
Your Birth Month is - October

datetime非常强大,尤其是提供的.strptime,用于解析日期和.strftime提供各种输出。如果您打算使用输入、输出和日期,我建议您阅读文档。datetime很容易扩展到更复杂的带有日期的任务。

如果您使用的是 Python2,请更改inputraw_input.

我还删除了你的if声明——它似乎是根据 MM 的定义来检查 MM。请注意,这CalendarDict是不必要的,因为您可以使用datetime. 我已将您的while循环更改为仅使用控制流语句,而不是变量。

还有一个通用提示:使用camelCasingorunderscore_casing用于变量,CapitalCasing通常是为类保留的。

于 2017-08-23T15:58:02.613 回答
0

正如其他人所指出的那样,让您绊倒的是slice 符号。这是一个似乎可以满足您要求的版本:

CalendarDict = {1:"January", 2:"February", 3:"March", 4:"April", 5:"May", 
6:"June", 7:"July", 8:"August", 9:"September", 10:"October", 11:"Novemeber", 
12:"December"}

while True:
    try:
        BirthDate = str(input("Enter Birth Date in format DDMMYY - "))
        break
    except ValueError:
        print("Error - Numbers in format DDMMYY only")

DD = BirthDate[0:2] 
MM = BirthDate[2:4]
YY = BirthDate[4:]

print("Your Birth Month is - ", (CalendarDict[int(MM)]))

注意开始和结束位置是如何匹配的。

于 2017-08-23T15:54:36.940 回答