关于python:用户输入平均值

User input average

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

  • Takes a list of five numbers from the user
  • Prints the list
  • Prints the average
  • Modifies the list so each element is one greater than it was before
  • Prints the modified list
1
2
3
4
5
6
7
8
9
10
11
 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)

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


The main functions that are going to be useful to you here are sum() and len()

sum()返回iterable中项的总和

len()返回python对象的长度

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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指出的那样,推荐的方法是在函数中定义一个参数,然后在调用函数时传递列表的参数。不确定你是否已经了解了参数,所以我最初把它留了出来。无论如何它在这里:

1
2
3
4
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)

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    #!/usr/bin/env python3

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

    userInput = input("Enter a comma-delimited list of numbers
"
)
        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中的一种表达式,它根据括号内传递的参数创建列表。这可以在下面的代码中看到:

1
[float(number) for number in userList]

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

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

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

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

祝好运并玩得开心点!


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

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

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

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

1
2
3
4
5
6
7
8
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)+".")

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

1
2
3
4
5
6
7
8
9
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)+".")