Streamlit二元线性方程组应用出现除零错误求助
解决二元线性方程组Streamlit应用的ZeroDivisionError问题
问题核心
ZeroDivisionError: float division by zero 错误的本质是计算x的分母 a*q - p*b 等于0,对应二元线性方程组的两种特殊场景:
- 两条直线平行且不重合,方程组无解
- 两条直线完全重合,方程组有无穷多解
原生Python环境运行正常是因为测试时输入的参数未触发分母为0的情况,而Streamlit是交互式应用,用户可输入任意值,必然会遇到该场景。
解决思路
1. 前置判断行列式(分母)是否为0
在执行除法运算前,先检查 a*q - p*b 的值,若为0则直接提示用户方程组的特殊情况,避免错误抛出。
2. 区分无解与无穷多解的场景
当行列式为0时,通过验证方程系数是否成比例(如 a*r == p*c 且 b*r == q*c),进一步区分是无解还是无穷多解,给用户更精准的提示。
3. 完善完整求解逻辑
原代码仅计算了x,补充y的求解逻辑,同时确保计算y时也规避分母为0的潜在问题。
修改后的示例代码
import streamlit as st st.title("SISTEM PERSAMAAN LINEAR DUA VARIABEL") st.subheader("Persamaan 1: ax+by=c") a = st.number_input("Masukan Nilai Variabel a") b = st.number_input("Masukan Nilai Variabel b") c = st.number_input("Masukan Nilai Variabel c") st.subheader("Persamaan 2: px+qy=r") p = st.number_input("Masukan Nilai Variabel p") q = st.number_input("Masukan Nilai Variabel q") r = st.number_input("Masukan Nilai Variabel r") # 计算行列式(分母) determinant = a * q - p * b if determinant == 0: # 判断是否为无穷多解 if (a*r == p*c) and (b*r == q*c): st.write("方程组有无穷多解") else: st.write("方程组无解") else: # 计算x和y的解 x = (c*q - r*b) / determinant y = (a*r - p*c) / determinant st.write(f"x = {x}") st.write(f"y = {y}") st.caption("Note: AI KAKURU akan mencari variabel x dengan metode eliminasi lalu mencari variabel y dengan metode subtitusi")
关键说明
- 通过行列式判断提前拦截错误场景,避免程序崩溃,同时提供用户友好的反馈。
- 补充y的求解逻辑,让应用功能更完整,符合二元线性方程组的求解预期。
内容的提问来源于stack exchange,提问作者DR4C4
相关产品推荐
相关产品推荐

