【问题标题】:Create a loop that asks values, store the values and later print the average?创建一个询问值、存储值并稍后打印平均值的循环?
【发布时间】:2019-09-11 01:07:12
【问题描述】:

我需要创建一个算法,从用户那里获取值(工资),然后再计算平均工资(就像输入循环一样,存储所有输入值,直到您键入停止命令)。然后我必须打印工资超过 100 英镑的人的百分比。

我是 Python 新手。

我成功创建了输入循环,但不知道如何存储这些值,以后再计算平均值。

    print("Type the wages, when finished type -1")    
    wages = int(input("Type the wage"))    
    count = 1    
    exit = -1    
    while exit != wages:    
       wages = int(input("Type the wage: "))     
       count += 1    
    def average():    
        wages / count    

    if wages == exit:    
        print(average)

【问题讨论】:

  • 好的,在我可以帮助您之前,这是我的问题。我们需要更多信息才能解释需要什么。你希望它只接受一定数量的工资吗?例如,只有 5 个输入?还是您希望它一直持续到用户输入关键字?
  • 不,用户要输入的数量然后取平均值。

标签: python python-3.x


【解决方案1】:
print("Type the wages, when finished type -1")
wages = int(input("Type the wage: "))
wages_list = []
while wages !=-1:
    wages = int(input("Type the wage: "))
    if wages!=-1:
        wages_list.append(wages)
if wages_list:
    print("Average is :",sum(wages_list)/len(wages_list))

试试这个

【讨论】:

  • 很高兴帮助您解决问题!
【解决方案2】:

在您的while 循环之前,您可以创建一个空列表来存储工资:

wageList = []

在循环中,您可以将每个工资添加到列表中(之前下一个input):

wageList.append(wages)

那么最后,你可以得到平均值:

if len(wageList) == 0:
    print("No wages given")
else:
    print("Average was {}".format(sum(wageList) / len(wageList)))

通过使用列表的长度,您不需要存储计数。


此外,您的某些代码是错误的和/或多余的:

def average():    
    wages / count    // You probably wanted to return this :-)

if wages == exit:    
    print(average)   // average is a function, you would want to use average()

我的建议是放弃它,因为代码足够简单,可以在单个 sn-p 代码中完成(没有函数)。


工资超过 100 英镑的人数可以通过以下方式获得:

num = len([item for item in wagesList if item > 100])

不过,如果您想停留在 Python 的“更简单”端(不那么 Pythonic,但可能更符合本课程的水平),您可以只使用一个循环:

num = 0
for item in wagesList:
    if item > 100:
        num += 1

然后百分比是(假设非零大小,所以检查与我上面的相同):

num * 100 / len(wagesList)

【讨论】:

    【解决方案3】:

    我建议这样做:

    total = 0
    count = 0
    while True:
        inval = int(input("Type the Wage: "))
        if inval == -1:
            break
        total = total + inval
        count = count + 1
    print("average is " + str(total / count))
    

    【讨论】:

    • 只是一个小小的建议,您可能需要在计算平均值之前检查count == 0。
    • @paxdiablo 这是一个快速而肮脏的解决方案,所以我没有添加大小写检查等。
    【解决方案4】:
    persons = []
    wages_persons = []
    print("Enter person name, when finished type exit")
    person = input("Enter person name: ")
    while person != 'exit':
        persons.append(person)
        print("Type the wages, when finished type -1")
        wages = int(input("Type the wage: "))
        wages_list = []
        while wages !=-1:
            wages = int(input("Type the wage: "))
            if wages!=-1:
                wages_list.append(wages)
        if wages_list:
            avg = sum(wages_list)/len(wages_list)
            print("Average of {} is {}".format(person,avg))
            wages_persons.append(avg)
        person = input("Enter person name: ")
    
    wages_over_100 = [x for x in wages_persons if x>100]
    print("Total {}% persons have wages avarage above 100$".format((len(wages_over_100)/len(wages_persons))*100))
    

    这将符合您的期望。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      相关资源
      最近更新 更多