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

在__init__方法中获取用户输入时实例变量为何未定义?

问题解决与代码修正

核心错误原因

  • 创建Player实例时传入的name、money等变量从未定义,且你的设计是在__init__里获取用户输入,完全不需要传这些参数,属于逻辑冗余导致的错误。
  • 直接调用__init__()报错是因为它是类的实例方法,必须通过类实例或类内部调用,全局环境中不存在这个方法。

代码中的其他问题

  • 错误使用cls:cls是类方法的参数,实例方法里要访问实例属性应该用self,比如cls.name要改成self.name。
  • 变量赋值混乱:多次覆盖同一属性(比如先self.name=name再立刻赋值为input),还有未定义的变量(比如self.busted=busted里的busted)。
  • 卡片抽取错误:random.sample(cards,1)返回的是列表,如果你要单个卡片元素,应该用random.choice(cards)。

修正后的完整代码

import random

players = []
player_names = []
cards = [2, 3, 4, 5, 6, 7, 8, 9, 'kings', 'queens', 'aces']

class Player:
    def __init__(self):
        # 获取唯一用户名
        while True:
            self.name = input('请输入你的名字: ')
            if self.name not in player_names:
                player_names.append(self.name)
                break
            print('用户名已被占用,请重新输入')
        
        # 初始化资金,支持用户输入或默认值
        self.money = float(input('请输入初始资金: ') or 1000)
        # 获取合法的下注金额
        while True:
            try:
                self.bet = float(input('请输入下注金额: '))
                if 0 < self.bet <= self.money:
                    break
                print(f'下注金额不能超过你的资金({self.money})或小于等于0,请重新输入')
            except ValueError:
                print('请输入有效的数字')
        
        # 初始化手牌和爆牌状态
        self.cardl = [random.choice(cards), random.choice(cards)]
        self.busted = False

# 创建玩家实例,无需传参,输入逻辑已在__init__内部实现
player = Player()
players.append(player)
print(f'欢迎你,{player.name}')

# Dealer类单独定义,与Player角色逻辑分离
class Dealer:
    def __init__(self):
        self.cardl = [random.choice(cards), random.choice(cards)]
        self.busted = False

关键修正点说明

  • 移除__init__中冗余参数,实例化时直接调用Player()即可,输入逻辑完全内聚在方法内部。
  • 完善用户名唯一性校验,确保不会重复。
  • 增加下注金额合法性校验,拦截无效输入和超额下注。
  • 修正卡片抽取方式,用random.choice获取单个卡片元素,避免嵌套列表问题。
  • 分离Dealer类,因为Dealer与Player的角色逻辑不同,无需继承。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:30:23