Python int input ошибка

Только начинаю изучать Python, однако возникла проблема с вводом переменных:

a = int(input())
b = int(input())
print(a + b)

При запуске программы и вводе переменных, например 1 и 2(ввожу через enter, не в одну строку) возникает данная ошибка, хотя на выходе ожидается 3:

Traceback (most recent call last):
File "****", line 2, in <module>
b = int(input())
ValueError: invalid literal for int() with base 10: '' 

Вторая переменная, насколько я понял, просто не считывается. Причем возникает проблема только в том случае, если вводить переменные подряд. Если команды ввода разделить, то тогда они будут работать нормально. Вводим 1 и 2:

a = int(input())
print()
b = int(input())
print(a + b)

На выходе получаем 3, т е программа исправно работает.
Хотелось бы услышать, возможно ли вводить 2 переменные подряд именно таким способом, без использования различных костылей. Заранее спасибо.
P.S
Через отладчик программа работает исправно и никаких проблем не возникает.

Ive set up this program that checks the mark out of 100 for a test. If the user inputs less than 60 it should say fail if more than 59, pass.

mark = int(input("Please enter the exam mark out of 100 "))
if mark < 60:
    print("nFail")
elif mark < 101:
    print("nPass")
else:
    print("nThe mark is out of range")

how do i get the program not to have errors if the user does not input the Integer.

Please help, is there a quick solution that 14 year olds would understand?

martineau's user avatar

martineau

119k25 gold badges165 silver badges297 bronze badges

asked Jul 11, 2012 at 12:42

Tech484's user avatar

2

Save the input in a variable and convert to an integer separately:

import sys

i = input("Please enter the exam mark out of 100 ")
try:
    mark = int(i)
except ValueError:
    print('nYou did not enter a valid integer')
    sys.exit(0)
if mark < 60:
    print("nFail")
elif mark < 101:
    print("nPass")
else:
    print("nThe mark is out of range")

If it fails (i.e., you get a ValueError) then print a message and exit. You can explain (to a 14-year old) that int() needs a valid integer as input and it will raise a ValueError otherwise. That makes sense because only strings that contain an integer can be converted by int().

answered Jul 11, 2012 at 12:46

Simeon Visser's user avatar

Simeon VisserSimeon Visser

118k18 gold badges184 silver badges180 bronze badges

try:
   mark = int(input("Please enter the exam mark out of 100 "))
except ValueError:
   print("nPlease only use integers")

answered Jul 11, 2012 at 12:44

Rob Wagner's user avatar

Rob WagnerRob Wagner

4,39115 silver badges24 bronze badges

1

  • Главная

  • Инструкции

  • Python

  • Оператор ввода в Python: руководство

Интерактивные возможности в Python обеспечиваются за счет ряда инструментов, одним из которых является функция input(). Ее также называют оператор ввода в Python. Главное назначение этого оператора заключается в том, чтобы принимать пользовательский ввод. Можно сказать, что он наполняет программы в Python смыслом, ведь без взаимодействия пользователя с приложением толку от последнего немного.

Эта функция работает следующим образом:

user_name = input('Введите свое имя: ')
user_age = int(input('Сколько вам лет? '))

Сначала мы просим пользователя указать имя, а затем возраст, и оба этих ввода реализуются с помощью специального оператора, который принимает введенные значения и записывает их в переменные user_name и user_age. А далее мы работаем с этими значениями. Например, можно создать условие для входа на сайт по возрасту (для этого нам понадобится перевести значение возраста в целое число при помощи инструкции int()) и написать приветствие, используя введенное имя пользователя:

if user_age < 18:
    print('Извините, но вход только для совершеннолетних')
else:
    print('Добро пожаловать на сайт,', user_name, '!')

А что будет, когда int() примет пустое значение? Например, если пользователь нажмет Enter. Допишем программу и посмотрим:

user_name = input('Введите свое имя: ')
user_age = int(input('Сколько вам лет? '))
if user_age < 18:
    print('Извините, но вход только для совершеннолетних')
else:
    print('Добро пожаловать на сайт,', user_name, '!')
    input('Нажмите Enter для перехода в меню')
    print('Добро пожаловать в меню')

