2013-11-25 38 views
0

我想查找用户输入数字的平均值。该循环应该重复自己,直到用户输入-9999(sentinel值),这是我迄今为止,它在闲置工作,但程序不会结束给我的平均值,当我键入-9999。我是python新手,可以使用一点指导,谢谢。循环和标记值

import random 

numbers = [int(input("Please, enter number {}(-9999 to end") 

if input("-9999"): 

# will display prompt like "Please, enter number 1:" 
print ("numbers entered:", numbers) # this will print the entered number 

positives = [num for num in numbers if num > 0] 
negatives = [num for num in numbers if num < 0] 

# loop ends here 

print ("Average negative number is :", sum(negatives)*1.0/len(negatives)) 
print ("Average positive number is :", sum(positives)*1.0/len(positives)) 
print ("Average of all numbers is:",sum(numbers)/len(numbers)) 
+0

'if input(“ - 9999”)'does * not *检查用户是否刚刚在程序中输入了文本'9999'。 – SimonT

回答

0
ns = [] 
while not ns or ns[-1] != -9999: 
    ns.append(int(input("Please, enter number {}(-9999 to end")))) 
+0

谢谢你...你如何在我的平均值中不包含-9999值?它可以结束程序,但它将它包含在我的平均值中,并将其抛出。 – user32152

+0

根据这个问题的复杂程度,我认为对'not ns'的值如何评估会有所帮助。 – SimonT

+0

@ user32152 ns.pop(-1)将删除最后一个-9999 – PasteBT

0
ns = list(iter(lambda:int(input("Enter Number:")),-9999)) 

是做一个很酷的方式,

ITER可以采取前哨值等作为第二个参数,如果你使用函数的第一个参数

作为你的积极和消极的一边......它似乎会忽略零(这可能是故意的)...

0

当您将数字添加到列表中时,此代码将循环,并在输入-9999时停止。然后它会丢掉-9999,所以你可以继续平均。它不紧凑,但它的工作原理很简单。

numbers = [] 

while True: 
    numbers.append(input("Enter a number: ")) #append user input to 'numbers' 
    if numbers[-1] == -9999:  #check to see if the last number entered was -9999 
     numbers = numbers[:-1] #if it was, modify numbers to exclude it 
     break     # and break the loop