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


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.


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.


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.


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.



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

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)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.