如何在python中计算用户输入

时间:2016-10-07 16:18:09

标签: python input

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

这是我到目前为止所做的:

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()

每当我输入“done”时,程序就会给我这个错误。

  

TypeError:'int'对象不可迭代

我尝试将user_input变量更改为:

  

user_input = int(输入(“输入成绩:”))

但是,另一个错误:TypeError:

  

'int'对象不是可迭代的用户输入

我对编程非常陌生。任何人都可以帮我解决这个问题吗?我一直在网上搜索过去两个小时,但没有发现任何不仅产生其他错误的内容。

2 个答案:

答案 0 :(得分:1)

我注意到一些可能为你解决问题的事情。

  1. 当你真的要给它一个数字列表时,你正在向number函数提供avg
  2. 我认为你应该这样做:创建一个名为numbers的列表,并将每个用户输入附加到该列表。然后在数字列表中使用avg功能。

答案 1 :(得分:0)

你的逻辑存在一些缺陷。

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

我会将您的程序改写如下:

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()