2011-02-10 7 views
101

Chcę pobrać ciąg od użytkownika, a następnie go zmanipulować.Python 2.7 uzyskiwanie danych wejściowych od użytkownika i manipulowanie ciągiem bez cytowania

testVar = input("Ask user for something.") 

Czy istnieje sposób na to, aby testVar był ciągiem znaków beze mnie, gdy użytkownik wprowadziłby swoją odpowiedź w cudzysłowie? czyli "Hello" vs. Witam

Jeśli użytkownik wpisze Witam, mam następujący błąd:

NameError: nazwa 'Hello' nie został zdefiniowany

Odpowiedz

188

Korzystając raw_input() zamiast input():

testVar = raw_input("Ask user for something.") 

input() faktycznie ocenia dane wejściowe jako kod Pythona. Proponuję nigdy go nie używać. raw_input() zwraca ciąg dosłowny wprowadzony przez użytkownika.

+77

Chociaż ktokolwiek czyta to za pomocą Python ** 3 **, 'input' działa teraz w ten sposób, a raw_input zniknął. –

+2

W jakiej sytuacji chciałbyś, aby użytkownik wstawił kod Pythona do swojego własnego kodu? – JFA

+0

@JFA: Nie uważam, że 'input()' jest przydatną funkcją i nie polecam jej używania. –

8

Funkcja input oceni także dane, które odczytał po prostu jako kod Pythona, co nie jest tym, czego potrzebujesz.

Ogólne podejście polegałoby na traktowaniu danych wprowadzanych przez użytkownika (od sys.stdin), tak jak w przypadku każdego innego pliku. Spróbuj

import sys 
sys.stdin.readline() 

Jeśli chcesz zachować to krótkie, można użyć raw_input która jest taka sama jak input ale pomija ocenę.

+1

również, jeśli piszesz program interaktywny, rozważ importowanie 'readline' - da to cechy podobne do basha (historia nieoczekiwana, automatyczne uzupełnianie będzie wymagało trochę pracy) –

+0

Dobra robota! Używam tej samej funkcji przez wieki i zawsze działało dobrze. –

2
testVar = raw_input("Ask user for something.") 
-4

Problem wydaje się być rozwiązany w wersji Python 3.4.2.

testVar = input("Ask user for something.") 

Działa dobrze.

+3

Python 3.x 'input' jest odpowiednikiem Python 2.x' raw_input' (zobacz https://docs.python.org/3.0/whatsnew/3.0.html#builtins); jest to problem specyficzny dla 2.x. – jonrsharpe

4

Jeśli chcesz użyć wejście zamiast raw_input w Pythonie 2.x, to trik przyjdzie przydatny Po czym

if hasattr(__builtins__, 'raw_input'): 
     input=raw_input 

,

testVar = input("Ask user for something.") 

będzie działać dobrze.

0

kod Mój Działa z poprawkami:

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!") 
0

To jest moja praca wokół niepowodzenie bezpieczny w przypadku jeśli będzie trzeba przenieść do pytona 3 w przyszłości.

def _input(msg): 
    return raw_input(msg) 
2

możemy użyć raw_inpu() funkcji w Pythonie 2 i input() funkcji w Pythonie 3 Domyślnie funkcja wejścia trwa wejście w formacie strun

innych typ danych masz do oddania użytkownikowi input

W Pythonie 2 używamy funkcji raw_input(). czeka na wpisanie przez użytkownika niektórych danych wejściowych i naciśnięcie klawisza return, a my musimy zapisać wartość w zmiennej przez rzutowanie jako pożądany typ danych.Bądź ostrożny używając TYP Casting

x = raw_input ("Podaj liczbę: ") #String moc wejściowa

x = int (raw_input (" Podaj liczbę:")) #integer wejście

x = pływak (raw_input ("Podaj numer float: ")) #float wejścia

x = eval (raw_input (" Podaj numer float:")) wejście #eval

W Pythonie 3 używamy wejścia (), która zwraca wartość wejściową użytkownika

x = input ("Podaj liczbę: ") #String moc wejściowa

jeśli wpiszesz ciąg znaków, int, float, eval potrwa jako wejście ciąg

x = int (input (" Wprowadź number: ")) #integer input jeśli wpiszesz ciąg znaków dla int cast ValueError: invalid literal dla int() z base 10:

x = float (input (" Wprowadź liczbę zmiennoprzecinkową: ")) # float input jeśli wpiszesz ciąg znaków do rzutowania zmiennoprzecinkowego ValueError: nie można przekonwertować ciągu znaków na wartość float

x = eval (input („Podaj liczbę typu float:”)) wejście #eval jeśli wpiszesz ciąg dla eval NameError Obsada: nazwa «» nie jest zdefiniowana Tych błędów również zastosowanie do pytona 2

Powiązane problemy