【问题标题】:looping and sentinel values循环和标记值
【发布时间】:2013-11-26 08:31:57
【问题描述】:

我正在尝试查找用户输入数字的平均值。循环应该重复自己,直到用户输入-9999(哨兵值)这是我到目前为止所拥有的并且它在空闲状态下工作但程序没有结束并在我输入-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))

【问题讨论】:

  • if input("-9999")检查用户是否刚刚将文本 9999 输入到您的程序中。

标签: python sentinel


【解决方案1】:
ns = []
while not ns or ns[-1] != -9999:
    ns.append(int(input("Please, enter number {}(-9999 to end"))))

【讨论】:

  • 谢谢...我的平均值中怎么不包括值 -9999?它可以结束程序,但它包含在我的平均值中并丢弃它
  • 基于这个问题的复杂程度,我认为对not ns的值是如何评估的给出一些解释会有所帮助。
  • @user32152 ns.pop(-1) 将删除最后一个 -9999
【解决方案2】:
ns = list(iter(lambda:int(input("Enter Number:")),-9999))

这是一种很酷的方法

如果您对第一个参数使用函数,iter 可以将要等待的标记值作为第二个参数

除了你的正面和负面......它似乎会忽略零(这可能是故意的)......

【讨论】:

    【解决方案3】:

    当您向列表中添加数字时,此代码将循环播放,并在您输入 -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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多