Replace palindrome function with multiply and divide operations

- Add multiply() function for multiplication
- Add divide() function with zero divisor check
- Add comprehensive test cases and interactive mode
- Remove palindrome detection functionality
This commit is contained in:
2026-04-02 15:03:50 +08:00
parent b2109a5a15
commit 420bbac9d7

173
math.py
View File

@@ -1,70 +1,155 @@
#!/usr/bin/env python3
"""
math.py - 判断回文数的脚本
math.py - 数学运算工具
提供乘法和除法运算功能
"""
def is_palindrome(n: int) -> bool:
def multiply(a: float, b: float) -> float:
"""
判断一个整数是否是回文数。
计算两个数的乘积
参数:
n: 要检查的整
a: 第一个
b: 第二个数
返回:
如果是回文数返回True否则返回False
两个数的乘积
"""
if n < 0:
return False
if n == 0:
return True
# 转换为字符串并检查是否等于反转后的字符串
str_n = str(n)
return str_n == str_n[::-1]
return a * b
def main():
"""测试函数"""
test_cases = [
121, # True
12321, # True
123, # False
1221, # True
123321, # True
1234321, # True
12344321, # True
10, # False
0, # True
-121, # False
123456, # False
123454321,# True
def divide(a: float, b: float) -> float:
"""
计算两个数的除法
参数:
a: 被除数
b: 除数
返回:
除法结果
异常:
ValueError: 当除数为0时抛出
"""
if b == 0:
raise ValueError("除数不能为0")
return a / b
def test_operations():
"""测试乘法和除法运算"""
print("测试乘法运算:")
print("-" * 30)
# 测试乘法
test_cases_multiply = [
(2, 3, 6),
(0, 5, 0),
(-3, 4, -12),
(2.5, 4, 10.0),
(-2.5, -4, 10.0),
(0, 0, 0),
]
print("测试回文数判断函数:")
print("-" * 40)
for num in test_cases:
result = is_palindrome(num)
print(f"{num:12} -> {'是回文数' if result else '不是回文数'}")
for a, b, expected in test_cases_multiply:
result = multiply(a, b)
status = "" if abs(result - expected) < 1e-10 else ""
print(f"{a} × {b} = {result} {status} (期望: {expected})")
# 额外测试:用户输入
print("\n测试除法运算:")
print("-" * 30)
# 测试除法
test_cases_divide = [
(6, 2, 3),
(10, 4, 2.5),
(-12, 3, -4),
(0, 5, 0),
(7.5, 2.5, 3),
(-10, -2, 5),
]
for a, b, expected in test_cases_divide:
try:
result = divide(a, b)
status = "" if abs(result - expected) < 1e-10 else ""
print(f"{a} ÷ {b} = {result} {status} (期望: {expected})")
except ValueError as e:
print(f"{a} ÷ {b} = 错误: {e}")
# 测试除数为0的情况
print("\n测试除数为0的情况:")
print("-" * 30)
zero_test_cases = [
(5, 0),
(0, 0),
(-3, 0),
(10.5, 0),
]
for a, b in zero_test_cases:
try:
result = divide(a, b)
print(f"{a} ÷ {b} = {result} ✗ (应该抛出异常)")
except ValueError as e:
print(f"{a} ÷ {b} = 正确抛出异常: {e}")
def interactive_mode():
"""交互式模式"""
print("\n" + "=" * 40)
print("手动测试模式 (输入 'exit' 退出)")
print("交互式计算模式 (输入 'exit' 退出)")
print("=" * 40)
while True:
user_input = input("请输入一个整数: ").strip()
if user_input.lower() == 'exit':
print("程序结束。")
print("\n选择操作:")
print("1. 乘法")
print("2. 除法")
print("exit. 退出")
choice = input("请选择 (1/2/exit): ").strip().lower()
if choice == 'exit':
print("退出交互模式。")
break
if choice not in ['1', '2']:
print("无效选择,请重新输入。")
continue
try:
num = int(user_input)
if is_palindrome(num):
print(f"{num} 是回文数。")
else:
print(f"{num} 不是回文数。")
a = float(input("请输入第一个数: "))
b = float(input("请输入第二个数: "))
if choice == '1':
result = multiply(a, b)
print(f"{a} × {b} = {result}")
elif choice == '2':
try:
result = divide(a, b)
print(f"{a} ÷ {b} = {result}")
except ValueError as e:
print(f"错误: {e}")
except ValueError:
print("错误:请输入有效的数。")
print("错误:请输入有效的数")
def main():
"""主函数"""
print("数学运算工具测试")
print("=" * 40)
# 运行测试
test_operations()
# 询问是否进入交互模式
choice = input("\n是否进入交互式计算模式? (y/n): ").strip().lower()
if choice == 'y':
interactive_mode()
else:
print("程序结束。")
if __name__ == "__main__":