2011-02-10 12 views
101

Tôi muốn nhận chuỗi từ người dùng và sau đó điều khiển nó.Python 2.7 nhận đầu vào của người dùng và thao tác dưới dạng chuỗi không có trích dẫn

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

Có cách nào để testVar trở thành chuỗi mà không có người dùng nhập câu trả lời của anh ấy trong dấu ngoặc kép không? tức là "Xin chào" Xin chào vs

Nếu các loại dùng trong Xin chào, tôi nhận được thông báo lỗi sau:

NameError: Tên 'Hello' không được định nghĩa

Trả lời

188

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 do người dùng nhập.

+77

Mặc dù cho bất kỳ ai đọc điều này bằng cách sử dụng Python ** 3 **, 'input' hiện hoạt động theo cách này và raw_input đã biến mất. –

+2

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

+0

@JFA: Tôi không nghĩ 'input()' là một hàm hữu ích, và tôi không khuyên bạn sử dụng nó. –

8

Chức năng input cũng sẽ đánh giá dữ liệu mà nó vừa đọc là mã python, đây không thực sự là điều 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) giống như bất kỳ tệp nào khác. Hãy thử

import sys 
sys.stdin.readline() 

Nếu bạn muốn giữ nó ngắn, bạn có thể sử dụng raw_input mà là giống như input nhưng bỏ qua việc đánh giá.

+1

Ngoài ra, nếu bạn đang viết một chương trình tương tác, hãy xem xét 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ử out-of-the-box, tự động hoàn thành sẽ yêu cầu một số legwork) –

+0

Thực hiện tốt! Tôi đã sử dụng cùng một chức năng cho lứa tuổi và nó đã từng làm việc tốt. –

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

Sự cố dường như được giải quyết trong phiên bản Python 3.4.2.

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

Sẽ hoạt động tốt.

+3

Python 3.x 'input' tương đương với Python 2.x' raw_input' (xem https://docs.python.org/3.0/whatsnew/3.0.html#builtins); đây là vấn đề cụ thể đối với 2.x. – jonrsharpe

4

Nếu bạn muốn sử dụng đầu vào thay vì raw_input trong python 2.x, sau đó lừa này sẽ đến tiện dụng

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

Sau đó,

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

sẽ chỉ làm việc tốt.

0

Mã của tôi làm việc 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 phải chuyển sang python 3 trong tương lai.

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

chúng ta có thể sử dụng raw_inpu() chức năng trong python 2 và đầu vào() chức năng trong python 3 Theo mặc định, chức năng đầu vào có đầu vào như định dạng chuỗi

cho dữ liệu khác gõ bạn phải đúc người sử dụng đầu vào

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

x = raw_input ("Nhập số: ") #String đầu vào

x = int (raw_input (" Nhập số:")) #integer đầu vào

x = float (raw_input ("Nhập số float: ")) #float đầu vào

x = eval (raw_input (" Nhập số float:")) đầu vào #eval

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

x = input ("Nhập số: ") #String đầu vào

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

x = int (input (" Nhập number: ")) #integer nhập nếu bạn nhập chuỗi cho giá trị int cast ValueError: chữ không hợp lệ cho int() với cơ sở 10:

x = float (đầu vào (" Nhập số float: ")) #float nhập nếu bạn nhập chuỗi cho float cast ValueError: không thể chuyển đổi chuỗi thành float

x = eval (input ("Nhập số float:")) #eval input nếu bạn nhập chuỗi cho eval cast NameError: name '' không được xác định Lỗi đó cũng áp dụng cho python 2

Các vấn đề liên quan