You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写Blackjack游戏:如何避免为每位玩家重复代码?

首先先修正你代码里的一个小bug:list.remove()和list.append()都是原地修改列表,返回值是None,所以你原来写的player_cards = player_cards.remove(11)会把player_cards变成None,后续操作会报错,得改成直接调用方法、不用赋值。

接下来解决重复代码的问题,给你几个实用的思路:

思路1:封装成工具函数(最推荐)

把处理A牌(11转1)的逻辑单独写成一个函数,需要处理哪个牌组就传哪个进去,完全消除重复代码,还方便后续复用。

示例代码:

import random

cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]

def deal_card():
    return random.sample(cards, 2)

# 封装处理A牌的函数
def adjust_for_ace(cards):
    # 用while处理多张A的极端情况(比如两张11总和22,需要转一张为1)
    while 11 in cards and sum(cards) > 21:
        cards.remove(11)
        cards.append(1)

player_cards = deal_card()
computer_cards = deal_card()

# 调用函数处理两个牌组
adjust_for_ace(player_cards)
adjust_for_ace(computer_cards)

思路2:用列表存储多牌组,循环处理

如果后续可能扩展多人游戏,可以把所有玩家的牌组放到一个列表里,循环遍历处理:

import random

cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]

def deal_card():
    return random.sample(cards, 2)

def adjust_for_ace(cards):
    while 11 in cards and sum(cards) > 21:
        cards.remove(11)
        cards.append(1)

# 将所有玩家牌组存入一个列表
all_players = [deal_card(), deal_card()]  # 索引0是玩家,索引1是电脑

# 循环处理每个牌组
for cards in all_players:
    adjust_for_ace(cards)

# 取出处理后的牌组
player_cards = all_players[0]
computer_cards = all_players[1]

思路3:面向对象(进阶)

如果游戏逻辑越来越复杂,用类封装玩家的属性和行为会让代码结构更清晰:

import random

cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]

class Player:
    def __init__(self):
        self.cards = random.sample(cards, 2)
    
    def adjust_for_ace(self):
        while 11 in self.cards and sum(self.cards) > 21:
            self.cards.remove(11)
            self.cards.append(1)
    
    def get_score(self):
        self.adjust_for_ace()
        return sum(self.cards)

# 创建玩家和电脑实例
player = Player()
computer = Player()

# 获取分数时自动处理A牌
player_score = player.get_score()
computer_score = computer.get_score()

至于你提到的map、zip,这里完全用不上——这两个工具适合对可迭代对象做批量元素操作,而直接用函数调用或循环处理牌组的逻辑更直观。

内容的提问来源于stack exchange,提问作者Foothill_trudger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:30:51