Не другой: сообщение об ошибке EOF в LeetCode, отлично работает в Visual Studio

#python #python-3.x #eof

#python #python-3.x #eof

Вопрос:

Я новичок в программировании на Python3, поэтому я надеюсь, что вы согласитесь со мной и моим вопросом. Я нашел похожие вопросы на stackoverflow и других сайтах, но я все еще не смог решить проблему:

Когда я запускаю следующий код в Visual Studio, все в порядке, нет сообщения об ошибке, ничего. С другой стороны, в LeetCode я получаю ошибку EOF, указывающую на самую первую строку ввода.

Сообщение об ошибке: EOFError: EOF при чтении строки num = input(«Введите число: «)
Строка 4 в intToRoman (Solution.py )
ret = Решение().intToRoman(param_1)
Строка 56 в _driver (Solution.py )
_driver()
Строка 67 в (Solution.py )

Код выглядит следующим образом:

 class Solution:
num = ""
def intToRoman(self, num: int) -> str:
    num = input("Enter a number: ") 
    while True:
        try:
            num = int(num)
            if num < 0 or num > 3999:  # if not a positive int or inout larger than 3999 print message and ask for input again
                print("Sorry, input must be a positive integer and smaller than 3999, try again")
                continue
            break
        except ValueError:
            return("That's not an int!") # else all is good, number is >=  0 and an integer

Ones = ["I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", ""] # list of single digit roman numbers 
Tens = ["X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", ""] # list of double digit roman numbers
Hundreds = ["C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", ""] # list of three digit roman numbers
Thousands = ["M", "MM", "MMM", "", "", "", "", "", "", ""] # list of four digit roman numbers
if (len(str((num)))) == 1:
    print (Ones[int(repr(num)[-1]) - 1])
if (len(str((num)))) == 2:
    print (Tens[int(repr(num)[-2]) - 1]   Ones[int(repr(num)[-1]) - 1])
if (len(str((num)))) == 3:
    print (Hundreds[int(repr(num)[-3]) - 1]   Tens[int(repr(num)[-2]) - 1]   Ones[int(repr(num)[-1]) - 1])
if  (len(str((num)))) == 4:
    print (Thousands[int(repr(num)[-4]) - 1]   Hundreds[int(repr(num)[-3]) - 1]   Tens[int(repr(num)[-2]) - 1]   Ones[int(repr(num)[-1]) - 1])
 

Спасибо за любые отзывы, в том числе за то, что нужно оптимизировать в этом коде.

Комментарии:

1. Проверьте кодировку файла и окончания строк (Linux LF против Windows CR LF)

2. Я не пытался решить проблему в LeetCode, поэтому я не уверен, как это должно работать. Но проблема в том, что вы запрашиваете ввод, но sys.stdin он был закрыт. Вы должны получать данные из стандартного интерфейса? Вы уже читали stdin где-нибудь еще? Вы можете удалить весь код, который вы показали после вызова input . Либо вы не получаете данные таким образом, либо что-то до того, как вы вызвали этот метод, уже использовало его.

3. «While True: преобразовать str в int» — это безумие. Было бы достаточно преобразовать данный str только один раз.

4. Спасибо за все ваши отзывы до сих пор.

5. извините, комментарий еще не завершен. Определение класса «решение класса» в строке 1, а также параметры функции в строке 3 были вроде как заданы. Я просто скопировал и вставил остальное из моей macOS Visual Studio. Я посмотрю на окончания строк @Grismar