Python: 编写一个程序,计算正数和负数并计算数字的平均值

Python: Write a program that counts positive and negative numbers and computers the average of numbers

我看到了一个类似的 post,但它包含了我的没有的功能。

Objective:编写一个程序,读取一个不特定数量的整数,判断读取了多少个正负值,计算总和和平均值输入值(不包括 0),而程序将在 0 处停止。

我遇到的问题:使用以下测试值时 1、 2、 -1, 3

我得到以下信息:

正数:1
底片个数:2
使用号码总数:3
平均值是 1.33 即 4 / 3

应该是: 正数:1
底片个数:3
使用号码总数:4
平均值是 1.25 即 5 / 4

我的尝试如下:

positive_number = 0                    
negative_number = 0                      
average = 0                        
count = 0                          
new_number = 0                     


user_input = eval(input("Enter enter as many integers as you want, 0     will halt: "))
if user_input == 0:
    print("You didn't enter any number, code ended")
else:
  while user_input != 0:
    user_input = eval(input("Enter enter as many intergers as you want, 0 will halt: "))

    if user_input == 0:
        print("You didn't enter any number, code ended")

    elif user_input != 0 and user_input > 0:
        new_number += user_input
        positive_number += 1
        count += 1

    else:
        user_input != 0 and user_input < 0
        new_number += user_input
        negative_number += 1
        count += 1


    average = (new_number / count)
    print("\nThe number of positives:",  positive_number)
    print("The number of negatives:", negative_number)
    print("The total amount of numbers used:", count)
    print("The average is", format(average,".2f"), "which is", str(new_number), "/", str(count))

是什么导致了这样的错误?我只能假设这是一个小修复?

首先,当您测试 user_input != 0 作为循环条件时,第一个 if 语句是多余的。其次,它出错的原因是因为在你第一次输入时你立即覆盖了 user_input 的值,所以我把重新提示代码放在循环的末尾。最后,我清理了 if elif else 语句,因为它用更少的字符实现了完全相同的效果。一旦我们退出循环,结束行的 print 语句也会执行 - 因为根据定义,这意味着 user_input == 0

positive_number = 0                    
negative_number = 0                      
average = 0                        
count = 0                          
new_number = 0                     

user_input = eval(input("Enter enter as many integers as you want, 0     will halt: "))
while user_input != 0:
    if user_input > 0:
        new_number += user_input
        positive_number += 1
        count += 1

    else:
        new_number += user_input
        negative_number += 1
        count += 1


    average = (new_number / count)
    print("\nThe number of positives:",  positive_number)
    print("The number of negatives:", negative_number)
    print("The total amount of numbers used:", count)
    print("The average is", format(average,".2f"), "which is", str(new_number), "/", str(count))
    user_input = eval(input("Enter enter as many intergers as you want, 0 will halt: "))

print("You didn't enter any number, code ended")

我已经修复了您的代码中的问题并进行了重构以捕获错误情况并消除了不必要的并发症:

positive_number = 0
negative_number = 0
average = 0
count = 0
total = 0

user_input = None

while user_input != 0:
    try:
        user_input = int(input("Enter enter as many intergers as you want, 0 will halt: "))
    except ValueError:
        user_input=0

    if user_input > 0:
      total += user_input
      positive_number += 1
      count += 1
    elif user_input<0:
      total += user_input
      negative_number += 1
      count += 1

if count==0:
    print("You didn't enter any number, code ended")
else:
    average = total / count
    print("\nThe number of positives:",  positive_number)
    print("The number of negatives:", negative_number)
    print("The total amount of numbers used:", count)
    print("The average is", format(average,".2f"), "which is", str(total), "/", str(count))

就像评论中所说的那样,您的第一个输入被忽略了。这是一个应该可行的替代方案。我排除了一些多余的检查语句。

positive_number = 0                    
negative_number = 0                      
average = 0                        
count = 0                          
new_number = 0
user_input = 1                  

while user_input != 0:
    user_input = eval(input("Enter enter as many integers as you want, 0 will halt: "))

    if user_input == 0:
        print("You didn't enter any number, code ended")

    elif user_input > 0:
        new_number += user_input
        positive_number += 1
        count += 1

    else:
        new_number += user_input
        negative_number += 1
        count += 1

average = (new_number / count)
print("\nThe number of positives:",  positive_number)
print("The number of negatives:", negative_number)
print("The total amount of numbers used:", count)
print("The average is", format(average,".2f"), "which is", str(new_number), "/", str(count))

您的代码存在许多问题。首先,代码没有评估用户提示的第一个数字;一旦进入 while 循环,它就会被覆盖。有多种方法可以解决此问题,但最好的方法是:

cont = True

while cont is True:

user_input = int(input("Prompt user"))

if user_input == 0:

cont = False

你也可以做一个 break 语句,没关系。

所以这就解决了为什么第一个数字没有被读取,以及为什么代码认为只有 3 个输入(以及您的计数被关闭)。现在两个底片呢?我不知道你为什么得到那个。当我输入您列出的数字时,我得到了一个负数和两个正数。再试一次,看看现在能不能用,我怀疑你打错了。