Получение деления поплавка на ноль - PullRequest
0 голосов
/ 15 апреля 2020

Я действительно программист-любитель, пытающийся самостоятельно выучить 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.


1 Ответ

1 голос
/ 15 апреля 2020

Проблема заключалась в том, что иногда переменная 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
...