【发布时间】:2016-06-27 02:01:41
【问题描述】:
在进行二十一点游戏模拟时,我在使用 for 循环时遇到了一些麻烦。函数new_game 模拟正在发的四张牌,而new_card 确保没有牌在游戏中重复。我创建了函数new game 的两个变体,想知道它们有何不同。
在版本 1 中,存在函数只返回 3 张卡片的情况,而版本 2 似乎按预期工作。
版本 1:
def new_game():
game=[];
for x in range(4):
n=new_card();
if n not in game:
game+=[n];
else:
new_game();
print(game);
return game
版本 2:
def new_game():
game=[];
for x in range(4):
n=new_card();
if n in game:
new_game();
print(game);
else:
game+=[n];
return game
【问题讨论】:
-
这里是函数
new_card供您参考。def new_card(): s=['s','c','d','h']; n=list(range(1,14)); return [random.choice(s),random.choice(n)]; -
不明白为什么
new_card()无法生成唯一卡时会递归调用new_game()。我认为代码应该调用new_card(),直到为循环迭代生成一个唯一的。你怎么看? -
好的,感谢您指出这一点。我的意思是说
new_game检查重复的卡片。当找到重复的卡片时,该功能重新开始。看起来new_game()有效,但您认为调用new_card()会更有效吗? -
是的,考虑一下如果您在列表中有 3 张卡片,并且您获得的第四张卡片已经出现在列表中,那么最好只搜索一张新卡片而不是重新开始。
-
这与您遇到的问题无关,但我想我会注意到 Python 语句末尾不需要分号。它们是允许的,主要是因为您偶尔想在一行中放置多个简单语句(通常用于从命令行使用
python -c运行的单行脚本),但是当您不使用它们时使用它们并不是一种好的风格需要。