После var = int(input() не работает if var == 0 or var == str:

Пытаюсь создать программку, которая высчитывает количество бусинок, которые нужно достать, чтобы цвета повторились. Хочу запретить выбирать 0 как количество цветов (т.к. это нелогично) и запретить писать любые другие символы, кроме чисел, потому что программа просто ломается. Так же хотел бы получить советы по более удобному оформлению коду. Программирую я пару дней... Я пробовал через typick = type(colors) == str if typick == False: и через if сolors == 0 or colors == str: но ничего не вышло и всё после if игнорировалось и программа перезапускалась, а когда убирал int от input, то вообще ничего не работало. Очень надеюсь на вашу помощь :(

    # Минимальное число бусин, которое нужно достать, чтобы цвета повторились при производном количестве цветов

def businki():  # задаём функцию businki и вкладываем в неё наш калькулятор
    print('Введите количество цветов:')
    colors = int(input('> '))
    result = colors + 1
    posled = result % 10  # сокращает число до последней цифры
    result = str(result)
    if posled == 1:
        print('Нужно достать ' + result + ' бусинку, чтобы цвета повторились')
    elif posled == 2 or posled == 3 or posled == 4:
        print('Нужно достать ' + result + ' бусинки, чтобы цвета повторились')
    else:
        print('Нужно достать ' + result + ' бусинок, чтобы цвета повторились')


while True:
    businki()

Ответы (2 шт):

Автор решения: GrAnd

Просто сделать проверку введённого значения, когда оно ещё в строковом типе. И если строка состоит из цифр, то преобразовать её в число и проверять уже на допустимость числа. Всё это организовать в цикле, который будет переспрашивать до тех пор, пока ввод не будет удовлетворять всем условиям.

    print('Введите количество цветов:')
    while True:
        colors = input('> ')
        if not colors.isdigit():
            print('Количество должно быть ЧИСЛОМ! Повторите ввод.')
            continue
        colors = int(colors)
        if colors > 0:
            break
        print('Количество должно быть БОЛЬШЕ НУЛЯ! Повторите ввод.')

    result = colors + 1
    ...
→ Ссылка
Автор решения: chesnock

Я решил проблему и улучшил код :)

def businki():  # задаём функцию businki и вкладываем в неё наш калькулятор
    while True:
        flag = True
        while flag:
            print('Введите количество цветов:')
            colors = input('> ')
            if not colors.isdigit() or int(colors) <= 0:
                print("Ошибка: Введите корректное число (целое и выше нуля).")
            else:
                flag = False
                colors = int(colors)
                result = colors + 1
                posled = result % 10  # сокращает число до последней цифры
                result = str(result)
                if posled == 1 and result[-2:] != '11':
                    print(
                        f'Нужно достать {result} бусинку, чтобы цвета повторились')
                elif posled == 2 or posled == 3 or posled == 4:
                    print(
                        f'Нужно достать {result} бусинки, чтобы цвета повторились')
                elif result[-2:] == '11':
                    print(
                        f'Нужно достать {result} бусинок, чтобы цвета повторились')
                else:
                    print(
                        f'Нужно достать {result} бусинок, чтобы цвета повторились')


while True:
    businki()
→ Ссылка