我一直在尝试将我的代码从java转换为python,我遇到了这个问题。我想制作一个日历和我输入的月份和年份的所有内容,我遇到了这个问题,我不知道它意味着什么。
你们可以帮帮我吗?
Traceback (most recent call last):
File "/Users/macbook/Documents/Untitled.py", line 41, in <module>
main()
File "/Users/macbook/Documents/Untitled.py", line 30, in main
m, y = eval(input("Enter the month, and year (separated by spaces): "))
File "<string>", line 1
12 2013
^
SyntaxError: unexpected EOF while parsing
我的代码:
#------------------------------------------------------------------------
def isLeapYear():
if((year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0)):
return true
else:
return false
#---------------------------------------------------------------------
def dayOfWeek(mon, day, year):
if(mon < 3):
year = year-1
wy = 3 + year + (year/4) - (year/100) + (year/400)
wm = int(2.6 * ((mon+9 % 12) +0.5))
wd = day-1
return (wd + wm + wy) % 7
#---------------------------------------------------------------------
def daysInMonth(month, year):
if(month ==4 or month ==6 or month ==9 or month==11):
return 30
elif(month==2):
if(isLeapYear(year)):
return 29
else:
return 28
else:
return 31
def main():
m, y = eval(input("Enter the month, and year (separated by spaces): "))
print("Sun Mon Tue Wed Thu Fri Sat\n")
i=0
while(i<dayOfWeek(m,1,y)):
print(" ")
i=i+1
d=1
while(d <= daysInMonth(m,y)):
print(d)
if(dayOfWeek(m,d,y) == 6):
print("\n")
d=d+1
main()
答案 0 :(得分:2)
eval()
只接受有效的Python表达式。 12 2013
不是有效的Python表达式。
要么用逗号('12, 2013'
)分隔数字,要么使用不同的方法解析日期输入。
尽量避免eval()
解析输入;意图不太友好的用户可以输入任意代码来搞乱您的程序并在执行此操作时劫持该过程。
以下一行也可以用于您的目的:
m, y = map(int, input("Enter the month, and year (separated by spaces): ").split())
答案 1 :(得分:1)
错误显然在这里:
m, y = eval(input("Enter the month, and year (separated by spaces): "))
您似乎已输入字符串12 2013
并要求Python评估它。但是,12 2013
在Python中意味着什么(它只是由空格分隔的两个整数)。你可以
12, 2013
之间添加一个逗号,它将使用相同的代码input
对于安全问题,您应该实施第二个解决方案。