我是一个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。请帮助我解决代码中看不见的错误。
谢谢。
答案 0 :(得分: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)
答案 1 :(得分:0)
您的问题是raw_input()
返回一个字符串,而不是一个整数。
因此,您的功能实际上是检查" 10" > " 5",False
,因此它会落入您的if
块并达到else
条款。
要解决此问题,您需要通过将值包装在int()
中来将输入字符串转换为整数。
即。
i = int(raw_input("enter x\n"))
。
答案 2 :(得分: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()获取两个变量,所以如果在中间键入两个带空白空格的数字,基于空格的拆分将在这些x和y中保存两个数字,然后应用map函数接受两个参数,一个int函数和一个序列,它只是一个用split()创建的列表。
>>> x,y = map(int, raw_input().split())
3 2
现在比较x和y,因为x = 3和y = 2,现在因为根据cmp()的文档,如果是xy,它返回负数。
>>> compare(x,y)
1
>>> compare(y,x)
-1
>>> compare(x-1,y)
0
>>>