【问题标题】:Adding and computing a mean from a list of integers [duplicate]从整数列表中添加和计算平均值[重复]
【发布时间】:2021-12-11 23:38:31
【问题描述】:

您好,我正在创建一个函数来计算用户输入的整数列表的平均值。我收到一个错误:

ValueError: int() 以 10 为底的无效文字:

这是我的代码:

def calcmean (mylist):
    listsum= 0
    for index in mylist:
        listsum = listsum + index
    mean= listsum / len(mylist)
    return mean

userinput= [int(input("Enter list separated by commas:"))]
print (mean (userinput))

【问题讨论】:

  • 嗨,也许将输入字符串解析为整数列表? stackoverflow.com/questions/3477502/…
  • 您永远不会将字符串拆分为逗号分隔的值。 calcmean 只是逐个字符地迭代您的输入,而不是逐个数字。

标签: python valueerror


【解决方案1】:

您如何确保用户输入的数字完全符合您的预期?如果用户键入像1,2,3,,4,,,,5 这样的两个/三个/四个/... 连续逗号会发生什么?它应该处理的远不止这些。需要明确的是,您应该将您的计划分为 3 个阶段,包括:

  • Input
  • Process the input
  • Calculate mean

下面给你一个例子:

输入

userinput = input("Please type number separated by commas")

处理输入

# split numbers to items by commas. 
num_array = userinput.split(",")

# chose items that are valid numbers 
def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False 
num_array = [int(item) for item in num_array if is_number(item)]

计算平均值

正如您在代码中所做的那样

print(mean(num_array))

【讨论】:

    【解决方案2】:

    这应该可行:

    userinput = [int(x) for x in input("Enter list separated by commas:\n").split(', ')]
    

    【讨论】:

    • 您可以简单地在',' 上拆分。 int 本身会忽略其参数中的前导和尾随空格,因此 ', ' 只会使您更有可能将诸如 1,2 之类的不好的东西传递给 int
    猜你喜欢
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多