python - 我的代码在不应该循环的时候不断循环
问题描述
我正在创建一个 python 程序,给定三角形的任何角度/边将解决所有其他适用的边。为此,我有一个长度为 a、b、c 和边为 aa、ba、ca 的列表字典。字典的结构是这样的,列表中的第一项是键的值,第二项是 0 或 1,这取决于它是否被回答。
该程序获取列表的第二个值并将其放入我称为的另一个字典eqdict
中。对于 eqdict,该值为 1 或 0,具体取决于该值是否已知。有了这个我们可以做勾股定理,所以如果 a+b+c=2,那么我们知道 1 个值丢失了,所以它启动一个函数来查找丢失的边。在此函数之后,答案与saveanswer
函数一起保存,并再次调用方程查找器函数。但是,当程序通过方程式查找器返回时,eqdict
它找到的任何字符都没有设置为 0,因此它具有连续循环。
import math
def main():
#creating terms in strings because I cant find an answer on how
#to make floats with a non zero no value
global terms
terms={"a":[0,0],"b":[0,0],"c":[0,0],"aa":[0,0],"ba":[0,0],"ca":[0,0]}
selectterms()
def selectterms():
"""takes user input for terms"""
doneterm=False
while not doneterm:
print("Please select the variable and then write it's value")
print("When done, please press enter with command prompt empty")
term1=input("Variable: ")
#to start program need to enter no command
if term1=="":
doneterm=True
appender()
#to end program after its finished
if doneterm ==False:
term2=float(input("Number: "))
terms[term1]=[term2]
terms[term1].append(1)
return
def addtoeqdict(term):
eqdict[term]=1
return
def saveanswer(term,num):
"""saves answer to answers dict, makes second term 1 and sends back the number"""
answers={}
print("saveanswer")
answers[term]=num
#print("answers",answers)
terms[term][1]=1
terms[term][0]=num
eqdict[term]=1
print(answers)
print(eqdict)
eqfinder(**eqdict)
def appender():
"""Append a 0 on to terms that have only 1 item in list"""
global eqdict
eqdict={}
keys=terms.keys()
for i in keys:
i = str(i)
eqdict[i]=int(terms[i][1])
eqfinder(**eqdict)
return
def eqfinder(a,b,c,aa,ba,ca):
"""runs through given terms to find any possible equations.
looks for possible equations by adding appended values"""
nomoreterms=False
while nomoreterms == False:
print(terms)
if terms["aa"][0]!=0 or terms["ba"][0]!=0 or terms["ca"][0]!=0:
if terms["aa"][0]<0 or terms["ba"][0]<0 or terms["ca"][0]<0:
posangles(terms["aa"][0],terms["ba"][0],terms["ca"][0])
print(a,b,c,aa,ba,ca)
if c+a+b==2:
cab(terms["c"][0],terms["a"][0],terms["b"][0])
else:
nomoreterms=True
def posangles(aa,ba,ca):
print("Posangles")
if aa<0:
aa=aa*(-1)
saveanswer("aa",aa)
elif ba<0:
ba=ba*(-1)
saveanswer("ba",ba)
elif ca<0:
ca=ca*(-1)
saveanswer("ca",ca)
def cab(c,a,b):
print("cab")
if c==0:
c=math.sqrt(a**2+b**2)
saveanswer("c",c)
elif a==0:
a=math.sqrt(c**2-b**2)
saveanswer("a", a)
elif b==0:
b=math.sqrt(c**2-a**2)
saveanswer("b",b)
main()
解决方案
所以问题是你的 eqfinder 功能。你传入a, b, c
使用 cab 查找缺失值,并保存答案。然后它返回到 eqfinder 并检查if a + b + c == 2
它是做什么的,因为您从未更新过a, b, c
变量。您可以进行许多修复以使此中断脱离 for 循环。这是一个(用>>>标记的添加行):
def eqfinder(a,b,c,aa,ba,ca):
"""runs through given terms to find any possible equations.
looks for possible equations by adding appended values"""
nomoreterms=False
while nomoreterms == False:
print(terms)
if terms["aa"][0]!=0 or terms["ba"][0]!=0 or terms["ca"][0]!=0:
if terms["aa"][0]<0 or terms["ba"][0]<0 or terms["ca"][0]<0:
posangles(terms["aa"][0],terms["ba"][0],terms["ca"][0])
print(a,b,c,aa,ba,ca)
if c+a+b==2:
cab(terms["c"][0],terms["a"][0],terms["b"][0])
>>> c, a, b = terms["c"][1],terms["a"][1],terms["b"][1]
else:
nomoreterms=True
推荐阅读
- javascript - 使用谷歌应用脚本登录网站时出现错误 404
- linux - 这可以在没有“bc”的情况下重写吗?环境中的大多数主机上都没有安装 bc
- spring-integration - (Spring 集成)如何使用 Reactive 消费者处理消息?
- react-native - 从 React Native 中的内容提供者获取数据
- html - 当用户离线时,使我们的网站可用的技术是什么?
- jquery - 根据值选择下拉项不起作用
- python-3.x - 在 Python 脚本中执行 Bash 命令
- php - 在不同页面上显示复选框输出
- python - 在子字符串上加入熊猫数据框
- javascript - 在对象内的数组内追加 - Watson Assistant