Слишком много логических выражений в операторе if, как это исправить?

#python #loops

#python #циклы

Вопрос:

Я пытаюсь выполнить цикл и удвоить число, пока в нем не появятся все цифры 0-9, это работает, но мой оператор if содержит много логических выражений и выглядит уродливо, я пытался использовать if (‘0123456789’ в first_num), но не работает… У кого-нибудь есть идея, как сделать оператор if более красивым?

     all_numbers = '0123456789'
    first_num = int(input("Enter a number you want to multiply: "))
    second_num = int(input("Enter how many attempts you want to make: "))
    count = 0

    while(second_num != 0):
        second_num = second_num - 1
        if('0' in str(first_num) and '1' in str(first_num) and 
        '2' in str(first_num) and '3' in str(first_num) and 
        '4' in str(first_num) and '5' in str(first_num) and 
        '6' in str(first_num) and '7' in str(first_num) and 
        '8' in str(first_num) and '9' in str(first_num)):
            break
        first_num = first_num * 2
        count = count   1

    print(str(count))
  

Комментарии:

1. Не имеет отношения к вашей проблеме, но зачем сначала преобразовывать входные данные в int , а затем преобразовывать в str для условия? Почему бы не сохранить входные данные в виде строки, а затем преобразовать в int , когда вам нужно значение в виде целого числа?

2. Не могли бы вы написать пример ввода и пример вывода, пожалуйста?

3. Хороший момент, я их изменю. Я просто ввел int для ввода по привычке

4. пример ввода: first_num = 1 и second_num = 1000. Вывод должен быть 68

Ответ №1:

Сделайте set из цифр чисел и сравните их:

 all_numbers = set("0123456789")
...
if all_numbers == set(str(first_num)):
    break
  

Ответ №2:

 all_numbers = '0123456789'
first_num = int(input("Enter a number you want to multiply: "))
second_num = int(input("Enter how many attempts you want to make: "))
count = 0
#Loop thorough the 0 to 9 and check 
#Please fix the indentation as I am writing it directly 


while(second_num != 0):
    second_num = second_num - 1
    flag = 0
    for i in range(10):
        if str(i) not in str(first_num):
            flag=1
            break
    if flag==0:
        break



    first_num = first_num * 2
    count = count   1

print(str(count))