@max_1O

Как предотвратить бесконечный/долгий цикл/рекурсия при решении математической задачи в python?

Здравствуйте. Пишу калькулятор в python tkinter. Когда нужно возводить число в большие степени, вроде таких - 5^55555 программа как я понимаю, уйдет в долгую цикл или рекурсию и виснет. Как предотвратит это? Заранее спасибо. Скрипт условия с возведением в степень закреплю ниже, если понадобится. Логика программы таков: юзер сперва набирает число с баттонов программы, потом выбирает операнд(+, -, *, /, ^) потом другое число и наконец знак равенства чтобы увидеть результат

elif operation == "^":
        # command of power operand button
        result = int(first_num ** last_num)
        # there are 3 lbls, 1st on top for first num, 2nd on middle for operand, 3rd on bottom for last num
        # here when user push "=" button, 2nd and 3rd lbls will be cleared, instead of 1st num on 1st lbl there will be result
        operation_label.configure(text="")
        last_num_label.configure(text="")
        result_text = f"{first_num} ^ {last_num} = {result}"
        index = str(result_text).index("=") # this var will be used to adapt nums and symbols
        if len(result_text) > 32 and len(result_text) < 64: # lbls width is 33, height is 3, this clause for 2 lined result_text
            result_text = result_text[:index] + "\n" + result_text[index:]
        elif len(result_text) > 64 and len(result_text) < 96: # this for 3 lined result_text
            result_text = str(result_text[:index]) + "\n" + str(result_text[index:index+4]) + "e" + str(len(result_text[index+4:]))
        first_num_label.configure(text=str(result_text)) # print result on first lbl
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dmshar
Не понимаю, что у вас не работает. Пишем элементарный скрипт:

n = 5**55555
print(n)
ns=str(n)
len(ns)

Код выполняется практически мгновенно.
Чему равняется полученный результат я тут писать не буду, но вот последний вывод, который говорит, сколько цифр в вашем числе приведу: 38832.
Так что надо не ошибку предотвращать, а просто ограничивать числа, с которыми вы работаете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы