Python 2.7 mendapatkan input pengguna dan memanipulasi sebagai string tanpa kutipan

144

Saya ingin mendapatkan string dari pengguna, dan kemudian memanipulasinya.

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

Apakah ada cara agar testVar menjadi string tanpa saya meminta pengguna mengetikkan jawabannya dalam tanda kutip? yaitu "Halo" vs. Halo

Jika pengguna mengetikkan Hello, saya mendapatkan kesalahan berikut:

NameError: name 'Hello' tidak didefinisikan

Mike Lee
sumber
Lihat dokumentasi . Pada python 2.7 inputsecara otomatis panggilaneval()
0x45

Jawaban:

261

Gunakan raw_input()alih-alih input():

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

input()sebenarnya mengevaluasi input sebagai kode Python. Saya sarankan untuk tidak pernah menggunakannya. raw_input()mengembalikan string kata demi kata yang dimasukkan oleh pengguna.

Sven Marnach
sumber
107
Meskipun bagi siapa pun yang membaca ini menggunakan Python 3 , inputsekarang berfungsi seperti ini, dan raw_input hilang.
Thomas K
3
Situasi apa yang ingin Anda biarkan pengguna memasukkan kode python ke kode Anda sendiri?
JFA
1
@ JFA: Saya pikir input()ini bukan fungsi yang berguna, dan saya tidak merekomendasikan menggunakannya.
Sven Marnach
11

Fungsi inputini juga akan mengevaluasi data yang baru saja dibaca sebagai kode python, yang sebenarnya bukan yang Anda inginkan.

Pendekatan generik adalah untuk memperlakukan input pengguna (dari sys.stdin ) seperti file lainnya. Mencoba

import sys
sys.stdin.readline()

Jika Anda ingin tetap singkat, Anda dapat menggunakan raw_inputyang sama inputtetapi menghilangkan evaluasi.

membuang
sumber
2
juga, jika Anda menulis program interaktif, pertimbangkan untuk mengimpor readline- ini akan memberikan fitur yang mirip dengan bash (sejarah out-of-the-box, penyelesaian otomatis akan memerlukan beberapa kerja keras)
Foo Bah
Sudah selesai dilakukan dengan baik! Saya telah menggunakan fungsi yang sama selama berabad-abad dan itu pernah bekerja dengan baik.
CFV
11

Kita dapat menggunakan raw_input()fungsi dalam Python 2 dan input()fungsi dalam Python 3. Secara default fungsi input mengambil input dalam format string. Untuk tipe data lain, Anda harus memberikan input pengguna.

Dalam Python 2 kita menggunakan raw_input()fungsi. Itu menunggu pengguna untuk mengetik beberapa input dan tekan returndan kita perlu menyimpan nilai dalam variabel dengan casting sebagai tipe data keinginan kita. Hati-hati saat menggunakan tipe 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

Dalam Python 3 kita menggunakan fungsi input () yang mengembalikan nilai input pengguna.

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

Jika Anda memasukkan string, int, float, eval akan diambil sebagai input string

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

Jika Anda memasukkan string untuk pemain int ValueError: invalid literal for int() with base 10:

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

Jika Anda memasukkan string untuk float cast ValueError: could not convert string to float

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

Jika Anda memasukkan string untuk eval cast, NameError: name ' ' is not defined kesalahan tersebut juga berlaku untuk Python 2.

Projesh Bhoumik
sumber
5

Jika Anda ingin menggunakan input alih-alih raw_input dalam python 2.x, maka trik ini akan berguna

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

Setelah itu,

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

akan bekerja dengan baik.

Prav001
sumber
2
testVar = raw_input("Ask user for something.")
Artur Gaspar
sumber
0

Kode Kerja saya dengan perbaikan:

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

Ini adalah pekerjaan saya untuk gagal aman jika saya perlu pindah ke python 3 di masa depan.

def _input(msg):
  return raw_input(msg)
Mak
sumber
-6

Masalah ini tampaknya diatasi dalam Python versi 3.4.2.

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

Akan bekerja dengan baik.

Sanjay Ursal
sumber
3
Python 3.x inputsetara dengan Python 2.x raw_input(lihat docs.python.org/3.0/whatsnew/3.0.html#builtins ); ini adalah masalah khusus untuk 2.x.
jonrsharpe