파이썬 2.7 사용자 입력을 받고 인용없이 문자열로 조작


144

사용자로부터 문자열을 가져 와서 조작하고 싶습니다.

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

사용자가 따옴표로 응답을 입력하지 않고도 testVar가 문자열이되는 방법이 있습니까? 즉 "Hello"vs. Hello

사용자가 Hello를 입력하면 다음 오류가 발생합니다.

NameError : 이름 'Hello'가 정의되지 않았습니다


설명서를 참조하십시오 . python 2.7부터 input자동 호출eval()
0x45

답변:


261

raw_input()대신에 사용하십시오 input():

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

input()실제로 입력을 파이썬 코드로 평가합니다. 절대 사용하지 않는 것이 좋습니다. raw_input()사용자가 입력 한 그대로의 문자열을 반환합니다.


107
이 사용하는 파이썬 읽는 사람에게 있지만 3 , input지금은 사라 raw_input을이 방식으로 작동합니다.
Thomas K

3
어떤 상황에서 사용자가 파이썬 코드를 자신의 코드에 삽입하도록 하시겠습니까?
JFA

1
@ JFA : input()유용한 기능 이라고 생각 하지 않으며 사용하지 않는 것이 좋습니다.
Sven Marnach

11

이 함수 input는 방금 파이썬 코드로 읽은 데이터를 평가하므로 실제로 원하는 것은 아닙니다.

일반적인 접근 방식은 사용자 입력 (from sys.stdin)을 다른 파일과 같이 처리하는 것 입니다. 시험

import sys
sys.stdin.readline()

짧게 유지 하려면 평가 raw_input와 동일 input하지만 생략하는 것을 사용할 수 있습니다 .


2
또한 대화식 프로그램을 작성하는 경우 가져 오기를 고려하십시오. readline이는 bash와 유사한 기능을 제공합니다 (역사적으로 사용 가능하며 자동 완성에는 약간의 노력이 필요합니다)
Foo Bah

잘 했어! 나는 같은 기능을 오랫동안 사용해 왔으며 지금까지 잘 작동했습니다.
CFV

11

raw_input()Python 2의 input()함수와 Python 3 의 함수를 사용할 수 있습니다. 기본적으로 입력 함수는 문자열 형식의 입력을받습니다. 다른 데이터 유형의 경우 사용자 입력을 캐스트해야합니다.

파이썬 2에서는 raw_input()함수를 사용합니다 . 사용자가 입력을 누르고 기다릴 때까지 기다렸다가 return원하는 데이터 형식으로 캐스팅하여 값을 변수에 저장해야합니다. 타입 캐스팅을 사용할 때주의하십시오

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

파이썬 3에서는 사용자 입력 값을 반환하는 input () 함수를 사용합니다.

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

문자열, int, float, eval을 입력하면 문자열 입력으로 사용됩니다

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

int cast에 문자열을 입력하면 ValueError: invalid literal for int() with base 10:

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

플로트 캐스트 용 문자열을 입력하면 ValueError: could not convert string to float

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

eval cast에 문자열을 입력하면 NameError: name ' ' is not defined 해당 오류는 Python 2에도 적용됩니다.


5

파이썬 2.x에서 raw_input 대신 입력을 사용하려면이 트릭이 유용합니다.

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

그 후

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

잘 작동합니다.



0

수정 사항이있는 내 작업 코드 :

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

나중에 파이썬 3으로 옮겨야 할 경우를 대비하여 안전하지 못한 문제가 해결되었습니다.

def _input(msg):
  return raw_input(msg)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.