编写一个程序,允许用户在键盘上输入若干数字,程序将计算出这些数字的和以及平均值。当输入的数字大于100或小于0时,程序将产生异常对象。编写一个测试类程序,对其进行测试。
时间: 2024-10-24 17:04:03 浏览: 38
为了编写这样一个程序,我们可以使用Python作为示例语言,因为它语法简洁并且易于理解。这里是一个简单的命令行程序和相应的测试类:
```python
# 主程序 - NumberCalculator.py
class InvalidInput(Exception):
def __init__(self, message="Invalid input. Please enter numbers between 0 and 100"):
self.message = message
super().__init__(self.message)
def get_numbers():
total = 0
count = 0
while True:
try:
num = float(input("请输入一个数字(0-100),或输入'q'退出:"))
if num == 'q':
break
elif num < 0 or num > 100:
raise InvalidInput
total += num
count += 1
except ValueError:
print("无效输入,请输入数字。")
except InvalidInput as e:
print(e)
return total, count
def calculate_average(total, count):
return total / count if count != 0 else "无法计算平均值,因为没有输入有效数字。"
if __name__ == "__main__":
numbers = get_numbers()
average = calculate_average(*numbers)
print(f"数字总和: {numbers[0]}, 平均值: {average}")
# 测试类 - test_NumberCalculator.py
import unittest
from NumberCalculator import InvalidInput, get_numbers, calculate_average
class TestNumberCalculator(unittest.TestCase):
def test_get_numbers(self):
# 正常情况
result, _ = get_numbers()
self.assertIsInstance(result, tuple)
# 输入超出范围
with self.assertRaises(InvalidInput):
_, _ = get_numbers(["150", "50", "200"])
# 输入非数字
with self.assertRaises(ValueError):
_, _ = get_numbers(['a', 'b'])
def test_calculate_average(self):
# 普通计算
total, count = get_numbers()[:2]
avg = calculate_average(total, count)
self.assertIsInstance(avg, (float, str))
# 空输入
total, count = (0, 0)
avg = calculate_average(total, count)
self.assertEqual(avg, "无法计算平均值,因为没有输入有效数字。")
if __name__ == '__main__':
unittest.main()
```
这个`NumberCalculator`程序首先接收用户的输入,如果输入不符合要求,就会抛出异常。然后测试类`test_NumberCalculator`会验证这些功能是否按预期工作。
阅读全文