【问题标题】:Python error while finding greatest number查找最大数字时出现 Python 错误
【发布时间】:2019-05-30 16:47:15
【问题描述】:

我正在尝试寻找 3 个数字中最大的技术问题。问题如下

你只需要从标准输入中获取三个数字作为输入,你需要 找到其中最伟大的。

输入格式

您将分别从每行的标准输入中获取三个数字作为输入。

约束

-100000

输出格式

您需要将三个数字中最大的一个打印到标准输出。

示例测试用例 1

输入

902
100
666

我做到了

''' Read input from STDIN. Print your output to STDOUT '''
#Use input() to read input from STDIN and use print to write your output to STDOUT
import sys
def main():

    s=sys.stdin.read()
    s=s.split("\n")
    a=int(s[0])
    b=int(s[1])
    c=int(s[2])
    temp=0
    e=[a,b,c]
    for i in e:
        if i > temp:
            temp=i
    print(temp)

    '''if (a>b) and (a>c):
        temp = a
    elif (b>a) and (b>c):
        temp = b
    else:
        temp = c
    print(temp)'''


main()

它有预定义的输入 902、100、666。我的代码显示 902 输出,预期也显示 902,但显示失败,为什么?在上面的代码中,注释或未注释的东西都显示失败。

【问题讨论】:

  • 如果三个数分别为-1、-2、-3会怎样?

标签: python python-3.x


【解决方案1】:

我可能错了,但输出显示使用标准输出打印:您需要将三个数字中最大的一个打印到标准输出。 python 中的打印与 sys.stdout.write(str(99) + '\n') 相同。尝试使用 stdout 打印结果。

sys.stdout.write(str(temp))

【讨论】:

  • print 默认打印到 sys.stdout 如果没有指定文件:docs.python.org/3/library/functions.html#print 这里唯一的区别是我不相信这会插入换行符,但可以使用print 通过传递 end 参数。
  • 你的答案或 Carcigenicate 的答案,即 'print(temp, end = " ");两者都有效,谢谢。
【解决方案2】:

temp 被初始化为 0,但输入允许负数。 0 将被认为大于任何负输入。这意味着您的算法对于具有负输入的测试用例将失败。

temp初始化为小于允许输入的最小值:

temp = -100001 # One less than the minimum

【讨论】:

  • 一般情况下的致癌物,但这里所有输入都是肯定的,那么为什么代码失败了?
  • @briangrey 你的算法看起来不错。我认为除了您提到的情况之外,它都失败了。它可能隐藏了失败的测试用例。进行更改并重试。
  • 致癌所以我取了 temp -1000001 但它也失败了,那么应该是什么 temp 或任何其他错误?
  • Carcigenicate 我取了一个临时值,即第一个值,那么它不应该给出错误,但它也会给出错误
  • @briangrey 最好的说法是他们的验证被破坏(并非闻所未闻),或者有一个小众的角落案例失败了。说明的链接是什么?我仍然认为,一旦您进行了我推荐的更改,您的代码看起来就很好;至少按照您在此处列出的规格来说还不错。
【解决方案3】:

实际上,他们正在寻找所提到的输出,虽然您的代码逻辑是正确的,但输出会给出一个新行,这将被认为是错误的。为了解决这个问题,我们在 print 语句中使用 (end = "") 所以正确的代码变成了

希望它有所帮助,继续编码。

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 2014-12-12
    • 2018-08-04
    • 2014-03-15
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多