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

时间:2017-02-23 14:24:48

标签: python if-statement while-loop nested-loops

我看到了一个类似的帖子,但它包含了函数,我的不是。

目标:编写一个读取非特定数量整数的程序,确定读取的正值和负值的数量,并计算输入值的总和和平均值(不计算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))

导致此类错误的原因是什么?我只能假设这是一个小修复?

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我已经修复了代码中的问题,并重构了陷阱错误并消除了不必要的复杂情况:

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))

答案 2 :(得分:0)

就像在评论中所说的那样,你的第一个输入被忽略了。这是一个应该有效的替代方案。我排除了一些冗余的检查陈述。

{{1}}

答案 3 :(得分:0)

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

  

cont = True

     

而cont为True:

     
    

user_input = int(输入(&#34;提示用户&#34;))

         

如果user_input == 0:

         
      

cont = False

    
  

你也可以做一个休息陈述,但这并不重要。

这样就可以解释为什么第一个数字没有被读取,以及为什么代码认为只有3个输入(以及你的计数被关闭)。那两个否定点呢?我不知道你为什么这么做。当我输入您列出的数字时,我得到一个负数和两个正数。再试一次,看看它现在是否有效,我怀疑你一定输错了。