입력을 숫자로 읽으려면 어떻게해야합니까?


261

xy대신의 int의 문자열은 아래의 코드에서?

(참고 : Python 2.x use raw_input(). Python 3.x use input(). raw_input()는 Python 3.x 로 이름이 바뀌 었습니다 . input())

play = True

while play:

    x = input("Enter a number: ")
    y = input("Enter a number: ")

    print(x + y)
    print(x - y)
    print(x * y)
    print(x / y)
    print(x % y)

    if input("Play again? ") == "no":
        play = False

답변:


313

TLDR

  • 파이썬 3은 input함수로 받은 데이터를 평가하지 않지만 파이썬 2의 input함수는 평가합니다 (다음 섹션을 읽고 의미를 이해하십시오).
  • Python 2와 Python 3의 기능 input이 동일 raw_input합니다.

파이썬 2.x

사용자 입력을 얻는 두 가지 기능이 input있으며 및 이라고 raw_input합니다. 차이점 raw_input은 데이터를 평가하지 않고 그대로 문자열 형식으로 반환한다는 것입니다. 그러나 input입력 한 내용을 평가하고 평가 결과가 반환됩니다. 예를 들어

>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

데이터 5 + 17가 평가되고 결과는 22입니다. 표현식을 평가할 때 5 + 17두 개의 숫자를 더하고 있음을 감지하므로 결과도 같은 int유형이됩니다. 따라서 유형 변환은 무료로 수행 22되며 결과 inputdata변수에 저장됩니다 . 당신은 전화 로 구성된 input것으로 생각할 수 있습니다 .raw_inputeval

>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

참고 :input Python 2.x에서 사용할 때는주의해야합니다 . 나는 이 답변 에서 그것을 사용할 때 조심 해야하는 이유를 설명했다 .

그러나 raw_input입력을 평가하지 않고 그대로 문자열로 반환합니다.

>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <type 'str'>)

파이썬 3.x

Python 3.x input와 Python 2.x raw_input는 비슷하며 raw_inputPython 3.x에서 사용할 수 없습니다.

>>> import sys
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <class 'str'>)

해결책

파이썬 3.x는 데이터 유형을 평가하고 변환하지 않으므로 질문에 대답하려면 다음과 같이 명시 적으로 ints 로 변환해야 int합니다.

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

다음과 같이 int함수를 사용하여 모든 염기의 수를 수용하고 10을 밑으로 직접 변환 할 수 있습니다.

>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365

두 번째 매개 변수는 입력 된 숫자의 밑이 무엇인지를 알려주고 내부적으로 이해하고 변환합니다. 입력 한 데이터가 틀리면을 던집니다 ValueError.

>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '1234'

소수 구성 요소를 가질 수있는 값의 경우 유형은 다음 float이 아닙니다 int.

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

그 외에도 프로그램을 다음과 같이 약간 변경할 수 있습니다.

while True:
    ...
    ...
    if input("Play again? ") == "no":
        break

당신은 제거 할 수 play사용하여 변수 breakwhile True.


우리가 int로 명시 적으로 변환하는 것 이외의 3.x에서 int로 변환 할 필요가 없도록 함수 나 다른 것과 같은 다른 방법이 있습니까?
Shreyan Mehta

@ShreyanMehta eval는 효과가 있지만 긴급한 이유가 없다면 그렇게하지 마십시오.
thefourtheye

2
@thefourtheye는 적어도 그것을 ast.literal_eval위해 사용하십시오 . 의 보안 문제는 없습니다 eval.
Spectras

4
나는이 Q & A를 속임수 대상으로 사용하지만 파이썬 3 솔루션으로 TDLR을 추가 할 수 있습니다 int(input(). 파이썬 2의 수명이 다가오고 있으며 파이썬 3 정보가 너무 많이 묻혀 있습니다.
Chris_Rands

변수로 재생을 제거하는 마지막 비트는 변수 재생이 코드를 이해하기 쉽기 때문에 그리 편리하지 않습니다. 이유없이 코드가 어떻게 변경 될 수 있는지 제안하는 것은 좋은 습관이 아닙니다. 그렇지 않으면, 그것은 좋은 답변입니다 :)
OuuGiii

