平均数和总和任务

3

制作能够从用户获取10个数字并计算它们的和与平均值的代码是一项基本任务。

目前我的情况如下:

Sum = 0
print("Please Enter 10 Numbers\n")
for i in range (1,11):
    num = int(input("Number %d =" %i))
sum = Sum + num
avg = Sum / 10

然而,我希望如果用户输入如“Number 2 = 1sd”的答案,代码不会立即停止。相反,我希望它作出“无效输入,请重试”的回应,并从失败的输入重新开始。

例如:

"Number 2 = 1sd"
"Invalid input. Try again."
"Number 2 = ..." 

我该如何实现这个目标?


1
你需要一个嵌套循环。 - Antony Hatchkins
sum = Sum + num 这行代码需要放在循环内部,否则只会将最后一个数字加入总和。此外,由于Python区分大小写,sumSum是不同的变量。 - Nick ODell
这个回答解决了你的问题吗?在Python脚本中重试用户输入 - Vladimir Fokow
6个回答

3
您可以通过在循环中提示错误消息并要求重新输入第“i”个数字来输出错误消息。这可以通过处理当将输入传递给int()函数时出现无效整数对象字符串初始化程序时引发的ValueError异常来完成。可以通过捕获该异常、输出“无效输入,请重试。”和继续进行操作来实现此目的。
一个可能满足您要求的代码示例如下:
Sum = 0
print("Please Enter 10 Numbers\n")
for i in range (1,11):
    num = None
    while num is None:
        try:
            num = int(input("Number %d =" %i))
        except ValueError:
            print('Invalid input. Try again.')
sum = Sum + num
avg = Sum / 10

1
@bamb1 顺便说一下,最好使用.isdigit而不是try-except - Ali Rn

2

这个对我来说有效。

sum_result = 0
print("Please Enter 10 Numbers\n")
for i in range (1,11):
    try:
        num = int(input("Number %d =" %i))
        sum_result = sum_result + num
    except Exception:
        print("Please try again")
        num = int(input("Number %d =" %i))
        sum_result = sum_result + num
avg_result = sum_result / 10
print(sum_result)
print(avg_result)

建议:

  1. 检查Python变量名的约定,您正在使用内置函数,这可能会导致问题。
  2. 当处理用户输入时,通常需要错误处理,因此try、except、else、finally是正解。
  3. 当您具有类似于此用法的代码时,通常会为执行这些任务命名一个函数。

1

您可以检查输入,然后继续进行或返回错误,就像这样:

sum = 0

print('Please Enter 100 Numbers:\n')
for i in range(1, 11):
    num = input('Number %d' % i)
    while not num.isdigit():
        print('Invalid input. Try again.')
        num = input('Number %d' % i)
    sum += int(num)

avg = sum / 10
print('Average is %d' % avg)

嗨,阿里,我对Python非常陌生,你能帮我理解为什么使用.isdigit比使用try-except更好吗? - bamb1

1

你可以做以下事情:

while True:
    try:
        num = int(input('Enter an integer: '))
        break
    except Exception:
        print('Invalid input')
#now num is an integer and we can proceed

0
如果你的数据不是太多,我认为把它们放在一个列表中会更好。因为如果你想要计算其他数据,你可以更容易地改变程序。
nums = [] # a list only store valid numbers
while len(nums) < 10:
  input_n = input("Number %d = " % (len(nums) + 1))
  if input_n.isdigit():
    n = int(input_n)
    nums.append(n)
  else:
    print("Invalid input. Try again.")

# average is more commonly known as a float type. so I use %f.
print("Average = %f" % (sum(nums) / len(nums)))

请不要发布基本上只包含代码的答案。请[编辑]您的答案,包括解释代码如何解决问题,何时应该使用它,它的限制是什么,如果可能的话,请提供相关文档链接。 - ljmc

0
from statistics import mean

i=0

number_list = []

while i <= 9:
    num = input("Please Enter 10 Numbers\n")
    if num.isdigit() ==False:
        print('Invalid input. Try again.')
        num
    else:
        number_list.append(int(num))
        i +=1

print(sum(number_list))
print(mean(number_list))

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接