六月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()

posted @ 2025-06-08 21:12  杨家兴  阅读(7)  评论(0)    收藏  举报