- Python 2.7 getting user input and manipulating as string without quotations
- 8 Answers 8
- Получение пользовательского ввода в Python с input()
- Ввод в Python
- Сравнение функций input и raw_input
- Строковый и числовой ввод
- Обработка исключений ввода
- Полный пример
- Выводы
- How do you read input() as a string in python
Python 2.7 getting user input and manipulating as string without quotations
Is there a way for testVar to be a string without me having the user type his response in quotes? i.e. «Hello» vs. Hello If the user types in Hello, I get the following error: NameError: name ‘Hello’ is not defined
8 Answers 8
Use raw_input() instead of input() :
testVar = raw_input("Ask user for something.")
input() actually evaluates the input as Python code. I suggest to never use it. raw_input() returns the verbatim string entered by the user.
Although for anyone reading this using Python 3, input now works this way, and raw_input is gone.
The function input will also evaluate the data it just read as python code, which is not really what you want.
The generic approach would be to treat the user input (from sys.stdin ) like any other file. Try
import sys sys.stdin.readline()
If you want to keep it short, you can use raw_input which is the same as input but omits the evaluation.
also, if you are writing an interactive program, consider importing readline — this will give features similar to bash (history out-of-the-box, auto-completion will require some legwork)
This is the best answer for both Python 2 and 3 compatibility. It works in both versions. At the end, of course, the end-of-line character is also added (in Linux is it \n ), which does not interfere at all. In Python 3, the raw_input function is replaced by the input function, but for compatibility reasons it is a completely different function ! In Python 3, the input function also allows to insert a string, but in Python 2, the input function does not allow to insert a string (only the raw_input function allow the string, which is already removed in Python 3, unfortunately).
We can use the raw_input() function in Python 2 and the input() function in Python 3. By default the input function takes an input in string format. For other data type you have to cast the user input.
In Python 2 we use the raw_input() function. It waits for the user to type some input and press return and we need to store the value in a variable by casting as our desire data type. Be careful when using type casting
x = raw_input("Enter a number: ") #String input x = int(raw_input("Enter a number: ")) #integer input x = float(raw_input("Enter a float number: ")) #float input x = eval(raw_input("Enter a float number: ")) #eval input
In Python 3 we use the input() function which returns a user input value.
x = input("Enter a number: ") #String input
If you enter a string, int, float, eval it will take as string input
x = int(input("Enter a number: ")) #integer input
If you enter a string for int cast ValueError: invalid literal for int() with base 10:
x = float(input("Enter a float number: ")) #float input
If you enter a string for float cast ValueError: could not convert string to float
x = eval(input("Enter a float number: ")) #eval input
If you enter a string for eval cast NameError: name ‘ ‘ is not defined Those error also applicable for Python 2.
If you want to use input instead of raw_input in python 2.x,then this trick will come handy
if hasattr(__builtins__, 'raw_input'): input=raw_input
testVar = input("Ask user for something.")
testVar = raw_input("Ask user for something.")
My Working code with fixes:
import random import math print "Welcome to Sam's Math Test" num1= random.randint(1, 10) num2= random.randint(1, 10) num3= random.randint(1, 10) list=[num1, num2, num3] maxNum= max(list) minNum= min(list) sqrtOne= math.sqrt(num1) correct= False while(correct == False): guess1= input("Which number is the highest? "+ str(list) + ": ") if maxNum == guess1: print("Correct!") correct = True else: print("Incorrect, try again") correct= False while(correct == False): guess2= input("Which number is the lowest? " + str(list) +": ") if minNum == guess2: print("Correct!") correct = True else: print("Incorrect, try again") correct= False while(correct == False): guess3= raw_input("Is the square root of " + str(num1) + " greater than or equal to 2? (y/n): ") if sqrtOne >= 2.0 and str(guess3) == "y": print("Correct!") correct = True elif sqrtOne < 2.0 and str(guess3) == "n": print("Correct!") correct = True else: print("Incorrect, try again") print("Thanks for playing!")
Получение пользовательского ввода в Python с input()
Получение и обработка информации — один из важнейших элементов любого языка программирования, особенно если речь идет о получении информации от пользователей.
Python, будучи медленным относительно таких языков, как C или Java, предлагает продвинутые инструменты для получения, анализа и обработки данных от конечного пользователя.
В этом материале речь пойдет о том, какие функции Python можно использовать для этих целей.
Ввод в Python
Для получения информации с клавиатуры в Python есть функции input() или raw_input() (о разнице между ними чуть позже). У них есть опциональный параметр prompt , который является выводимой строкой при вызове функции.
Когда input() или raw_input() вызываются, поток программы останавливается до тех пор, пока пользователь не введет данные через командную строку. Для ввода нужно нажать Enter после завершения набора текста. Обычно Enter добавляет символ новой строки ( \n ), но не в этом случае. Введенная строка просто будет передана приложению.
Интересно, что кое-что поменялось в принципе работе функции между Python 2 и Python 3, что отразилось в разнице между input() и raw_input() . Об этом дальше.
Сравнение функций input и raw_input
Разница между этими функциями зависит от версии Python. Так, в Python 2 функция raw_input() используется для получения ввода от пользователя через командную строку, а input() оценивает ее и попробует запустить как код Python.
В Python 3 от raw_input() избавились, оставив только input() . Она используется для получения ввода пользователя с клавиатуры. Возможности input() из Python 2 в Python 3 работать не будут. Для той же операции нужно использовать инструкцию eval(input()) .
Взгляните на пример функции raw_input в Python 2.
# Python 2 txt = raw_input("Введите что-нибудь, чтобы проверить это: ") print "Это то, что вы только что ввели?", txt
Введите что-нибудь, чтобы проверить это: Привет, мир! Это то, что вы только что ввели? Привет, мир!
А вот как она работает в Python 3
# Python 3 txt = input("Введите что-нибудь, чтобы проверить это: ") print("Это то, что вы только что ввели?", txt)
Введите что-нибудь, чтобы проверить это: Привет, мир 3! Это то, что вы только что ввели? Привет, мир 3!
Дальше в материале будет использоваться метод input из Python 3, если не указано другое.
Строковый и числовой ввод
По умолчанию функция input() конвертирует всю получаемую информацию в строку. Прошлый пример продемонстрировал это.
С числами нужно работать отдельно, поскольку они тоже изначально являются строками. Следующий пример показывает, как можно получить информацию числового типа:
# Ввод запрашивается и сохраняется в переменной test_text = input ("Введите число: ") # Преобразуем строку в целое число. # функция float() используется вместо int(), # для преобразования пользовательского ввода в десятичный формат, test_number = int(test_text) # Выводим в консоль переменную print ("Введенное число: ", test_number)
Введите число: 13 Введенное число: 13
Того же можно добиться и таким образом:
test_number = int(input("Введите число: "))
Здесь сразу после сохранения ввода происходит преобразование и присваивание значения переменной.
Нужно лишь отметить, что если пользователь ввел не целое число, то код вернет исключение (даже если это число с плавающей точкой).
Обработка исключений ввода
Есть несколько способов, как можно удостовериться в том, что пользователь ввел корректные данные. Один из них — перехватывать все возможные ошибки, которые могут возникнуть.
Вот такой код считается небезопасным:
test2word = input("Сколько вам лет? ") test2num = int(test2word) print("Ваш возраст ", test2num)
Запустим его и введем следующее:
При вызове функции int() со строкой Пять появится исключение ValueError , и программа остановит работу.
Вот как можно сделать код безопаснее и обработать ввод:
test3word = input("Введите свое счастливое число: ") try: test3num = int(test3word) print("Это правильный ввод! Ваше счастливое число: ", test3num) except ValueError: print("Это не правильный ввод. Это не число вообще! Это строка, попробуйте еще раз.")
Этот блок оценит ввод. Если он является целым числом, представленным в виде строки, то функция input() конвертирует его в целое число. Если нет, то программа выдаст исключение, но вместо ошибки оно будет перехвачено. В результате вызовется вторая инструкция print .
Вот так будет выглядеть вывод с исключением.
Введите свое счастливое число: Семь Это не правильный ввод. Это не число вообще! Это строка, попробуйте еще раз.
Такой код можно объединить с другой конструкцией, например, циклом for, чтобы убедиться, что код будет выполняться постоянно, до тех пор, пока пользователь не введет те данные, которые требуются.
Полный пример
# Создадим функцию для демонстрации примера def example(): # Бесконечный цикл, который продолжает выполняться # до возникновения исключения while True: test4word = input("Как вас зовут? ") try: test4num = int(input("Сколько часов вы играете на своем мобильном телефоне?" )) # Если полученный ввод не число, будет вызвано исключение except ValueError: # Цикл будет повторяться до правильного ввода print("Error! Это не число, попробуйте снова.") # При успешном преобразовании в целое число, # цикл закончится. else: print("Впечатляет, ", test4word, "! Вы тратите", test4num*60, "минут или", test4num*60*60, "секунд на игры в своем телефоне!") break # Вызываем функцию example()
Как вас зовут? Александр Сколько часов вы играете на своем мобильном телефоне? 3 Впечетляет, Александр! Вы тратите 180 минут или 10800 секунд на игры в своем телефоне!
Выводы
В этой статье вы узнали, как встроенные инструменты Python используются для получения пользовательского ввода в разных форматах. Также научились обрабатывать исключения и ошибки, которые могут возникнуть в процессе.
How do you read input() as a string in python
However, I get the error: TypeError: Can't convert 'int' object to str implicitly I'm assuming it does this because person_name is read as an int even though a string is provided. How can I get this work? The catch is that I cannot edit the print line. I can only do this in 1 statement in place of person_name = input() . I googled it and saw to use raw_input instead but that function doesn't exist (Maybe I'm on python 3)
If you don't have raw_input , then you're on Python 3, and input always returns a string. I just ran your code on both Python 2.7 & 3.5, and neither gave me an error.
Nothing interesting: Traceback (most recent call last): File "main.py", line 7, in print('In 5 years', person_name, 'will be', person_age + 5) TypeError: Can't convert 'int' object to str implicitly
Are you running the same code you show us? The error would happen if person_age was a string not an int. You could print(repr(person_age)) to verify. BTW, put the traceback in question inside a code block for readability.
That's a different script than you posted. When you do person_age = input() , person_age is a string, not an integer. Its the character "6" (or whatever you typed in) not the number 6. You can do person_age = int(input()) to get an int. But beware, other garbage entry such as "hahaha" raises a value error. I spent much more time on this than the time it would have taken you to enter the right script and run it. Checking your code is part of the engineering discipline.