Использование функции для каждого элемента списка - PullRequest
3 голосов
/ 26 октября 2019

У меня есть список (decrypted_list), который содержит четыре целочисленных элемента, которые я должен расшифровать. Задача функции - расшифровать код, и его логика верна. После определения функции я хочу вызвать ее для каждого элемента decrypted_list, чтобы расшифровать ее элементы.

encrypted_list = [7, 1, 0, 2]

def decrypter(number):
    for number in encrypted_list:
        if (number + 4) < 10:
            return (number + 4)
        elif (number + 4) > 10:
            return (number + 4) % 10

decrypted_list = [decrypter(x) for x in encrypted_list]

Однако вывод не соответствует ожиданиям:

Ожидаемый: [1, 5, 4, 6]
Фактический: [1, 1, 1, 1]

Пожалуйста, помогите! Я новичок в Python. :)

Ответы [ 3 ]

3 голосов
/ 26 октября 2019

Нет смысла перебирать encrypted_list в вашей функции decrypter. Эта функция должна просто смотреть на аргумент number - ей не нужно знать о переменной encrypted_list.

Сама операция цикла должна выполняться только в вашем понимании списка ([decrypter(x) for x in encrypted_list]).

Измените свою функцию на следующую, и все будет в порядке:

def decrypter(number):
  if (number + 4) < 10:
      return (number + 4)
  elif (number + 4) > 10:
      return (number + 4) % 10
2 голосов
/ 26 октября 2019

Другие уже указали на проблему в вашем коде. Я хотел бы указать на избыточность в вашей функции. Это даст тот же результат: decrypted_list = [(x + 4) % 10 for x in encrypted_list]. Или, если вы хотите иметь в функции:

def decrypter(number):
    return (number + 4) % 10

decrypted_list = [decrypter(x) for x in encrypted_list]

С x % 10 == x если x < 10.

2 голосов
/ 26 октября 2019

Ваша функция должна выглядеть следующим образом:

def decrypter(number):
    if (number + 4) < 10:
        return (number + 4)
    elif (number + 4) > 10:
        return (number + 4) % 10

Вы не должны использовать цикл for здесь, потому что вы собираетесь использовать эту функцию для каждого элемента списка в последней строке вашего кода:

decrypted_list = [decrypter(x) for x in encrypted_list]

Как вы сказали, эта функция расшифровывает только один номер, поэтому ей не нужно знать весь список. encrypted_list должен не появляться в этой функции.

Добавление этого значения для цикла in приведет к изменению поведения функции - независимо от того, какое число вы передадите, оно только расшифрует число 1потому что это первый элемент списка. Цикл for на самом деле не проходит по списку, потому что он нажимает return на первой итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...