Noob想知道如何改进他的代码。
a, b, c = string.split(enteredDate, "/")
m31s = [1, 3, 5, 7, 8, 10, 12]
m30s = [4, 6, 9, 11]
for x in range(len(m31s)):
x = int(m31s[x])
if x != int(a) and b != 31:
print "Invalid date."
for x in range(len(m30s)):
et cetera...
如果不清楚,我正在测试输入的日期以确定它是否有效。这只是该计划的一部分。 主要问题是:测试元素是否与列表中的任何元素匹配的最佳方法是什么?
我的方法有效......但是,我怀疑有更好的方法可以做到这一点。我在标题中说布尔值,因为我想象的是:
if secretCode(m31s, int(a)) == True:
可能是一只白日梦。好奇。
感谢任何花时间提供帮助的人。
答案 0 :(得分:6)
您可以使用语法if elem in list
。例如:
>>> if 1 in [1,2,3,4,5]:
... print 'found 1'
...
found 1
答案 1 :(得分:2)
你应该使用python datetime
库。
try:
datetime.datetime.strptime(enteredDate, "%m/%d/%Y")
except:
print 'Invalid date'
答案 2 :(得分:1)
我建议:
替换
a, b, c = string.split(enteredDate, "/")
与
a, b, c = enteredDate.split("/")
并不重要,但第一个版本需要导入string
模块,第二个版本不需要。
int(m31s[x])
替换为m31s[x]
(您知道这些已经int
,为什么额外int( ... )
呢?secretCode( ... )
返回true或false,您只需撰写if secretCode( ... ):
,无需与== True
进行比较。int(a)
,int(b)
或int(c)
,您可以简单地编写a, b, c = map(int, enteredDate.split("\"))
并稍后忘记那些int( ... )
,因为您知道它们是int。此外,如果这些不是 int,您将立即获得异常而不会在代码中不必要地进展。