用户输入平均值

时间:2013-10-04 21:03:11

标签: python

我的老师没有在课堂上教我们,我正在努力学习。这就是我应该做的,这是我已经走了多远。任何帮助将不胜感激!

  
      
  • 从用户
  • 获取五个数字的列表   
  • 打印列表
  •   
  • 打印平均值
  •   
  • 修改列表,使每个元素都比之前的元素大
  •   
  • 打印修改后的列表
  •   
 def average():
     x=a+b+c+d+e
     x=x/5
     print("the average of your numbers is: " +x+ ".")

 my_list =[ ]
 for i in range (5):
     userInput = int(input("Enter a number: ")
     my_list.append(userInput)
     print(my_list)
 average(my_list)

感谢你的帮助,你的管只能到目前为止!

3 个答案:

答案 0 :(得分:3)

  
    

这里对您有用的主要功能是sum()len()

  

sum()返回可迭代的项目总和

len()返回python对象的长度

使用这些功能,您的案例也很容易应用:

my_list = []
plus_one = []

for x in range(5):
    my_list.append(x)
    plus_one.append(x+1) 

print my_list
print plus_one

def average():
    average = sum(my_list) / len(my_list) 
    return average

print average()

正如Shashank所指出的,推荐的方法是在函数中定义一个参数,然后在调用函数时传递列表的参数。不确定你是否已经了解了参数,所以我最初把它留了出来。无论如何它在这里:

def average(x):
    # find average of x which is defined when the function is called

print average(my_list) # call function with argument (my_list)

这样做的好处是,如果您有多个列表,则不需要新函数,只需更改函数调用中的参数即可。

答案 1 :(得分:1)

如果您想使用库函数,只需使用avg = sum(my_list)/len(my_list) if (len(my_list) != 0) else 0即可获得平均值。

否则,如果您只是想知道如何更改代码,请查看它生成的错误:

Traceback (most recent call last):
  File "file.py", line 12, in <module>
    average(my_list)
TypeError: average() takes no arguments (1 given)

显然,我们需要将列表传递给average。这是一种非常天真的计算平均值的方法

def average(l):
  s =0
  c = 0
  for val in l:
    s += val
    c +=1
  avg = (s/c if (c != 0)  else 0)
  print("the average of your numbers is: " +str(avg)+ ".")

这可以很容易地被我之前的代码取代:

def avg(l):
  avg = sum(l)/len(l) if (len(l) != 0) else 0
  print("the average of your numbers is: " +str(avg)+ ".")
  # or
  if (len(l) !=0):
    avg = sum(l)/len(l)
  else:
    avg = 0
  print("the average of your numbers is: " +str(avg)+ ".")

答案 2 :(得分:1)

我提供的解决方案使用了Python 3,您似乎正在使用它。

    #!/usr/bin/env python3

    """The segment below takes user input for your list."""

    userInput = input("Enter a comma-delimited list of numbers \n")
        userList = userInput.split(",")
        try:
            data_list = [float(number) for number in userList]
        except ValueError:
            print("Please enter a comma-delimited list of numbers.")


    def list_modifier(list_var):
       """Print the original list, average said list, modify it as needed,
          and then print again."""
       print("Your list is: " + list_var)
       average = sum(list_var) / len(list_var)  # Divide list by sum of elements
       for x in list_var:
            x += 1
       print("Your modified list is: " + list_var)

    list_modifier(data_list)

我使用了一些花哨的东西来获取处理错误的用户输入,但实际上你不应该担心这样的东西。

split()字符串方法只需使用您提供的参数将字符串拆分为单个较小字符串的列表。在这种情况下,我将其分解为每个逗号。我添加了错误处理,因为如果你用逗号结束一个字符串,输入函数将无效。

我还使用了 list comprehension ,这是python中的一种表达式,它根据括号内传递的参数创建列表。这可以在下面的代码中看到:

[float(number) for number in userList]

这会将每个字符串放在由 split()创建的字符串列表中,并将其转换为数字。我们现在有了我们想要的数字列表。

除此之外,我们还有 list_modifier 函数,该函数首先使用字符串连接来声明数字列表。然后使用 sum()函数查找列表中所有元素的总和,并将该总和除以列表的长度。

for 代码块获取列表中的每个元素并向其中添加一个元素。字符串连接再次用于最终显示我们修改后的列表。

我真的希望这个解决方案有所帮助,抱歉,如果它有点过于复杂。 尝试/除块对于处理错误非常有用,我建议您稍后再查看它们。如果您想在课堂上取得成功,请参阅the Python documentation

祝你好运,玩得开心!