【发布时间】:2021-12-17 07:54:25
【问题描述】:
正在做一个家庭作业,我必须编写三个函数来创建一个简单的二十一点游戏。
- 第一个函数
card_to_value接收一个表示卡片的 str,该函数返回每张卡片的 int 值,“A”仅返回 11。 - 第二个函数计算给定手牌的硬分,其中“A”为 11,无论手牌中有多少 A。
- 第三个函数计算软分数,其中第一个“A” 手中是 11,但所有后续的 A 都值 1,例如 手“AAA”应该在软评分函数中返回 13,但在 硬分功能。
我的代码目前适用于前两个 功能,但不会为软分数返回正确的值 功能。
def card_to_value(card=''):
card_list=['2','3','4','5','6','7','8','9','T','J','Q','K','A']
while card in list(card_list):
if card in card_list[8:12]:
card=10
return card
if card in card_list[12:]:
card=1
return card
if card == '2':
card=2
return card
if card == '3':
card=3
return card
if card == '4':
card=4
return card
if card == '5':
card=5
return card
if card == '6':
card=6
return card
if card == '7':
card=7
return card
if card == '8':
card=8
return card
if card == '9':
card=9
return card
def hard_score(hand):
h = list(hand)
total=0
for each in h:
total=total+card_to_value(each)
return total
def soft_score(hand):
ace_found=False
h = list(hand)
total = 0
for each in h:
total = total + card_to_value(each)
if each == 'A':
ace_found=True
elif ace_found == True:
total += 1
else: total += 11
return total
【问题讨论】:
-
拿纸和铅笔,写下您的 soft_score 将计算的值。你会很快看到你的问题。
-
或者(甚至更好)学习如何使用调试器。你可以从这里开始:jetbrains.com/help/pycharm/part-1-debugging-python-code.html
-
在
card_to_value中不需要while循环。 -
而且没有必要在列表中调用
list。return card不应该出现在每个if语句中,而应该出现在这个级联的末尾。第一个之后的每个ifs 都应该是elif。当然,如果大多数值都是硬编码的,那么使用列表的方法很奇怪。
标签: python for-loop boolean blackjack