Почему в приведенном ниже коде есть строки x
и y
строки вместо целых?
(Примечание: в Python 2.x используйте raw_input()
. В Python 3.x используйте input()
. raw_input()
Был переименован input()
в Python 3.x)
play = True
while play:
x = input("Enter a number: ")
y = input("Enter a number: ")
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x % y)
if input("Play again? ") == "no":
play = False
Ответы:
TLDR
input
функции, но функция Python 2input
делает (прочитайте следующий раздел, чтобы понять смысл).input
являетсяraw_input
функция.Python 2.x
Было две функции для получения пользовательского ввода, вызванные
input
иraw_input
. Разница между ними заключается в том, чтоraw_input
они не оценивают данные и возвращают их в виде строк. Но,input
оценит все, что вы ввели, и результат оценки будет возвращен. Например,Данные
5 + 17
оцениваются и результат22
. Когда он оценивает выражение5 + 17
, он обнаруживает, что вы добавляете два числа, и поэтому результат также будет того жеint
типа. Таким образом, преобразование типов выполняется бесплатно и22
возвращается как результатinput
и сохраняется вdata
переменной. Вы можете думатьinput
какraw_input
составленный сeval
вызовом.Примечание: вы должны быть осторожны при использовании
input
в Python 2.x. Я объяснил, почему нужно быть осторожным при его использовании, в этом ответе .Но
raw_input
не оценивает ввод и возвращает как есть, в виде строки.Python 3.x
Python 3.x
input
и Python 2.xraw_input
похожи иraw_input
не доступны в Python 3.x.Решение
Чтобы ответить на ваш вопрос, так как Python 3.x не оценивает и не конвертирует тип данных, вы должны явно преобразовать в
int
sint
, например, так:Вы можете принимать числа любой базы и конвертировать их непосредственно в базу-10 с помощью
int
функции, подобной этойВторой параметр сообщает, что является основой введенных чисел, а затем внутренне понимает и преобразует их. Если введенные данные неверны, будет выброшено
ValueError
.Для значений , которые могут иметь дробную составляющую, тип будет ,
float
а неint
:Кроме того, ваша программа может быть немного изменена, как это
Вы можете избавиться от
play
переменной с помощьюbreak
иwhile True
.источник
eval
сработает, но не делайте этого, если у вас нет веских причин.ast.literal_eval
для этого. У него нет проблем безопасностиeval
.int(input()
... вверху? Python 2 приближается к концу своей жизни, и информация о Python 3 слишком похоронена IMOВ Python 3.x
raw_input
был переименован в,input
а Python 2.xinput
был удален.Это означает , что, так же , как
raw_input
,input
в Python 3.x всегда возвращает объект строки.Чтобы решить проблему, вам нужно явно превратить эти входные данные в целые числа, поместив их в
int
:источник
Для нескольких целых чисел в одной строке,
map
может быть лучше.Если число уже известно (например, 2 целых числа), вы можете использовать
источник
input()
(Python 3) иraw_input()
(Python 2) всегда возвращают строки. Конвертировать результат в целое число явно сint()
.источник
Несколько вопросов требуют ввода нескольких чисел в одной строке. Лучший способ - ввести целую строку чисел в одну строку, а затем разбить их на целые числа. Вот версия Python 3:
Также может быть использовано понимание списка
И чтобы преобразовать все входные данные из строки в int, мы делаем следующее
должен распечатать элементы списка по прямой линии.
источник
Преобразовать в целые числа:
Аналогично для чисел с плавающей запятой:
источник
цикл for должен выполняться n раз. вторая 'n' - длина массива. последний оператор отображает целые числа в список и принимает ввод в разделенной пробелами форме. Вы также можете вернуть массив в конце цикла for.
источник
Я столкнулся с проблемой получения целочисленного ввода при решении проблемы в CodeChef , где два целых числа, разделенных пробелом, должны читаться из одной строки.
Хотя
int(input())
достаточно для одного целого числа, я не нашел прямой способ ввода двух целых чисел. Я попробовал это:Теперь я использую num1 и num2 как целые числа. Надеюсь это поможет.
источник
i
разрушается ли приfor
выходе из цикла?@hosch250
При выходе из цикла значение индексной переменной (здесьi
) остается. Я попробовал этот кусок, и он работает правильно.num1, num2 = map(int, input().split())
если знаете, сколько целых чисел вы встретите, либоnums = list(map(int, input().split()))
нет.источник
В то время как в вашем примере,
int(input(...))
делает трюк в любом случае,python-future
«sbuiltins.input
стоит рассмотреть , так как это делает , что ваш код работает как Python 2 и 3 и поведение отключает python2 по умолчаниюinput
пытается быть„умным“о типе входных данных ( вbuiltins.input
основном только ведет себя какraw_input
).источник