Функция Python заканчивается в зависшей программе - PullRequest
0 голосов
/ 03 марта 2019

Я очень плохо знаком с программированием и питоном.Я пытаюсь использовать этот код:

def show_cards(hand):
    for c in hand:
        b = "[" + c + "]"
        hand.append(b)


a = ["a","b","c","d"]

show_cards(a)

print(a)

однако всякий раз, когда я делаю это, программа просто зависает.Я подумал, может быть, это был мой редактор (pycharm), но я попытался запустить его только в терминале, и это тот же результат.

На самом деле, я должен отметить, что в pycharm я получаю ошибку прерывания клавиатуры, котораямигает на секунду, затем уходит.Я не получаю это в терминале.

Я пытался просто записать это в цикл for и отказаться от функции, но это та же проблема.

Я не вижу ничего, чтоможет вызвать это, и я не получаю ошибок, просто зависшая программа.

Любая помощь приветствуется!

Кроме того, я уверен, что есть более простой способ написать это, так что нажмитеправильное направление тоже было бы здорово !!

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

список. append (x) добавляет элемент 'x' в конец списка.Ваш код перебирает список «вручную», но каждый раз, когда это происходит, он добавляет новый элемент в конец списка.Таким образом, список никогда не закончится, как и ваш for цикл.

Что касается более простого способа написать это, это зависит от того, чего вы пытаетесь достичь.Если вам нужен список с одинаковыми элементами в квадратных скобках, вы можете попробовать что-то вроде этого:

def show_cards(hand):
    new_list = []
    for c in hand:
        b = "[" + c + "]"
        new_list.append(b)
    return(new_list)

return () позволяетфункция для создания нового списка, который затем можно назначить переменной a следующим образом:

a = show_cards(a)

В качестве альтернативы, вы можете изменить элементы в своем списке a напрямую, без вызова отдельной функции, используя перечислить () .Функция enumerate() возвращает список кортежей, каждый из которых содержит индекс элемента в последнем (начиная с 0, индекс первого элемента) и его значение.Итак, enumerate(a) возвращает:

[(0, "a"), (1, "b"), (2, "c"), (3, "d"), (4, "e")]

Это означает, что вы можете заменить каждый из элементов в вашем списке a следующим образом:

for index, value in enumerate(a):
    a[index] = "[" + value + "]"

И затем значение списка a должно быть:

["[a]", "[b]", "[c]", "[d]", "[e]"]

Если это не то, что вы хотели, дайте нам знать.

0 голосов
/ 03 марта 2019

Вы создаете бесконечный цикл, добавляя к циклу hand.

Попробуйте что-то вроде этого, чтобы напечатать руку со скобками:

def show_cards(hand):
    for c in hand:
        print("[" + c + "]")

Вы также можете добавить кстроку и верните ее, если хотите.

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