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

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

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

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

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

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



답변

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

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

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


답변

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

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

import sys
sys.stdin.readline()

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


답변

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에도 적용됩니다.


답변

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

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

그 후

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

잘 작동합니다.


답변

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


답변

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

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


답변

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

def _input(msg):
  return raw_input(msg)