忽略了计算相同的整数

时间:2018-05-19 02:21:30

标签: python

我是Python的新手。 我需要输入整数,并将整数排序为正面和负面列表。 当输入为0时,可以忽略它。 结果应如下所示:

input integers:
23 -2 5 89 -43 0 5 0
positive: 4, negative: 2, sum: 77

input integers:

there is no input
positive: 0, negative: 0, sum: 77

这是我的代码,但它有一些问题。

L = [int(x) for x in input("input integers: \n").split()]
positive=[]; negative=[]


for number in L:
    if L==[]:
        print("There is no input")

    if L!=[]:
        if number > 0:
            positive.append(number)
        elif number < 0 :
            negative.append(number)

        else:
            break
print("positive: %d , negative : %d, total : %d" %(len(positive), len(negative), sum(L)))

首先,我的代码并没有计算两次相同的数字; 在这种情况下,有两个&#39; 5&#39;但它算作一个。

第二,当没有输入数字时,     打印(&#34;没有输入&#34;) 没有显示。

我该如何解决这些问题?

1 个答案:

答案 0 :(得分:2)

  

首先,我的代码并没有计算两次相同的数字;在这种情况下,有两个&#39; 5&#39;但它算作一个。

不准确。发生了什么,一旦你的循环遇到零,它就会break退出循环并停止查看任何更多的数字。在您第一次输入的情况下,这意味着它最终会跳过第二个5

解决方案很简单:删除else: break。这是不必要的。如果某个号码既不是> 0也不是< 0,那么您就不需要做任何事情,因此在这种情况下您不需要else:

  

第二,当没有输入数字时,不显示打印(&#34;没有输入&#34;)。

检查空列表是在for循环内。如果列表为空,则没有数字要迭代,因此循环永远不会运行。

将该检查移到循环外。

顺便说一句,有一种更简单的方法可以完成for循环的工作:

positive = [x for x in L if x > 0]
negative = [x for x in L if x < 0]

此实施使用list comprehensions。您可能稍后会了解这些。