Python “我的程序不断出错”;除零“;

Python “我的程序不断出错”;除零“;,python,if-statement,while-loop,eval,Python,If Statement,While Loop,Eval,该程序设计用于计算未指定数量的整数, 确定读取了多少负值和正值, 并计算输入值的平均值和总和 如果用户输入0,程序将结束。每次输入0时,都会出现一个错误,说明“被零除”。调试器说它来自最后一行 我想它必须与sum/count部分有关。当我使用负数时,它说的是相同的事情,来自同一行代码。最后,我不确定如何显示文本“您没有输入任何数字”。我试着做if-else语句,但我认为我做得不对 data = eval(input("Enter an integer, the input ends if it

该程序设计用于计算未指定数量的整数, 确定读取了多少负值和正值, 并计算输入值的平均值和总和

如果用户输入0,程序将结束。每次输入0时,都会出现一个错误,说明“被零除”。调试器说它来自最后一行

我想它必须与
sum/count
部分有关。当我使用负数时,它说的是相同的事情,来自同一行代码。最后,我不确定如何显示文本“您没有输入任何数字”。我试着做if-else语句,但我认为我做得不对

data = eval(input("Enter an integer, the input ends if it is 0: "))
count = 0
sum = 0
negCount = 0
if data != 0:             
    while data > 0:     
        count = count + 1
        sum = sum + data 
        data = eval(input("Enter an integer, the input ends if it is 0: "))       
        while data < 0:
            negCount = count + 1
            sum = sum + data
            data = eval(input("Enter an integer, the input ends if it is 0: "))
            while data != 0:
                sum = sum + data              
                data = eval(input("Enter an integer, the input ends if it is 0: "))
                break
            else:   
                print("You didn't enter any number")                       



print("The number of positives is", count)
print("The number of negatives is", negCount)
print("The total is", sum)
print("The average is", sum / count)
data=eval(输入(“输入一个整数,如果为0,则输入结束:”)
计数=0
总和=0
负计数=0
如果是数据!=0:             
当数据>0时:
计数=计数+1
总和=总和+数据
data=eval(输入(“输入一个整数,如果为0,则输入结束:”)
当数据<0时:
负计数=计数+1
总和=总和+数据
data=eval(输入(“输入一个整数,如果为0,则输入结束:”)
而数据!=0:
总和=总和+数据
data=eval(输入(“输入一个整数,如果为0,则输入结束:”)
打破
其他:
打印(“您没有输入任何数字”)
打印(“正片数为”,计数)
打印(“负片数为”,负数)
打印(“总数为”,总和)
打印(“平均值为”,总和/计数)

如果输入0,则跳过
If
块(
If data!=0
)。如果跳过
If
块,
count
为0。如果
count
为0,
sum/count
在数学上未定义,并且会产生一个
zerodivision错误

你不允许被零除…@JoranBeasley有没有办法让我不除法就得到所有数字的平均值?为什么你要使用
eval
这是一个坏习惯,我看不出你的代码有什么必要,而你的循环看起来也很糟糕,我想。。。我会扔掉这个然后重新开始。。。使用函数。。。打印大量的调试信息我想你可能想让你的whiles缩进相同,而不是像cricket_007修复的那样,它不是未定义的。。。它被定义为一个除以零的错误。。。数学答案是未定义的,但是(好答案+1)您不需要else子句。一个小的性能改进是在临时变量中保存正数和和的长度。然后
length\u negatives=len(输出)-length\u正数-1
(额外的1表示0)。然后在合计和平均值计算中使用存储的总和变量。这避免了三次不必要的完整列表迭代。@cricket_007遗憾的是,我并不完全理解这些。如果可以,你能告诉我创建这个程序的正确编码吗?@cricket\u 007it@cricket_007非常感谢你。这很有帮助。这是有道理的!
output = []
while True:
    data = int(input("Enter an integer, the input ends if it is 0: "))
    if data == 0:
        break
    output.append(data)

positives = len([i for i in output if i > 0])
negatives = len(output) - positives
total = sum(output)

if len(output) != 0:
    print("The number of positives is", positives)
    print("The number of negatives is", negatives)
    print("The total is", total)
    print("The average is", total / len(output))
else:
    print("You didn't enter any number")