Циклы while с зависимыми операторами If в Python - PullRequest
0 голосов
/ 30 мая 2019

У меня есть программа, которая создает двоичные числа из числа 10, основанного на n.Я использую t в качестве счетчика для цикла while.

Я пытаюсь заполнить список выходными данными, поэтому n должно равняться t.Как я могу сделать это, не подрывая мой цикл while и операторы if?

keyList = []
binList = []
n = 0
i = 0
t = 0


while (t <= 255):
    ## 128
    if n < 128:
        binList.append(0)
        n = n

    elif n >= 128:
        binList.append(1)
        n = n - 128

    ## 64
    if n < 64:
        binList.append(0)
        n = n

    elif n >= 64:
        binList.append(1)
        n = n - 64

    ## 32
    if n < 32:
        binList.append(0)
        n = n

    elif n >= 32:
        binList.append(1)
        n = n - 32

    ## 16
    if n < 16:
        binList.append(0)
        n = n

    elif n >= 16:
        binList.append(1)
        n = n -16

    ## 8
    if n < 8:
        binList.append(0)
        n = n

    elif n >= 8:
        binList.append(1)
        n = n - 8

    ## 4
    if n < 4:
        binList.append(0)
        n = n

    elif n >= 4:
        binList.append(1)
        n = n - 4

    ## 2
    if n < 2:
        binList.append(0)
        n = n

    elif n >= 2:
        binList.append(1)
        n = n - 2

    ## 1
    if n < 1:
        binList.append(0)
        n = n

    elif n >= 1:
        binList.append(1)
        n = n - 1
    print(n)
    t = t + 1

В настоящее время я не могу получить n и t равными друг другу, не влияя на результат кода, гдеЯ получаю только 0.

1 Ответ

0 голосов
/ 30 мая 2019

Стиль петли, который у вас есть выше, не совсем питонический.for t in range(x) - это типичный способ перебора диапазона чисел.Вы фактически развернули цикл в серию очень повторяющихся операторов if, которые я свернул во внутренний список.n необходимо инициализировать для каждого значения t, и, наконец, я сделал следующий шаг, чтобы добавить двоичную строку в список ключей.

keyList = []
binList = []
n = 0
i = 0

value_list = [128, 64, 32, 16, 8, 4, 2, 1]
for t in range(255): # iterates through 0 to 255
    n = t
    binList = []
    for v in value_list: # iterates over list in order
        if n < v:
            bit = 0
        else:
            bit = 1
            n = n - v
        binList.append(bit)
    keyList.append("".join(map(str, binList)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...