Python 2.7 nhận đầu vào của người dùng và thao tác dưới dạng chuỗi mà không có trích dẫn


144

Tôi muốn lấy một chuỗi từ người dùng, và sau đó thao tác nó.

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

Có cách nào để testVar trở thành một chuỗi mà không cần tôi yêu cầu người dùng gõ phản hồi của anh ấy trong dấu ngoặc kép không? tức là "Xin chào" so với Xin chào

Nếu người dùng gõ vào Hello, tôi gặp lỗi sau:

TênError: tên 'Xin chào' không được xác định


Xem tài liệu . Kể từ khi python 2.7 inputtự động gọieval()
0x45

Câu trả lời:


261

Sử dụng raw_input()thay vì input():

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

input()thực sự đánh giá đầu vào là mã Python. Tôi đề nghị không bao giờ sử dụng nó. raw_input()trả về chuỗi nguyên văn được nhập bởi người dùng.


107
Mặc dù đối với bất kỳ ai đọc cái này bằng Python 3 , inputgiờ đây hoạt động theo cách này và raw_input đã biến mất.
Thomas K

3
Tình huống nào bạn muốn cho phép người dùng chèn mã python vào mã của riêng bạn?
JFA

1
@JFA: Tôi không nghĩ input()là một chức năng hữu ích và tôi không khuyên bạn nên sử dụng nó.
Sven Marnach

11

Hàm inputnày cũng sẽ đánh giá dữ liệu mà nó vừa đọc là mã python, đây không thực sự là thứ bạn muốn.

Cách tiếp cận chung sẽ là xử lý đầu vào của người dùng (từ sys.stdin) như bất kỳ tệp nào khác. Thử

import sys
sys.stdin.readline()

Nếu bạn muốn giữ cho nó ngắn, bạn có thể sử dụng raw_inputgiống như inputnhưng bỏ qua đánh giá.


2
đồng thời, nếu bạn đang viết một chương trình tương tác, hãy cân nhắc nhập readline- điều này sẽ cung cấp các tính năng tương tự như bash (lịch sử ngoài luồng, tự động hoàn thành sẽ yêu cầu một số công việc cần thiết)
Foo Bah

Làm tốt! Tôi đã sử dụng chức năng tương tự cho các lứa tuổi và nó đã từng hoạt động tốt.
CFV

11

Chúng ta có thể sử dụng raw_input()hàm trong Python 2 và input()hàm trong Python 3. Theo mặc định, hàm đầu vào có một đầu vào ở định dạng chuỗi. Đối với loại dữ liệu khác, bạn phải bỏ đầu vào của người dùng.

Trong Python 2 chúng ta sử dụng raw_input()hàm. Nó chờ người dùng nhập một số đầu vào và nhấn returnvà chúng ta cần lưu trữ giá trị trong một biến bằng cách chuyển thành kiểu dữ liệu mong muốn của chúng ta. Cẩn thận khi sử dụng kiểu đúc

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

Trong Python 3, chúng tôi sử dụng hàm input () trả về giá trị đầu vào của người dùng.

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

Nếu bạn nhập một chuỗi, int, float, eval, nó sẽ lấy làm đầu vào chuỗi

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

Nếu bạn nhập một chuỗi cho int cast ValueError: invalid literal for int() with base 10:

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

Nếu bạn nhập một chuỗi cho float float ValueError: could not convert string to float

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

Nếu bạn nhập một chuỗi để truyền eval NameError: name ' ' is not defined Những lỗi đó cũng có thể áp dụng cho Python 2.


5

Nếu bạn muốn sử dụng đầu vào thay vì raw_input trong python 2.x, thì thủ thuật này sẽ có ích

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

Sau đó,

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

sẽ làm việc tốt



0

Mã làm việc của tôi với các bản sửa lỗi:

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

Đây là công việc của tôi xung quanh để không an toàn trong trường hợp nếu tôi sẽ cần chuyển sang python 3 trong tương lai.

def _input(msg):
  return raw_input(msg)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.