【发布时间】:2021-12-31 02:38:32
【问题描述】:
我正在上在线 Python 课程,他们要求编写 Blackjack 游戏代码。
我在检查经销商手上的分数的功能上有问题。
我一步一步用“Thonny”检查它,似乎一直在工作,直到
如果 >= 17 为真。 “Thonny”向我展示了 if 语句的返回值,并且......这里发生了奇迹。
它直接跳到 else 块并打印(“为什么这会出现?”)与函数附加“卡片”一样多次。然后最底部的两个打印都给出:
import random
cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
dealer_hand = []
def value_check(hand):
card_sum = sum(hand)
return card_sum
def card_draw():
card = random.choice(cards)
return card
def dealer_val_check(hand):
value = value_check(hand)
if value >= 17:
return value
else:
hand.append(card_draw())
print(hand)
dealer_val_check(hand)
# return value
print("why is this showing up?")
dealer_hand = [1, 1]
dealer_value = dealer_val_check(dealer_hand)
print(type(dealer_value))
print(dealer_value)
【问题讨论】:
-
您能澄清一下问题所在吗?如果我取消注释
return value,它下面的print()语句将永远不会执行。 -
@BrokenBenchmark
print无关紧要。如果您取消注释return value,该函数将在添加之前返回初始列表的值。在这种情况下,值 = 2,因为列表dealer_hand = [1, 1]。但是上面一行是函数本身的递归调用,为什么它甚至会转到return value或print()?。为什么if value >= 17不刹车这个功能? :( -
这里的潜在误解——认为
returning 在递归函数中将结束所有堆栈中的调用,而不仅仅是最里面的调用——很常见,并且在我们的知识库中已经有很多重复项。那些重复的函数讨论了返回None的函数,但如果你真的阅读了它们的主体,令人困惑的是,外部调用不会返回最里面的return返回的东西——你在这里遇到的同样的问题。 -
...所以,正如链接问题的答案所描述的那样,您需要一个额外的
return(如return dealer_val_check(hand))来获取内部调用返回的东西,然后自己返回那个东西。 -
好吧。现在这是有道理的。你说的对。我在想 return 会结束所有的电话......它解释了很多。我是编码的开始,所以有很多东西要学习和理解。谢谢你的解释。干杯。
标签: python if-statement return