如果我们把本节所有的函数写在一个模块中并保存,运行这个模块,那么,有可能,程序就可以运行了:
============= RESTART: C:\Users\MSI\Desktop\BlackJ\functions.py ============= >>> blackjack() 庄家拿到了:['♣2', '♡5'] 你拿到了:['♢3', '♣K'] 再抽一张请输入h,停牌请输入s:h 你拿到了: ♣6 再抽一张请输入h,停牌请输入s:s 庄家拿到了: ♢7 庄家拿到了: ♣8 庄家的总点数为:22。庄家爆啦!
赢了耶…
不过更有可能的是。。。你的程序报错了。。。你可以根据报错的提示英文,自己寻找报错的原因,也可以把程序报错粘贴到评论区和大家一起讨论。细节上的错误,比如变量名是不是拼错了,需要大家自己去检查。本节,我们聊聊部分问题:
- 缩进与程序逻辑
有的时候,虽然程序运行后并没有报错,但是整个程序的逻辑却没有按照我们预想的进行,这种情况就有可能是缩进错误造成的。
观察整个21点游戏程序,几乎每行代码都有缩进。例如,在上一节的主函数中,我们写过一段函数来询问玩家是否要再抽一张牌,还是停牌。假设我错误地将以下最后一行的缩进提前,会发生什么呢:
while answer == 'h': deal_card(deck, user) print('\n你拿到了:', user[-1]) if evaluate(user) > 21: print('\n你的总点数为:', evaluate(user), '。爆掉啦!', sep ='') return answer = input('\n再抽一张请输入h,停牌请输入s:')
嗯哼,while变成了一个无限循环——变量answer在while循环中不会发生改变,因此永远满足answer == ‘h’的条件。
假设除此以外的代码都写对了,运行模块时,并不会报错,而是一旦玩家选择了“再抽一张”,程序将会给玩家不停地发牌给玩家直到玩家爆牌为止:
>>> blackjack() 庄家拿到了:['♢4', '♡3'] 你拿到了:['♣J', '♠10'] 再抽一张请输入h,停牌请输入s:h #只输入了一次h 你拿到了: ♡A #被发了两张牌 你拿到了: ♠7 你的总点数为:28。爆掉啦!