44

Python 3.x에서 raw_input이름이 바뀌고 inputPython 2.x input가 제거되었습니다.

처럼,이 수단 raw_input, input파이썬 3.x를 항상 String 오브젝트를 돌려줍니다.

문제를 해결하려면 입력을 다음과 같이 입력하여 정수로 명시 적으로 만들어야합니다 int.

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

27

한 줄에 여러 정수 map가 있으면 더 좋습니다.

arr = map(int, raw_input().split())

숫자가 이미 알려진 경우 (예 : 2 개의 정수)

num1, num2 = map(int, raw_input().split())

16

input()(Python 3) 및 raw_input()(Python 2)는 항상 문자열을 반환합니다. 을 사용하여 결과를 정수로 명시 적으로 변환하십시오 int().

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

11

여러 질문에는 한 줄에 여러 정수를 입력해야합니다. 가장 좋은 방법은 전체 문자열을 한 줄에 입력 한 다음 정수로 나누는 것입니다. 다음은 Python 3 버전입니다.

a = []
p = input()
p = p.split()      
for i in p:
    a.append(int(i))

또한 목록 이해가 사용될 수 있습니다

p = input().split("whatever the seperator is")

그리고 모든 입력을 string에서 int로 변환하려면 다음을 수행하십시오.

x = [int(i) for i in p]
print(x, end=' ')

리스트 요소들을 직선으로 인쇄해야한다.


6

정수로 변환 :

my_number = int(input("enter the number"))

부동 소수점 숫자와 유사하게 :

my_decimalnumber = float(input("enter the number"))

4
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

for 루프는 'n'번 실행됩니다. 두 번째 'n'은 배열의 길이입니다. 마지막 명령문은 정수를 목록에 맵핑하고 공백으로 구분 된 형식으로 입력을받습니다. for 루프의 끝에서 배열을 반환 할 수도 있습니다.


3

공백으로 구분 된 두 정수를 한 줄에서 읽어야 하는 CodeChef 에서 문제를 해결하는 동안 정수 입력에 문제가 발생했습니다 .

int(input())단일 정수로는 충분 하지만 두 정수를 직접 입력하는 방법을 찾지 못했습니다. 나는 이것을 시도했다 :

num = input()
num1 = 0
num2 = 0

for i in range(len(num)):
    if num[i] == ' ':
        break

num1 = int(num[:i])
num2 = int(num[i+1:])

이제 num1과 num2를 정수로 사용합니다. 도움이 되었기를 바랍니다.


이것은 매우 흥미로운 것 같습니다. 그러나 루프가 종료 i될 때 파괴 되지 for않습니까?

@hosch250루프가 종료되면 색인 변수 (여기서 i) 의 값이 유지됩니다. 이 조각을 사용해 보았는데 제대로 작동합니다.
Aravind

1
이러한 종류의 입력 조작의 경우, num1, num2 = map(int, input().split())발생하는 정수의 양을 알고 있거나 nums = list(map(int, input().split()))그렇지 않은 경우에 사용할 수 있습니다.
301_Moved_Permanently

3
def dbz():
    try:
        r = raw_input("Enter number:")
        if r.isdigit():
            i = int(raw_input("Enter divident:"))
            d = int(r)/i
            print "O/p is -:",d
        else:
            print "Not a number"
    except Exception ,e:
        print "Program halted incorrect data entered",type(e)
dbz()

Or 

num = input("Enter Number:")#"input" will accept only numbers

2

귀하의 예제에서,하지만 int(input(...))어떤 경우에 트릭을 수행, python-future의는 builtins.input그 수 있기 때문에 가치가 고려 사항은 모두 파이썬 2와 3에 대한 확인 코드 작품 의 비활성화 Python2의 기본 동작 input입력 데이터 유형에 대해 "영리"가 되려고 노력 ( builtins.input기본적으로 단지를 )처럼 동작합니다 raw_input.

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