Python 2.7 ottiene l'input dell'utente e manipola come stringa senza virgolette


144

Voglio ottenere una stringa da un utente e quindi manipolarla.

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

Esiste un modo per testVar di essere una stringa senza che l'utente abbia scritto la sua risposta tra virgolette? cioè "Hello" vs. Hello

Se l'utente digita Hello, viene visualizzato il seguente errore:

NameError: il nome 'Hello' non è definito


Vedere la documentazione . A partire da Python 2.7 inputchiama automaticamenteeval()
0x45 l'

Risposte:


261

Usa raw_input()invece di input():

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

input()valuta effettivamente l'input come codice Python. Suggerisco di non usarlo mai. raw_input()restituisce la stringa testuale immessa dall'utente.


107
Sebbene per chiunque legga questo usando Python 3 , inputora funziona in questo modo e raw_input è sparito.
Thomas K,

3
Quale situazione vorresti consentire all'utente di inserire il codice Python nel tuo codice?
JFA,

1
@JFA: Non credo input()sia una funzione utile e non consiglio di usarla.
Sven Marnach,

11

La funzione inputvaluterà anche i dati appena letti come codice Python, che non è proprio quello che vuoi.

L'approccio generico sarebbe quello di trattare l'input dell'utente (da sys.stdin) come qualsiasi altro file. Provare

import sys
sys.stdin.readline()

Se si desidera mantenerlo breve, è possibile utilizzare raw_inputlo stesso inputma omettere la valutazione.


2
inoltre, se stai scrivendo un programma interattivo, prendi in considerazione l'importazione readline: questo fornirà funzionalità simili a bash (la storia è pronta all'uso, il completamento automatico richiederà un po 'di legwork)
Foo Bah,

Molto bene! Ho usato la stessa funzione per anni e ha sempre funzionato bene.
CFV

11

Possiamo usare la raw_input()funzione in Python 2 e la input()funzione in Python 3. Per impostazione predefinita, la funzione di input accetta un input in formato stringa. Per altri tipi di dati devi trasmettere l'input dell'utente.

In Python 2 usiamo la raw_input()funzione. Attende che l'utente digiti alcuni input e prema returne dobbiamo archiviare il valore in una variabile eseguendo il casting come tipo di dati desiderato. Fai attenzione quando usi il tipo 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 utilizziamo la funzione input () che restituisce un valore di input dell'utente.

x = input("Enter a number: ") #String input

Se inserisci una stringa, int, float, eval ci vorrà come input di stringa

x = int(input("Enter a number: ")) #integer input

Se inserisci una stringa per int cast ValueError: invalid literal for int() with base 10:

x = float(input("Enter a float number: ")) #float input

Se si immette una stringa per il cast float ValueError: could not convert string to float

x = eval(input("Enter a float number: ")) #eval input

Se inserisci una stringa per eval cast NameError: name ' ' is not defined Quegli errori si applicano anche a Python 2.


5

Se vuoi usare input invece di raw_input in python 2.x, questo trucco ti sarà utile

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

Dopo il quale,

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

funzionerà bene.



0

Il mio codice di lavoro con correzioni:

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

Questo è il mio lavoro per non riuscire nel caso in cui dovrò passare a Python 3 in futuro.

def _input(msg):
  return raw_input(msg)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.