3

菜鸟想知道如何改进他的代码。

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:

可能是白日梦。只是好奇。

感谢任何花时间提供帮助的人。

4

3 回答 3

6

您可以使用语法if elem in list。例如:

>>> if 1 in [1,2,3,4,5]:
...     print 'found 1'
... 
found 1
于 2012-10-19T20:08:46.363 回答
2

你应该使用 pythondatetime库。

try:
    datetime.datetime.strptime(enteredDate, "%m/%d/%Y")
except:
    print 'Invalid date'
于 2012-10-19T20:19:48.480 回答
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 ,您将立即获得异常,而无需在代码中进行不必要的进展。
于 2012-10-19T20:18:54.407 回答