【问题标题】:Python - Float Division by Zero?Python - 浮点除以零?
【发布时间】:2018-03-04 09:15:54
【问题描述】:

所以我正在为我的班级编写这段代码,但我遇到了一个错误,我不确定它为什么会返回错误。 这是返回此错误的代码部分:

    numValues = int(input("Input number of inputs (between 1 and 15): "))
    newList = []


    def input_nums():
        inputs = float(input("Enter a float value: "))
        newList.append(inputs)
        return newList


    while numValues:
        input_nums()
        numValues -= 1


    def in_order():
        for i in newList:
            print(i)


    def rev_order():
        for j in newList[::-1]:
            print(j)


    def abo_bel_equ():
        avg = sum(newList) / numValues ## This line gives the error ##
        print("The average is: ", avg)
        for x in range(numValues):
            above_avg = below_avg = equal_avg = 0
            if newList[x] > avg:
                above_avg += 1
            if newList[x] < avg:
                below_avg += 1
            if newList[x] == avg:
                equal_avg += 1


    print("The values of the list in order are: ")
    in_order()
    print("The values of the list in reverse order are: ")
    rev_order()
    print(abo_bel_equ())

“numValues”变量应该是用户输入的任何整数,而是返回 0。

为什么这个函数说 numValues 变量应该是用户输入的整数时为零?

【问题讨论】:

  • 为什么不尝试添加if 语句来检查numValues 的值
  • 从这段代码本身来看,除非用户输入“0”,否则应该没有问题。我们能看到更多代码吗?
  • 我测试了这段代码,没有错误。
  • 是的,我只是粘贴我的整个代码,1 秒。 (更新)
  • @LukeH。将numValues = len(newList) 放在abo_bel_equ() 的顶部。

标签: python


【解决方案1】:

正如 Javier Lim 之前所建议的,您可以重写 while 语句以使用临时变量,但您也可以更改

avg = sum(newList) / numValues

成为

avg = sum(newlist) / len(newList)

这样您就不必包含额外的变量。这对我来说似乎是可能的,因为从您的代码中可以看出,newlist 的长度必须始终等于 numValues。

【讨论】:

  • 是的,我完全忽略了这一点,它确实有效。谢谢!顺便说一句,我试图让上面、下面和等于函数的 avg 部分工作,但它似乎不能正常工作。知道我怎样才能做到这一点吗?
  • 嗯,首先范围的参数也设置为numValues,所以也应该改为len(newList)。其次,我建议在这里使用elif-statements。在您当前的代码中,每次都会执行这三个检查,即使该值确实高于平均水平。所以elif 会阻止这种情况。最后,我认为返回这三个值是一个好主意(当然,如果这些比较是函数的目标)。
  • 第二个注意事项,您甚至可以使用布尔值与整数等价的事实(True == 1 和False == 0)。在 python 3 和 python 2.6 中保证等价。所以像a = b &gt; c 这样的陈述是完全有效的。在你的情况下也可以使用a += b &gt; c。
  • 我明白了。好吧,我只是通过像你说的那样更改参数以及我将它们设置为 0 的位置来让它们打印出来。所以我可以让它们保持这样,但我对使用 a+= b > c的意思感到困惑>
  • 在python中,布尔值与整数等价。例如,如果您尝试运行代码print(5 + True),输出将是6,因此如果您想检查列表中的值是否大于平均值,您可以写above_avg += newList[x] &gt; avg。
【解决方案2】:

这是错误。

   while numValues:
        input_nums()
        numValues -= 1

这将从 numValues 中删除 1 直到它为 0,然后突破。 使用

for i in range(numValues):
    input_nums()

或者这个,如果需要一个while循环。

temp = numValues
while temp:
    input_nums()
    temp -= 1

【讨论】:

  • 不过,这是我的作业的一部分,我的老师希望我们使用 while 循环来获取用户的输入。如何重写 while 循环以不将其分解为零?
  • 当然,添加了新的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 2012-03-10
相关资源
最近更新 更多