При нажатии Enter программа переходит к следующей строке кода. А если ее нет, то выполняется выход из программы: такова логика работы функции. Поэтому последняя строка может быть такой:

input('Нажмите Enter для выхода')

И, если никаких строк в программе больше нет, произойдет выход. Вот полная версия программы:

user_name = input('Введите свое имя: ')
user_age = int(input('Сколько вам лет? '))
if user_age < 18:
    print('Извините, но вход только для совершеннолетних')
else:
    print('Добро пожаловать на сайт,', user_name, '!')
    input('Нажмите Enter для перехода в меню')
    print('Добро пожаловать в меню')
input('Нажмите Enter для выхода')

Если пользователь укажет разрешенный возраст, то увидит текст в блоке else, а если нет, то только в блоке if, а затем завершающее сообщение, которое высветится в конце для всех: Нажмите Enter для выхода. В программе оператор ввода используется 4 раза, причем в двух последних случаях он не принимает никаких значений, а нужен для перехода к следующей части кода и для выхода из программы.

input() в интерпретаторе

Выше мы написали готовую программу, но можно делать это построчно и в интерпретаторе Python. Правда в этом случае, чтобы переходить к написанию следующих строк кода, нам придется вводить данные сразу же:

>>> user_name = input('Введите свое имя: ')
Введите свое имя: Вася
>>> user_age = int(input('Сколько вам лет? '))
Сколько вам лет? 18

И так далее. Код тоже будет исполняться, а значения записываться в переменные, и таким способом можно тестировать отдельные блоки. Только помните, что значения будут сохраняться только до выхода из интерактивного режима, поэтому желательно параллельно дублировать код в файл с расширением .py.

Методы преобразования ввода: int(), float(), split()

В некоторых случаях необходимо преобразовать введенные данные в определенный тип: например, в целое число, рациональное число с запятой или в строку. С первым типом преобразования мы уже познакомились в прошлом примере:

user_age = int(input('Сколько вам лет? '))

Инструкция int() переводит значение в целочисленное, позволяя интерпретатору Python оперировать с ним как с числовым типом (цифры, введенные по умолчанию, не являются такими объектами, поэтому Питону нужна дополнительная инструкция). Добавим, что присвоение числовым переменным целочисленного значения реализуется и более длинным способом:

user_age = input('Сколько вам лет? ')
user_age = int(user_age)

Конечно, первый способ удобнее, но зато подробная запись более наглядна, что полезно для понимания работы функций и инструкций.

Для преобразования ввода в рациональные числа с плавающей запятой используется инструкция float():

height = float(input('Введите свой рост в формате 1.72: '))
weight = float(input('Введите точный вес (до 0,1 кг) в формате 80.3: '))

Или другим способом:

height = input('Введите свой рост в формате 1.72: ')
height = float(height)
weight = input('Введите точный вес (до 0,1 кг) в формате 80.3: ')
weight = float(weight)

Теперь программа преобразует введенные числа в числа с плавающей запятой и затем сможет оперировать ими в расчетах.

Инструкция split() позволяет преобразовывать вводимые слова в списки. Вот как она работает:

animals = input('Введите названия любимых животных через пробел: ').split()
print('Вот они в виде списка:', animals)

Получим такой вывод:

Введите названия любимых животных через пробел: кот собака заяц лиса медведь
Вот они в виде списка: ['кот', 'собака', 'заяц', 'лиса', 'медведь']

Боремся с ошибками ввода

Нередко случается, что пользователи ошибаются при вводе или вводят некорректные символы намеренно. В этом случае неверный ввод может спровоцировать вылет:

>>> height = float(input('Введите свой рост в формате 1.72: '))
Введите свой рост в формате 1.72: 1ю72
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    height = float(input('Введите свой рост в формате 1.72: '))
ValueError: could not convert string to float: '1ю72'

Появилась ошибка, в описании которой указано, что интерпретатор не может преобразовать строку в число. Поэтому для таких случаев мы должны предусмотреть защиту. Реализуется она с помощью условной конструкции try-except:

try:
    height = float(input('Введите свой рост в формате 1.72: '))
except ValueError:
    height = float(input('Введите свой рост в указанном формате: '))

Теперь вспомним нашу первую программу и сделаем более надежной и ее, переписав блок кода с вводом возраста таким образом:

