Chcę uzyskać ciąg znaków od użytkownika, a następnie nim manipulować.
testVar = input("Ask user for something.")
Czy istnieje sposób, aby testVar był ciągiem znaków bez konieczności wpisywania przeze mnie odpowiedzi w cudzysłowie? tj. „Hello” vs. Hello
Jeśli użytkownik wpisze Hello, pojawia się następujący błąd:
NameError: nazwa „Hello” nie jest zdefiniowana
python
string
python-2.7
Mike Lee
źródło
źródło
input
automatycznie wywołujeeval()
Odpowiedzi:
Użyj
raw_input()
zamiastinput()
:input()
w rzeczywistości ocenia dane wejściowe jako kod Pythona. Radzę nigdy go nie używać.raw_input()
zwraca dosłowny ciąg znaków wprowadzony przez użytkownika.źródło
input
teraz działa w ten sposób, a raw_input zniknął.input()
jest to użyteczna funkcja i nie polecam jej używania.Funkcja
input
oceni również dane, które właśnie odczytała, jako kod Pythona, co nie jest tym, czego chcesz.Ogólnym podejściem byłoby traktowanie danych wejściowych użytkownika (z
sys.stdin
) jak każdego innego pliku. PróbowaćJeśli chcesz, aby był krótki, możesz użyć
raw_input
tego samego coinput
ocena, ale pomija.źródło
readline
- da to funkcje podobne do bash (historia po wyjęciu z pudełka, automatyczne uzupełnianie będzie wymagało trochę pracy)Możemy użyć
raw_input()
funkcji w Pythonie 2 iinput()
funkcji w Pythonie 3. Domyślnie funkcja wejściowa przyjmuje dane wejściowe w formacie łańcucha. W przypadku innych typów danych musisz przesłać dane wejściowe użytkownika.W Pythonie 2 używamy
raw_input()
funkcji. Czeka, aż użytkownik wpisze jakieś dane wejściowe i naciśnie,return
a my musimy zapisać wartość w zmiennej, rzutując jako nasz pożądany typ danych. Zachowaj ostrożność podczas używania rzutowania czcionekW Pythonie 3 używamy funkcji input (), która zwraca wartość wprowadzoną przez użytkownika.
Jeśli wprowadzisz string, int, float, eval, przyjmie to jako ciąg wejściowy
Jeśli wprowadzisz ciąg dla int cast
ValueError: invalid literal for int() with base 10:
Jeśli wprowadzisz ciąg dla rzutowania typu float
ValueError: could not convert string to float
Jeśli wprowadzisz ciąg dla rzutowania eval
NameError: name ' ' is not defined
Ten błąd dotyczy również Pythona 2.źródło
Jeśli chcesz użyć input zamiast raw_input w pythonie 2.x, ta sztuczka się przyda
Po czym,
będzie działać dobrze.
źródło
źródło
Mój działający kod z poprawkami:
źródło
To jest moja praca, aby uniknąć awarii w przypadku, gdy będę musiał przejść na Python 3 w przyszłości.
źródło
Wydaje się, że problem został rozwiązany w wersji 3.4.2 języka Python.
Będzie działać dobrze.
źródło
input
jest odpowiednikiem Pythona 2.xraw_input
(patrz docs.python.org/3.0/whatsnew/3.0.html#builtins ); jest to problem specyficzny dla wersji 2.x.