0

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

首先,我的代码不会两次计算相同的数字;在这种情况下,有两个“5”,但它算作一个。

第二,没有输入数字时,不显示print("There is no input")。

我应该如何解决这些问题?

4

1 回答 1

2

首先,我的代码不会两次计算相同的数字;在这种情况下,有两个“5”,但它算作一个。

不准确。正在发生的事情是,一旦您的循环遇到零,它就会break退出循环并停止查看任何进一步的数字。对于您的第一个输入,这意味着它最终会跳过第二个5

解决方法很简单:删除else: break. 这是不必要的。如果一个数字既不是> 0也不是< 0,你不需要做任何事情,所以else:在这种情况下你不需要一个。

第二,没有输入数字时,不显示print("There is no input")。

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

将该检查移到循环之外。


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

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

此实现使用列表推导。稍后您可能会了解这些内容。

于 2018-05-19T02:34:09.790 回答