try:
    user_age = int(input('Сколько вам лет? '))
except ValueError:
    user_age = int(input('Введите число: '))

Однако при повторной ошибке ввода такие программы всё равно вылетят. Для максимальной устойчивости можно организовать ввод с использованием цикла:

while True:
    try:
        height = float(input('Введите свой рост в формате 1.72: '))
        break
    except ValueError:
        print('Давайте ещё разок,')
        continue
print('Спасибо!')

Мы использовали цикл while с инструкциями break и continue. Теперь программа работает так: если введенное значение корректно, цикл прерывается (действует оператор break) и программа переходит к завершающему блоку кода: print('Спасибо!'). Если же введенное значение нельзя преобразовать в число с плавающей запятой, мы обрабатываем ошибку ValueError при помощи исключения except и инструкции continue. Последняя не позволяет программе вылетать после очередной ошибки ввода, а возвращает ее к началу цикла. В результате, поскольку условие try не выполняется, программа будет предлагать пользователю ввести данные до тех пор, пока он не сделает это корректно.

Для устойчивой к ошибкам программы с возрастом полный код будет выглядеть так:

user_name = input('Введите свое имя: ')
while True:
    try:
        user_age = int(input('Сколько вам лет? '))
        break
    except ValueError:
        print('А если серьезно?')
        continue
if user_age < 18:
    print('Извините, но вход только для совершеннолетних')
else:
    print('Добро пожаловать на сайт,', user_name, '!')
    input('Нажмите Enter для перехода в меню')
    print('Добро пожаловать в меню')
input('Нажмите Enter для выхода')

Конечно, в этих программах вы сможете ввести любые цифры (и рост 3 метра, и возраст 300 лет), но, чтобы заставить пользователей вводить реалистичные данные, потребуется использовать диапазоны значений. Впрочем, это выходит за рамки данной статьи, а с вводом и с исключением ошибок ввода мы уже разобрались.

Здравствуйте. Когда я на строчке n = int(input()) ввел enter, мне выдало ошибку: ValueError: invalid literal for int() with base 10: »
Но я не до конца понял, это значит не соответствие типа данных (вроде присвоило None и не может вывести) или это без всякого присвоения просто ошибка?

П.С. Я совсем новичок в Питоне поэтому извините если вопрос глупый.


  • Вопрос задан

    более двух лет назад

  • 516 просмотров

Пригласить эксперта

ValueError — это исключение, возникающее в случаях, когда в функцию передан аргумент с неподдерживаемым значением.

Когда вы вводите данные с клавиатуры, по умолчанию такие данные являются строкой. Но вы пытаетесь эти данные преобразовать в число с помощью функции int(). Если бы вы ввели число, и нажали enter, тогда бы в переменной n было бы число. А так, скорее всего вы ввели либо не числовые символы, или вообще ничего не ввели и нажали enter. В таком случае разумеется Python не может преобразовать данные в число. Думаю тут все логично.

Напиши вот так:

n = input()
try:
 n = int(n)
except:
 print('Вы ввели не число')


  • Показать ещё
    Загружается…

22 июн. 2023, в 00:59

8000 руб./за проект

22 июн. 2023, в 00:56

8000 руб./за проект

22 июн. 2023, в 00:39

12000 руб./за проект

Минуточку внимания

Other people pointed already out, that in order to keep Stack overflow efficient it is important to have all essential information in the question.

Your question is very minimalist and it’s normally better to show the surrounding code and to explain what you want to achieve and how the error happened.

However in this particular case all the information for a basic answer is already in the error message.

line 1 reads user input and then tries to convert it to a number.

It seems you just pressed enter, which means the result of input() is an empty string.

An empty string cannot be converted to an integer.

if you had entered «hello» the error message would have been

invalid literal for int() with base 10: 'hello'

So just enter a text that can be converted to a number and your program should run successfully.

If not you might want to look at try / except and write code, that detects if the input cannot be converted and react accordingly (depends on your program to know what is expected)

  • Python f строки ошибка
  • Putty ошибка network error software caused connection abort
  • Python exe системная ошибка запуск программы невозможен
  • Putty ошибка network error connection refused
  • Python exe ошибка приложения 0xc000007b