六月8日
8-1 【Python0031】简易带参计算器
设计一个简易的参数计算器。
【输入格式】
第一行输入待计算的带变量参数的计算式
第二行输入各变量参数的赋值序列
【输出格式】
输出带变量参数的计算式的计算结果
【输入样例】
a+b
a=1,b=10
【输出样例】
11
作答:
import re
def main():
读取输入的表达式和赋值字符串
expr = input().strip()
assign_line = input().strip()
初始化字典存储变量名和对应数值
var_dict = {}
处理赋值字符串:分割并解析每个赋值
assignments = assign_line.split(',')
for assignment in assignments:
# 去除赋值语句中的空格
assignment = assignment.replace(" ", "")
# 按等号分割变量名和数值
if '=' in assignment:
var_name, value_str = assignment.split('=', 1)
try:
# 尝试将数值字符串转换为数字
value = float(value_str)
var_dict\[var_name\] = value
except (TypeError, ValueError):
# 如果转换失败,则跳过此赋值
continue
如果表达式为空,直接返回0
if not expr:
print(0)
return
按变量名长度从长到短排序,避免替换冲突
sorted_vars = sorted(var_dict.keys(), key=lambda x: len(x), reverse=True)
复制表达式以便进行替换
replaced_expr = expr
对每个变量进行替换
for var in sorted_vars:
value = var_dict\[var\]
# 根据数值是否为负决定是否添加括号
if value < 0:
# 负值需要加括号
if value.is_integer():
replacement = f"({int(value)})"
else:
replacement = f"({value})"
else:
# 非负值直接转换为字符串
if value.is_integer():
replacement = str(int(value))
else:
replacement = str(value)
# 使用正则表达式进行替换,避免部分匹配
replaced_expr = re.sub(r'\\b' + re.escape(var) + r'\\b', replacement, replaced_expr)
try:
# 计算替换后的表达式
result = eval(replaced_expr)
except Exception:
# 如果计算失败,输出0
print(0)
return
格式化输出:整数则输出整数,否则输出浮点数
if isinstance(result, float) and result.is_integer():
print(int(result))
else:
print(result)
if name == "main":
main()

浙公网安备 33010602011771号