我是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;) 没有显示。
我该如何解决这些问题?
答案 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。您可能稍后会了解这些。