Python函数以挂起程序结尾

时间:2019-03-03 01:58:03

标签: python pycharm

我对编程和python很陌生。我正在尝试使用以下代码:

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 :(得分:4)

列表。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)

或者,您可以使用 enumerate()直接更改列表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]"]

如果那不是您想要的,请告诉我们。

答案 1 :(得分:0)

您正在通过在循环内附加到hand来创建无限循环。

尝试类似这样的方法,以便在球拍上打印手:

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

如果需要,您还可以附加到字符串并返回它。