当我运行这个程序时,我得到错误,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)]))
答案 0 :(得分: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!
答案 1 :(得分: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
用于提供各种输出。如果您打算使用输入,输出和日期,我建议您阅读documentation。 datetime
可以轻松扩展到更复杂的日期任务。
如果您使用的是Python2,请将input
更改为raw_input
。
我还删除了你的if
声明 - 似乎是在检查MM与MM的定义。请注意CalendarDict
是必要的,因为您可以使用datetime
的强大功能。我已将while
循环改为仅使用控制流语句,而不是变量。
同样是一般性提示:使用camelCasing
或underscore_casing
作为变量,因为CapitalCasing
通常是为类保留的。
答案 2 :(得分:0)
正如其他人所指出的那样,绊倒你的是slice notation。这是一个似乎可以做你想要的版本:
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)]))
注意开始和结束位置是如何匹配的。