Python 用零除浮点数

Python 用零除浮点数,python,divide-by-zero,Python,Divide By Zero,我是一个真正的业余程序员,试图自学python。这段代码大部分是谷歌搜索的。我不知道我在做什么 我得到了错误“浮点数除以零” 我试着做一个倒计时解算器。倒计时是一个游戏节目,我一直遵循的规则是 表达式是如何生成的:运算符上的数字和函数乘积的所有不同排列都完成了。 然后将它们排列成有意义的后缀表达式。 对于数字4、4和10,这些是可能的表达式 [['10', '4', '+', '4', '+'], ['10', '4', '4', '+', '+']] [['10', '4', '+', '4'

我是一个真正的业余程序员,试图自学python。这段代码大部分是谷歌搜索的。我不知道我在做什么

我得到了错误“浮点数除以零”

我试着做一个倒计时解算器。倒计时是一个游戏节目,我一直遵循的规则是

表达式是如何生成的:运算符上的数字和函数乘积的所有不同排列都完成了。 然后将它们排列成有意义的后缀表达式。 对于数字4、4和10,这些是可能的表达式

[['10', '4', '+', '4', '+'], ['10', '4', '4', '+', '+']]
[['10', '4', '+', '4', '-'], ['10', '4', '4', '+', '-']]
[['10', '4', '+', '4', '*'], ['10', '4', '4', '+', '*']]
[['10', '4', '+', '4', '/'], ['10', '4', '4', '+', '/']]
[['10', '4', '-', '4', '+'], ['10', '4', '4', '-', '+']]
[['10', '4', '-', '4', '-'], ['10', '4', '4', '-', '-']]
[['10', '4', '-', '4', '*'], ['10', '4', '4', '-', '*']]
[['10', '4', '-', '4', '/'], ['10', '4', '4', '-', '/']]
[['10', '4', '*', '4', '+'], ['10', '4', '4', '*', '+']]
[['10', '4', '*', '4', '-'], ['10', '4', '4', '*', '-']]
[['10', '4', '*', '4', '*'], ['10', '4', '4', '*', '*']]
[['10', '4', '*', '4', '/'], ['10', '4', '4', '*', '/']]
[['10', '4', '/', '4', '+'], ['10', '4', '4', '/', '+']]
[['10', '4', '/', '4', '-'], ['10', '4', '4', '/', '-']]
[['10', '4', '/', '4', '*'], ['10', '4', '4', '/', '*']]
[['10', '4', '/', '4', '/'], ['10', '4', '4', '/', '/']]
[['4', '10', '+', '4', '+'], ['4', '10', '4', '+', '+']]
[['4', '10', '+', '4', '-'], ['4', '10', '4', '+', '-']]
[['4', '10', '+', '4', '*'], ['4', '10', '4', '+', '*']]
[['4', '10', '+', '4', '/'], ['4', '10', '4', '+', '/']]
[['4', '10', '-', '4', '+'], ['4', '10', '4', '-', '+']]
[['4', '10', '-', '4', '-'], ['4', '10', '4', '-', '-']]
[['4', '10', '-', '4', '*'], ['4', '10', '4', '-', '*']]
[['4', '10', '-', '4', '/'], ['4', '10', '4', '-', '/']]
[['4', '10', '*', '4', '+'], ['4', '10', '4', '*', '+']]
[['4', '10', '*', '4', '-'], ['4', '10', '4', '*', '-']]
[['4', '10', '*', '4', '*'], ['4', '10', '4', '*', '*']]
[['4', '10', '*', '4', '/'], ['4', '10', '4', '*', '/']]
[['4', '10', '/', '4', '+'], ['4', '10', '4', '/', '+']]
[['4', '10', '/', '4', '-'], ['4', '10', '4', '/', '-']]
[['4', '10', '/', '4', '*'], ['4', '10', '4', '/', '*']]
[['4', '10', '/', '4', '/'], ['4', '10', '4', '/', '/']]
[['4', '4', '+', '10', '+'], ['4', '4', '10', '+', '+']]
[['4', '4', '+', '10', '-'], ['4', '4', '10', '+', '-']]
[['4', '4', '+', '10', '*'], ['4', '4', '10', '+', '*']]
[['4', '4', '+', '10', '/'], ['4', '4', '10', '+', '/']]
[['4', '4', '-', '10', '+'], ['4', '4', '10', '-', '+']]
[['4', '4', '-', '10', '-'], ['4', '4', '10', '-', '-']]
[['4', '4', '-', '10', '*'], ['4', '4', '10', '-', '*']]
[['4', '4', '-', '10', '/'], ['4', '4', '10', '-', '/']]
[['4', '4', '*', '10', '+'], ['4', '4', '10', '*', '+']]
[['4', '4', '*', '10', '-'], ['4', '4', '10', '*', '-']]
[['4', '4', '*', '10', '*'], ['4', '4', '10', '*', '*']]
[['4', '4', '*', '10', '/'], ['4', '4', '10', '*', '/']]
[['4', '4', '/', '10', '+'], ['4', '4', '10', '/', '+']]
[['4', '4', '/', '10', '-'], ['4', '4', '10', '/', '-']]
[['4', '4', '/', '10', '*'], ['4', '4', '10', '/', '*']]
[['4', '4', '/', '10', '/'], ['4', '4', '10', '/', '/']]

帮帮我堆栈交换领主

print_numb=['4','4','10','5']
target=220

operators=['+', '-','*','/']

Example_Expression=['10','5','4','4','-','/','+'] #Exact form expressions are input

#Check if Solutions follow Rules of Countdown or Divide by Zero
def check_divZero(Sign, Num): #problem area probably
    if Sign =='/' and Num == '0':
        return False

def check_rules(Sol):   
    if Sol < 0:
        return False
    elif isinstance(Sol, float) == True and Sol.is_integer() == False:  
        return False    


#Function to Calculate Postfix and Check Target
def postfix_eval (Some_Expression, Some_Target):
    stack=[]
    for i in Some_Expression:
        if i not in operators:
            stack.append(i)
        elif i in operators:
            num2=stack.pop()
            num1=stack.pop()
            exp=num1+i+num2
            if check_divZero(i, num2) == False:
                break
            sol=eval(exp)
            if check_rules(sol) == False:
                break
            stack.append(str(sol))
        if float(stack[-1]) == Some_Target:
            return Some_Expression

postfix_eval(Example_Expression, target) #this does not give an error. IDK what kind of expressions do.


print_numb=['4','4','10','5']
目标=220
运算符=['+'、'-'、'*'、'/']
示例_表达式=['10'、'5'、'4'、'4'、'-'、'/'、'+']#输入精确形式的表达式
#检查解决方案是否遵循倒计时或除零规则
def check_divZero(符号,数字):#可能是问题区域
如果符号='/'和数值='0':
返回错误
def检查规则(Sol):
如果Sol<0:
返回错误
elif isinstance(Sol,float)=True和Sol.is_integer()==False:
返回错误
#函数计算后缀并检查目标
def后缀值(一些表达式,一些目标):
堆栈=[]
对于某些表达式中的i:
如果我不在操作员中:
stack.append(i)
操作员中的elif i:
num2=stack.pop()
num1=stack.pop()
exp=num1+i+num2
如果检查_divZero(i,num2)=False:
打破
溶胶=蒸发量(经验值)
如果检查规则(sol)=False:
打破
stack.append(str(sol))
如果浮点(堆栈[-1])==某个\u目标:
返回一些表达式
postfix_eval(示例_表达式,目标)#这不会给出错误。IDK是什么样的表达。

问题在于,有时Num变量为“0.0”,而您只针对“0”情况进行保护。在字符串中,“0”和“0.0”不相等。因此,最好的方法是将check_divZero方法更改为:

def check_divZero(Sign, Num):
    if Sign == '/' and float(Num) == 0:  # checks for zeroes.
        return False

错误发生在哪里?您能否将代码简化为只发布所涉及的内容?您可以检查
'/'
'0'
。那么
'/'
'0.0'
呢?如果您想调试这个,只需将
eval
放在
try
中即可
except
并在出现异常时打印表达式。另外,不要使用
eval
,使用
ast.literal\u eval
,这样更安全。@TomKarzes谢谢。这是一个很大的帮助。