当我运行这个程序时,我得到错误,ValueError:对于带有基数10的int()的无效文字:'',我觉得它与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)]))
3 回答
正如其他人所指出的那样,绊倒你的是slice notation . 这是一个似乎做你想要的版本:
注意开始和结束位置如何匹配 .
我宁愿把它放在评论中,但没有足够的代表,所以这里 .
首先,Python中的数组切片要求您以
[a:b]
格式给出数字,其中a是您想要获取的第一个字符的索引,b是字符up的索引,但 NOT 包括您想要获取的字符,所以变量MM应该是BirthDate[2:4]
.接下来,要检查某些内容是否符合您的"DDMMYY"要求,您应该使用
int(input("Enter your DOB
))因为任何人都可以输入随机文本并使用str()函数将其转换为字符串(因为我相信你是寻找积分输入)另外,如其中一条评论中所述,请尝试将
InputError=False
放在try
部分而不是except
部分 .所以代码看起来像这样:
您可以使用
datetime
模块非常有效地执行您想要的操作 .这导致使用:
datetime
非常强大,特别是提供的.strptime
用于解析日期,.strftime
用于提供各种输出 . 如果您打算使用输入,输出和日期,我建议您阅读documentation .datetime
可以通过日期轻松扩展到更复杂的任务 .如果您使用的是Python2,请将
input
更改为raw_input
.我还删除了你的
if
语句 - 它似乎是在检查MM对MM的定义 . 请注意CalendarDict
是不必要的,因为您可以使用datetime
的强大功能 . 我已经将while
循环更改为仅使用控制流语句,而不是变量 .一般提示:对于变量使用
camelCasing
或underscore_casing
,因为CapitalCasing
通常是为类保留的 .