调用函数时输出错误

时间:2017-10-24 10:32:45

标签: python function output

我是一个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。请帮助我解决代码中看不见的错误。

谢谢。

3 个答案:

答案 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
>>>