【K12】Python写串联电阻问题的求解思路解析

发布时间:2024年01月15日

问题源代码

方法:calculate_circuit_parameter

构造题目:

模板:
已知电阻R1为 10Ω,电阻R2为 5Ω,电压表示数为2.5V,求电源电压U?
给合上面题目,利用Python程序,可以任意调节参数,从而得到更多题目的构造。
在这里插入图片描述

题目1:已知电阻R1为 10Ω,电阻R2为 5Ω,电压表示数为2.5V,求电源电压U。 电源电压U为 7.5V

题目2:已知电阻R1为 10Ω,未知电阻R2两端电压为2.5V,电源电压U为7.5V,求电阻R2的阻值。 r2_value 的值为 5.0

题目2:已知电阻R2为 5Ω,其两端电压为2.5V,电源电压U为7.5V,求电阻R1的阻值。 r1_value 的值为 10.0

题目:已知电阻R1为 10Ω,电阻R2为 5Ω,电压表示数为2.5V,电源电压U为7.5V,求电阻R1两端的电压。
voltage_across_r1 的值为 5.0

源代码

def calculate_circuit_parameter(circuit_data, target):
    r1 = circuit_data.get('r1')  # 获取r1阻值
    meter_reading = circuit_data.get('meter_reading')  # 获取R1和R2串联部分的电压表示数
    source_voltage_known = circuit_data.get('source_voltage')
    r2_known = circuit_data.get('r2')  # 已知电阻R2的阻值

    def calculate_r2_value():
        # 根据电源电压、R1和电压表示数计算电阻R2
        r2 = (meter_reading * r1) / (source_voltage_known - meter_reading)
        return round(r2, 1)

    def calculate_voltage_across_r1():
        return round(source_voltage_known - meter_reading, 1)

    def calculate_r1_value():  # 修改:移除r2_known参数
        # 根据电源电压、已知的R2两端电压和电压表示数计算电阻R1
        r1 = (source_voltage_known - meter_reading) * r2_known / meter_reading
        return round(r1, 1)

    # def calculate_r1_value(r2_known, meter_reading, source_voltage_known):
    #     r1 = (source_voltage_known - meter_reading) * r2_known / meter_reading
    #     return round(r1, 1)

    functions = {
        'r2_value': (calculate_r2_value,
                     lambda: f"已知电阻R1为 {r1}Ω,未知电阻R2两端电压为{meter_reading}V,电源电压U为{source_voltage_known}V,求电阻R2的阻值。"),
        'voltage_across_r1': (calculate_voltage_across_r1,
                              lambda: f"已知电阻R1为 {r1}Ω,电阻R2为 {r2_known}Ω,电压表示数为{meter_reading}V,电源电压U为{source_voltage_known}V,求电阻R1两端的电压。"),
        'r1_value': (calculate_r1_value,
                     lambda: f"已知电阻R2为 {r2_known}Ω,其两端电压为{meter_reading}V,电源电压U为{source_voltage_known}V,求电阻R1的阻值。"),
    }

    if target == 'source_voltage':
        print(f"\n题目:已知电阻R1为 {r1}Ω,电阻R2为 {r2_known}Ω,电压表示数为{meter_reading}V,求电源电压U。")
        return f"电源电压U为 {source_voltage_known}V"

    if target not in functions:
        return f"无法计算'{target}',请指定正确的物理量('r2_value', 'voltage_across_r1' 或 'r1_value')。"

    calculate_function, question_generator = functions[target]

    print(f"\n题目:{question_generator()}")

    result = calculate_function()
    # 删除此部分,因为calculate_r1_value不再需要额外参数
    # if target == 'r1_value':
    #     result = calculate_function(r2_known)

    return f"{target} 的值为 {result}"




# 示例电路数据
circuit_data = {
    'r1': 10,
    'meter_reading': 2.5,
    'source_voltage': 7.5,
    'r2': 5  # 已知电阻R2的阻值
}



def import_pic(pic='circuit_diagram_cldy01.png'):
    import matplotlib
    matplotlib.use('TkAgg')  # 使用Tkinter作
    import matplotlib.pyplot as plt
    # 加载并显示电路图(假设图片存在)
    img = plt.imread(pic)
    fig, ax = plt.subplots(figsize=(6, 6))
    ax.imshow(img)
    plt.show()


# 计算不同物理量
for target in ['source_voltage', 'r2_value', 'r1_value', 'voltage_across_r1']:
    print(calculate_circuit_parameter(circuit_data, target))


def kuozhan():
    import numpy as np

    # 假设一个电流范围
    current_range = [0.1,0.2,0.5,1,2,2.5] # 从0.1A到1.1A  以步长0.2  取五个电流值

    r1_values = []
    r2_values = []

    for current in current_range:
        r1 = 5 / current
        r2 = 2.5 / current
        r1_values.append(r1)
        r2_values.append(r2)

    print("基于给定条件的不同R1和R2组合:")
    for i, (r1, r2) in enumerate(zip(r1_values, r2_values)):
        print(f"第{i + 1}组: R1={round(r1, 2)}Ω, R2={round(r2, 2)}Ω")

kuozhan()
import_pic()



扩展函数
kuozhan

在其他条件不变情况下,基于给定条件的不同R1和R2组合:
第1组: R1=50.0Ω, R2=25.0Ω
第2组: R1=25.0Ω, R2=12.5Ω
第3组: R1=10.0Ω, R2=5.0Ω
第4组: R1=5.0Ω, R2=2.5Ω
第5组: R1=2.5Ω, R2=1.25Ω
第6组: R1=2.0Ω, R2=1.0Ω

在这里插入图片描述
通过使用上述方法(利用编程和numpy库生成不同电流值对应的不同电阻组合),学生可以从以下方面受益:

理论联系实际:这种方法将物理电路的理论知识与编程实践相结合,让学生在解决实际问题时加深对串联电路欧姆定律的理解。

数学建模能力提升:学生需要理解欧姆定律数学建模,通过编程实现模型参数变化,直观地看到电阻值随着电流的变化而变化,有助于提高数学抽象能力和模型构建能力。

数据可视化与分析:尽管示例代码没有直接展示数据可视化部分,但这种编程方式为后续的数据可视化提供了便利。学生可以进一步学习如何用图表展现电阻与电流之间的关系,便于观察规律和趋势。

逻辑思维锻炼:编写循环结构和条件判断的代码过程中,学生的逻辑推理能力得到锻炼,学会如何根据给定条件动态计算所需结果。

实验模拟:虽然这里是在计算机上进行模拟,但在某种程度上替代了实验室的实际操作,帮助学生在安全、方便的环境下探索和验证物理现象。

自主探究意识培养:当学生可以根据自己设定的参数范围来探索不同的电路情况时,他们会更加主动地参与到学习中去,有利于培养自主探究和解决问题的能力。

文章来源:https://blog.csdn.net/weixin_41704077/article/details/135597191
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。