Немного не работает код, просто залагивает при определенном вводе
Такая проблема в этом коде "Проверка гипотезы Коллатца"
- Когда вводим начало отрезка и пробел для конца отрезка - все норм"
- Когда не вводим начало отрезка и вводим конец - не работает, он просто умирает
- Когда не вводим ни начало, ни конец - не работает, он просто умирает
- Когда вводим и начало и конец - все работает ИТОГ; он умирает, когда я не ввожу начало, то есть по умолчанию он 0 Помогите это решить.
import sys
def generation(a, b):
'''Основная функция'''
if b is None:
i = a
while True:
step = 0
current_number = i
while current_number != 1:
if current_number % 2 == 0:
current_number = current_number // 2
else:
current_number = 3 * current_number - 1
step += 1
if step > 1000:
step = None
break
yield f"Число {i} - {step} шагов" if step is not None\
else f"Число {i} - {step}"
i += 1
else:
for i in range(a, b):
step = 0
current_number = i
while current_number != 1:
if current_number % 2 == 0:
current_number = current_number // 2
else:
current_number = 3 * current_number - 1
step += 1
if step > 1000:
step = None
break
yield f"Число {i} - {step} шагов" if step is not None \
else f"Число {i} - {step}"
def gipotese_kollatca():
'''Меню'''
while True:
print("Введите числа, или нажмите пробел и Enter для \
установки значений по умолчанию:")
n = input("Введите начало: ")
while (n != " " and not n.isdigit()):
print("Введены некорректные данные")
n = input("Введите начало: ")
m = input("Введите конец: ")
while (m != " " and not m.isdigit()):
print("Введены некорректные данные")
m = input("Введите конец: ")
if n>=m and n.isdigit() and m.isdigit():
print("Конец отрезка должен быть больше начала, некорретно")
if n == " " and m == " ":
a = 0
b = None
elif n == " " and m.isdigit():
a = 0
b = int(m)
elif m == " " and n.isdigit():
a = int(n)
b = None
else:
a = int(n)
b = int(m)
flag_1 = False
for i in generation(a, b):
print(i)
try:
print("1 - Продолжит вывод")
print("2 - Вернётся к выбору отрезка")
print("3 - Закончит программу")
cmd1 = input("")
if cmd1 in ["2", "3"]:
if cmd1 == "3":
sys.exit()
flag_1 = True
break
if cmd1 != "1":
raise ValueError
except ValueError:
print("Неверный ввод")
if not flag_1:
break
def main():
'''Конец'''
while True:
gipotese_kollatca()
print("Заданный вами отрезок закончился\n"
"Хотите продолжить? Если да, нажмите 0\n"
"Хотите завершить программу? Если да, нажмите 9\n")
cmd_2 = input()
match cmd_2:
case '9':
print("Работа программы завершена")
break
case '0':
continue
case _:
print("Введите корректные данные")
if __name__ == "__main__":
main()