2013-11-30 2 views
1

Я пытаюсь преобразовать свой код из java в python, и я сталкиваюсь с этой проблемой. Я пытаюсь сделать календарь и все, что я ввожу месяц и год, я сталкиваюсь с этой проблемой, что я не знаю, что значит.Ошибка Python EOF error с входами

Можете ли вы, ребята, помочь мне?

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() 

ответ

2

eval() принимает только действительные выражения Python. 12 2013 не является допустимым выражением Python.

Либо требуется, чтобы числа разделялись запятой ('12, 2013') или использовали другой метод анализа ввода даты.

Старайтесь избегать eval() для парсинга ввода; пользователь с менее дружественным намерением может ввести произвольный код, чтобы испортить вашу программу и захватить процесс, когда вы это сделаете.

Следующая строка будет работать так же хорошо для ваших целей:

m, y = map(int, input("Enter the month, and year (separated by spaces): ").split()) 
+0

спасибо! однако после того, как я исправил эту проблему, мои даты не будут распечатываться при компиляции моей программы. я не могу понять проблему. – user3002936

+0

@ user3002936: ваш вызов 'dayOfWeek (m, 1, y)' никогда не меняется, поэтому существует бесконечный цикл. –

+0

О, ладно, и я исправил это, но он все равно не печатает, как должен делать календарь. как мне печатать System.out.printf («% - 5d», d) в python? я застреваю там. – user3002936

1

ошибка, очевидно, здесь:

m, y = eval(input("Enter the month, and year (separated by spaces): ")) 

Вы, кажется, вошел в строку 12 2013 и вы спросите Python для Eval Это. Но, 12 2013 означает nothings в Python (это всего лишь два целых числа, разделенные пробелом). Вы можете

  • Добавить запятую между номером, 12, 2013 и он будет работал с тем же кодом
  • Задайте номера с двумя зову input

Для вопросов безопасности, следует реализовать второе решение ,