用户输入若干个成绩(百分制),求所有成绩的平均分。每输入一个分数后询问是否继续输入下一个分数,回答" y "或" Y "就继续输入下一个分数,回答" n "或" N "就停止输入分数。(要求有异常处理)
时间: 2023-07-07 22:23:32 浏览: 250
用户名输入的判断和异常处理
好的,可以使用一个循环来反复询问用户是否要输入成绩,然后根据用户的回答来决定是否继续输入。在每次输入后,将成绩累加到总分数中,最后计算平均分。同时,使用异常处理来捕获用户输入非数字的情况。具体代码如下:
```python
scores = []
while True:
try:
score = float(input("请输入一个成绩(百分制):"))
scores.append(score)
answer = input("是否继续输入下一个成绩?(y/n)")
if answer.lower() == "y":
continue
elif answer.lower() == "n":
break
else:
print("无效的输入!")
break
except ValueError:
print("请输入数字!")
if len(scores) == 0:
print("没有输入成绩!")
else:
average = sum(scores) / len(scores)
print("平均分为:{:.2f}".format(average))
```
解释一下:
1. 首先定义了一个空列表 `scores`,用于存储输入的成绩。
2. 进入一个循环,每次让用户输入一个成绩,并使用 `float()` 函数将其转换为浮点数类型。如果用户输入的不是数字,则会抛出 `ValueError` 异常,使用 `try-except` 结构捕获并输出错误信息。
3. 将输入的成绩添加到列表 `scores` 中。
4. 根据用户的回答决定是否继续输入下一个成绩。如果回答是 "y" 或 "Y",则使用 `continue` 语句跳过本次循环;如果回答是 "n" 或 "N",则使用 `break` 语句跳出循环。如果回答是其他字符,则输出错误信息并使用 `break` 语句跳出循环。
5. 判断列表 `scores` 是否为空,如果为空则输出 "没有输入成绩!",否则计算平均分并输出结果。使用 `sum()` 函数求出列表中所有成绩的和,再除以列表的长度得到平均分,使用字符串格式化的方式将结果输出,保留 2 位小数。
注意事项:
1. 用户输入的成绩需要使用 `float()` 函数将其转换为浮点数类型,否则无法进行数值计算。
2. 在捕获异常时要注意使用精确的异常类型,否则可能会屏蔽掉其他类型的异常,导致错误难以排查。在本例中,使用了 `ValueError` 异常来捕获用户输入非数字的情况。
3. 在判断用户回答时,使用 `lower()` 方法将其转换为小写字母,以避免大小写带来的问题。
阅读全文