如何在python中计算用户输入

How to calculate user input in python

我应该用python编写一个程序,一次要求一个等级。当用户输入"完成"时,计算以下内容:平均成绩。

这就是我目前为止所拥有的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def main():
    user_input = input("Enter grade:")
    number = user_input
    while True:
        user_input = input("Enter grade:")
        if user_input =="done":
            break
    avg(number)

def avg(a):
    average = sum(a)/len(a)
    print(average)

if __name__ =="__main__":
    main()

每当我输入"完成"时,程序就会给出这个错误。

TypeError: 'int' object is not iterable

我已尝试将用户输入变量更改为:

user_input = int(input("Enter grade:"))

但是,另一个错误:类型错误:

'int' object is not iterable user input

我对编程非常陌生。有人能帮我解决这个问题吗?在过去的两个小时里,我一直在网上搜索,没有发现任何不只是产生另一个错误的东西。


我注意到一些事情可以帮你解决这个问题。

  • 当你真的想给它一个数字列表的时候,你正在把number输入到avg函数中。
  • 我认为您应该这样做:创建一个名为数字的列表,并将每个用户输入附加到该列表中。然后使用数字列表上的avg函数。

  • 你的逻辑有一些缺陷。

    • 每次在main()中请求用户输入时,都会覆盖user_input的值。您应该做的是将每个数字收集到一个list()中。
    • python提出的错误告诉您,内建函数sum()采用的是一个数字列表,而不是您传入的单个数字。
    • input()函数返回一个字符串,因此需要将输入转换为整数。

    我将把你的程序改写为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    def main():
        # create a list to store each grade
        # that the user inputs.
        grades = []

        # while forever
        while True:
            # get input from the user.
            # I am not converting the input to a integer
            # here, because were expecting the user to
            # enter a string when done.
            i = input("Enter grade:")

            # if the user enters 'done' break the loop.
            if i == 'done':break

            # add the grade the user entered to our grades list.
            # converting it to an integer.
            grades.append(int(i))

        # print the return value
        # of the avg function.
        print("Grade average:", avg(grades))

    def avg(grades):
        # return the average of
        # the grades.
        # note that I'm using the builtin round()
        # function here. That is because
        # the average is sometimes a
        # long decimal. If this does not matter
        # to you, you can remove it.
        return round(sum(grades)/len(grades), 2)

    # call the function main()
    main()