运行这行代码时,我得到两个不同的答案:
h = (1 + math.floor(((26*(m + 1))/10)) + k + math.floor(k / 4) + math.floor(j / 4) + (5 * j)) % 7
直接在IDLE中运行时,我得到6
,但是当我将其作为脚本运行时,我得到6.8
。我希望h
的值为int
。当我在程序中打印它时,它给我float
值。
def getStartDay(year, month):
m = month
if m == 1:
month = 12
year = year -1
if m == 2:
month = 14
year = year -1
j = year / 100
k = year % 100
# Zeller's congruence
h = (1 + math.floor(((26*(4 + 1))/10)) + 16 + math.floor(16 / 4) + math.floor(20 / 4) + (5 * 20)) % 7
print(h)
return h
答案 0 :(得分:0)
您只需使用int()
:)
print(int(6.8))
>>> 6
您的代码"已修复":
def getStartDay(year, month):
#Don't forget to import math! and try "import antigravity" :)
m = month
if m == 1:
month = 12
year = year -1
if m == 2:
month = 14
year = year -1
j = year / 100
k = year % 100
# Zeller's congruence (made it shorter, >80 character lines are
# considered bad formatted code .-.)
h = (1 + math.floor(((26*(4 + 1))/10)) + 16 + math.floor(16 / 4)
+ math.floor(20 / 4) + (5 * 20)) % 7
h = int(h)
print(h)
return h
答案 1 :(得分:0)
问题的原因(float而不是int)是floor
函数在python 2和3中的行为不同
Python 2给出了浮动
>>> math.floor(4)
4.0
而Python 3返回int
>>> math.floor(4)
4
我没有为h再现6.8。然而,我可以重现6.0 vs 6,因此可以通过返回'int(h)'
来解决问题。return int(h)