我正在尝试使用while循环创建代码,这将阻止用户在输入原始数据时输入无效日期:
while True:
try:
Date = int(raw_input("Please input the Date in the format DDMM:"))
except ValueError:
print ("Please enter a valid date in the format DDMM")
continue
if int(Date[0]) > 3 or Date < 0 or int(Date[2]) > 1:
print ("Please enter a valid date in the format DDMM")
continue
if int(Date[2:4]) > 12:
print ("Please enter a valid date in the format DDMM")
continue
if int(Date[2:4])==1 or 3 or 5 or 7 or 8 or 10 or 12 and int(Date[0:2])>31:
print ("Please enter a valid date in the format DDMM")
continue
if int(Date[2:4])==2 and int(Date[0:2])>28:
print ("Please enter a valid date in the format DDMM")
continue
if int(Date[2:4])==4 or 6 or 9 or 11 and int(Date[0:2])>30:
print ("Please enter a valid date in the format DDMM")
continue
else:
break
运行代码
时收到以下错误消息if int(Date[0]) > 3 or Date < 0 or int(Date[2]) > 1:
TypeError:'int'对象没有属性' getitem '
答案 0 :(得分:1)
您正在将日期设为int
Date = int(raw_input("Please input the Date in the format DDMM:"))
并且您通过调用[]
的{{1}}访问它。
要使其工作,您需要将其转换回字符串。
__getitem__
无论哪种方式,Date的使用都不一致,例如
Date = str( Date )
将其视为数字。
答案 1 :(得分:0)
这种情况正在发生,因为当你从用户那里获得输入时,你会立即将它作为一个整数投射,但是在你的条件下,你正试图索引或取一个不能工作的整数片< / p>
因此,要解决您的问题,请更改您的行:
Date = int(raw_input("Please input the Date in the format DDMM:"))
到
Date = raw_input("Please input the Date in the format DDMM:")
您的代码还有一些其他问题会阻止它按预期工作。例如,这在语法上是不正确的:
if int(Date[2:4])==4 or 6 or 9 or 11 and int(Date[0:2])>30
至少,作为直接修复,您需要执行以下操作:
if int(Date[2:4])==4 or int(Date[2:4])==6 or int(Date[2:4])==9 or int(Date[2:4])==11 and int(Date[0:2])>30
但是你可能想考虑重构代码以使整体更清洁
答案 2 :(得分:0)
您可以使用datetime
模块:
import datetime
def validate(d):
try:
datetime.datetime.strptime(d, '%m%d')
except ValueError:
raise ValueError("Please enter a valid date in the format MMDD")
validate('1010')
validate('1099')