测试与错误排查

如果我们把本节所有的函数写在一个模块中并保存,运行这个模块,那么,有可能,程序就可以运行了:

============= 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。爆掉啦!

 

发表评论

邮箱地址不会被公开。 必填项已用*标注