为什么我的python函数sum_points总是返回相同的结果?
为什么我的程序总是输出相同的结果?(5). 通过功能为什么我的python函数sum_points总是返回相同的结果?,python,python-3.x,Python,Python 3.x,为什么我的程序总是输出相同的结果?(5). 通过功能sum_points我尝试对积分进行求和,以检查球员的积分是否大于21,以检查他是否仍然安全或是否丢失 我不知道为什么,但是我总是得到5作为函数的输出sum_points,即使它应该对faces数组索引处的值求和,因此2张拾取的卡的值之和 随机导入 卡值=[2,3,4,5,6,7,8,9,10,11] 套装=[“黑桃”、“梅花”、“红心”、“钻石”] #2 3 4 5 6 7 8 9 10 J Q K A 面=[2,3,4,5,6,7,8,9,
sum_points
我尝试对积分进行求和,以检查球员的积分是否大于21,以检查他是否仍然安全或是否丢失
我不知道为什么,但是我总是得到5作为函数的输出sum_points
,即使它应该对faces数组索引处的值求和,因此2张拾取的卡的值之和
随机导入
卡值=[2,3,4,5,6,7,8,9,10,11]
套装=[“黑桃”、“梅花”、“红心”、“钻石”]
#2 3 4 5 6 7 8 9 10 J Q K A
面=[2,3,4,5,6,7,8,9,10,10,10,10,11]
面显示=[“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“J”、“Q”、“K”、“A”]
班级卡:
定义初始(自我、面部、套装):
脸
西服
def create_deck():
卡片=[]
对于范围(2)内的x:
对于套装:
对于“面中的面”\u显示:
c=卡片(正面、套装)
卡片。附加(c)
随机。洗牌(牌)
回程卡
def显示卡(卡列表):
对于卡片列表中的卡片:
打印(card.face+“\t”+card.suit)
def总和积分(卡):
tot=0
对于卡片中的卡片:
tot+=面[卡片索引(卡片)]
返回总数
def play_hand():
卡片=创建卡片组()
经销商卡=[]
玩家卡=[]
#发初始卡
经销商卡。附加(卡。pop(0))
经销商卡。附加(卡。pop(0))
玩家卡。附加(卡。弹出(0))
玩家卡。附加(卡。弹出(0))
经销商积分=总积分(经销商卡)
牌手得分=总分(牌手卡)
如果名称=“\uuuuu main\uuuuuuuu”:
卡片=创建卡片组()
c=[]
c、 附加(cards.pop(0))
c、 附加(cards.pop(0))
显示卡(c)
打印(总分(c))
您总是在抓取卡2和卡3。您没有在create_deck()函数中随机选择卡片。问题是您实际上是从只有这两张卡片的列表中获取卡片
当您调用sum_points
,c=[cards[0],cards[1]
。在sum_points
内部,您请求的是作为参数收到的相同列表中的元素的索引;因此,索引将是0
和1
例如:
sum_points(cards=[1,2]):
tot += faces[cards[indexOf(1)]] # This is faces[0]!!!
tot += faces[cards[indexOf(2)]] # This is faces[1]!!!
希望有帮助!您的create_deck()
函数不是随机的,它总是在范围(2)
中生成数字0,1
,因此选择2和3,因为它们是您卡片列表的索引0
和1
它会在之后洗牌,但是当你把它们加在一起时,这不会改变任何事情
tot += faces[cards.index(card)]
在这里,您在一个数组上迭代,然后访问
卡。index(card)
是数组中卡的索引,在您的情况下,因为有两张卡,所以第一张卡总是0,第二张卡总是1。因此,您总是访问面[0]和面[1]将它们相加,得到2+3=5。是的,正如其他人所说,tot+=faces[cards.index(card)]
只返回传递给sum\u points
函数的卡片列表的索引
有了你的代码,我想你想要的是这样的东西
tot += faces[faces_display.index(card.face)]
更好的是,我认为有一个包含面部显示和面部值的字典会更容易,比如face_dict={“J”:10,“Q”:10}
等等,所以您可以使用
tot += face_dict.get(card.face)
在我看来,这更具可读性。现在似乎是学习som常见调试技术的好时机。例如,使用
print
调用打印算法中的值,以查看所有内容都按照预期进行了更新。或者,为什么不学习如何使用实际的调试器逐个语句地执行代码语句呢监测变量及其值。实际上,我认为我爱你。你不仅给我提供了答案,而且还提出了一个很好的解决方案。实际上,你也可以将值添加到卡对象中。