2017-10-24 5 views
0

저는 코드 작성을 배우는 noobie이고 Python으로 코드를 연습하면서 잘못된 출력을 발견했습니다. 제발 도와주세요. 코드에서 문제를 찾기 위해 최선을 다했지만 찾지 못했습니다.함수를 호출하는 동안 잘못된 출력

번호 :

def compare(x,y): 
    if x>y: 
     return 1 
    elif x==y: 
     return 0 
    else: 
     return -1 

i=raw_input("enter x\n") 
j=raw_input("enter y\n") 

print compare(i,j) 

출력 :

-> python python.py 
enter x 
10 
enter y 
5 
-1 

난 수신해야만 출력이 1이 수신하지만, 출력이 -1. 내 코드에서 보이지 않는 오류로 나를 도와주세요.

감사합니다.

답변

1

raw_input은 항상 문자열을 반환합니다.

그래서 입력 값을 숫자로 변환해야합니다.

i=raw_input("enter x\n") 
j=raw_input("enter y\n") 
print compare(i,j) 

i=int(raw_input("enter x\n")) 
j=int(raw_input("enter y\n")) 
print compare(i,j) 
+0

내가 문자열 값을 반환 raw_input을 그 이해 경우 X> Y : 복귀 한 ELIF의 Y> X : 반환 -1 다른 : 복귀 0 I = raw_input을 ("X \ 없음 입력") J = raw_input을 ("Y \ 없음 입력") 잉크 (I, J)'그때받을 출력은 비교 : '- > 파이썬 python.py x 입력 -1' 출력이 0이 아닌 -1이 0 – balakumaran

+1

인데 알파벳도 비교할 수 있습니다. ascii 값에 따라 정렬됩니다. 'b'< 'a'를 입력하여 repl을 체크인 할 수 있습니다. 당신에게 거짓을주고''a '<'b''는 당신에게 진실을 줄 것입니다. 그래서 0을 얻지 못했습니다. – Anbarasan

0

문제가 raw_input() 문자열이 아닌 정수를 반환한다는 것입니다해야한다.

그러므로 실제로 함수가 수행하는 작업은 "10"> "5"인 것입니다 (False). 따라서 if 블록을 통과하여 else 절에 도달합니다.

이 문제를 해결하려면 int()에 값을 래핑하여 입력 문자열을 정수로 변환해야합니다.

i = int(raw_input("enter x\n")).

+0

실제로 파이썬에서는 "캐스팅"과 같은 것이 없습니다. "casting"("casting")은 "같은 변수를 다른 타입으로 해석하는 것"을 의미합니다. 이것은 Python에서는 불가능합니다. 'int (somestr) '가하는 일은'somestr'의 수치 값으로부터 새로운'int' 객체를 instancating하는 것이므로 올바른 용어는 "casting"이 아니라 "converting"일 것입니다. –

0

내장 된 cmp 내장 기능을 사용하십시오.

>>> help(cmp) 
Help on built-in function cmp in module __builtin__: 

cmp(...) 
    cmp(x, y) -> integer 

    Return negative if x<y, zero if x==y, positive if x>y. 

따라서 함수는 다음과 같습니다. 다음

>>> def compare(x,y): 
... return cmp(x,y) 
... 
>>> 

그런 다음 문자열을 반환하는) (raw_input을 사용하여 두 개의 변수를 얻을, 그래서 당신은 중간에 blankspace 두 개의 번호를 입력하는 경우, 분할이 x와 y의 두 숫자를 저장합니다 빈 공간을 기반으로하고, 하나의 int 함수와 split()에서 생성 된리스트 이외의 시퀀스 인 두 개의 매개 변수를 취하는 map 함수를 적용합니다.

>>> x,y = map(int, raw_input().split()) 
3 2 

이제, x 및 y를 비교하면, X = 3, Y = 2 이후 지금부터 CMP()의 설명서에 따라,이 XY 음수 리턴.`데프 (x, y)의 비교 : 다음과 같이 내 코드 인 경우 지금

>>> compare(x,y) 
1 
>>> compare(y,x) 
-1 
>>> compare(x-1,y) 
0 
>>> 
+0

화면 캡처를 답변으로 게시하지 마십시오. 설명이없는 게시 코드는 좋은 답변이 아닙니다. –

+0

@ bruno desthuilliers : 내 대답을 세부 설명으로 업데이트했습니다. – kvivek