Python函数以挂起程序结束

问题描述 投票:0回答:2

我是编程和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循环中写出它并放弃该函数,但这是同样的问题。

我没有看到任何导致这种情况的事情,我没有错误,只是一个挂起的程序。

任何帮助表示赞赏!

此外,我确信有一种更简单的方式来写这个,所以向正确的方向推进也会很棒!!

python pycharm
2个回答
4
投票

list.append(x)将项“x”添加到列表的末尾。您的代码遍历列表'hand',但每次执行此操作时,它会在列表末尾添加一个新项。因此,列表永远不会结束,所以你的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中的项目,而无需调用单独的函数。 enumerate()函数返回一个元组列表,每个元组包含最后一个项目的索引(从0开始,第一个项目的索引)及其值。所以enumerate(a)回归:

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

这意味着您可以像这样替换列表a中的每个项目:

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

然后list a的值应为:

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

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


0
投票

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

尝试这样的东西用括号打印手:

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

如果您愿意,也可以附加到字符串并返回。

© www.soinside.com 2019 - 2024. All rights reserved.