【问题标题】:incorrect output while calling function调用函数时输出不正确
【发布时间】:2017-10-24 10:32:44
【问题描述】:

我是个菜鸟,正在学习编码,但在用 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。请帮助我解决我的代码中看不见的错误。

谢谢。

【问题讨论】:

    标签: python function output


    【解决方案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)
    

    【讨论】:

    • 现在我明白 raw_input 如果我的代码如下返回字符串值:def compare(x,y): if x>y: return 1 elif y>x: return -1 else: return 0 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 而不是 0
    • 你也可以比较字母表,它们是根据它们的 ascii 值排序的,你可以通过输入 'b' < 'a' 来检查 repl,这应该给你 False,'a' < 'b' 会给你 True。这就是为什么你没有得到 0
    【解决方案2】:

    您的问题是 raw_input() 返回一个字符串,而不是整数。

    因此,您的函数实际上正在检查“10”>“5”,即False,因此它会通过您的if 块并到达else 子句。

    要解决此问题,您需要将输入字符串转换为整数,方法是将值包装在 int() 中。

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

    【讨论】:

    • 实际上在 Python 中没有像“铸造”这样的东西。 “转换”(在“类型转换”中)意味着“将相同的变量解释为另一种类型”,这在 Python 中是不可能的。 int(somestr) 所做的是从 somestr 的数值实例化一个新的 int 对象,因此正确的术语是“转换”,而不是“转换”。
    【解决方案3】:

    使用内置 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
    >>> 
    

    【讨论】:

    • 请不要将屏幕截图作为答案发布 - 并且发布没有解释的代码并不是一个好的答案。
    • @bruno desthuilliers:用详细描述更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多