1

因此,要从 10 月 15 日以来的任何日期算出一周中的哪一天,您可以使用一个简单的算术,我的问题是我从文件中读取了日期(例如 2009-06-12)并且我已经把等式:

w = (d + [2.6 * m - 0.2] + Y + [Y / 4] + 5 * C + [C / 4] ) % 7

日期格式为 yyyy-mm-dd,我的代码如下所示:

count = 5
f = open('/Users/student/Desktop/Harry.txt').readlines()[count]
Y = f[2:4]
C = f[:2]
m = f[5:7]
d = f[8:10]
w = (d + [2.6 * m - 0.2] + Y + [Y / 4] + 5 * C + [C / 4] ) % 7
if w == 0:
    print (f, "is a Sunday")
elif w == 1:
    print (f, "is a Monday")
elif w == 2:
    print (f, "is a Tuesday")
elif w == 3:
    print (f, "is a Wednesday")
elif w == 4:
    print (f, "is a Thursday")
elif w == 5:
    print (f, "is a Friday")
elif w == 6:
    print (f, "is a Saturday")

澄清:

w = day of the week counting from Sunday = 0 Monday = 1
d = the day of the month (for e.g. 28th 13th)
m = month number where March = 1 etc.
Y = last 2 digits of year
C = first 2 digits of year

然而我得到这个错误

Traceback (most recent call last):
  File "/Users/student/Documents/workspace/Tutorial Challenges/src/Day_Of_The_Week.py", line 7, in <module>
    w = (d + [2.6 * m - 0.2] + Y + [Y / 4] + 5 * C + [C / 4] ) % 7
TypeError: can't multiply sequence by non-int of type 'float'

帮助将不胜感激。

4

2 回答 2

1

Y, C, m, 和d都是字符串。您想先将它们转换为整数:

Y = int(f[2:4])
C = int(f[:2])
...

不过,你确定这个等式有效吗?看起来它会产生很多非整数工作日。你可能抄错了。此外,括号不是 Python 中的分组运算符。它们是列表构造语法。您需要在表达式 for 中用括号替换这些括号w。(或者那些括号应该是地板运算符?如果是这样,你会想要math.floor, 从math模块中,或者只是int截断是好的。)

于 2013-07-15T04:51:15.867 回答
0

正如上述用户所说,您想从字符串转换为整数。但是,这是使用 datetime 模块的理想场所。您可以使用它来指定您的日期时间格式为:yyyy-mm-dd,并使用该模块将信息加载为日期时间。

http://docs.python.org/2/library/datetime.html

于 2013-07-15T04:55:09.633 回答