如何在python函数中添加自定义参数?

如何在python函数中添加自定义参数?,python,python-3.x,Python,Python 3.x,我的名字叫皮尤斯,我刚刚开始学习用python编写代码。现在我正在做一个项目。如果有人能帮助在函数中添加自定义参数,我将不胜感激。 我在下面提到我的代码和我面临的问题: class Chips (): def __init__ (self, total): while True: try: total = int(input("How many chips as total?: ?"))

我的名字叫皮尤斯,我刚刚开始学习用python编写代码。现在我正在做一个项目。如果有人能帮助在函数中添加自定义参数,我将不胜感激。 我在下面提到我的代码和我面临的问题:

class Chips ():
    def __init__ (self, total):

        while True:
            try:
                total = int(input("How many chips as total?: ?"))

            except:
                print("Please enter an integer")

            else: 
                break 

        self.total = total 
        self.bet = 0      

    def win_bet (self):
        self.total = self.total + self.bet   

    def loose_bet (self):
        self.total = self.total - self.bet  
但是,我可以设置total=100并可以运行游戏,但我希望用户能够输入他/她想要添加的总筹码

我希望while循环中的输入(总数)在运行游戏时作为参数。但我一直在犯这样的错误:

--
TypeError                                 Traceback (most recent call last)
<ipython-input-9-b1b7b1c195f7> in <module>()
    367 
    368     # Set up the Player's chips
--> 369     player_chips = Chips()  # remember the default value is 100
    370 
    371     # Prompt the Player for their bet:

TypeError: __init__() missing 1 required positional argument: 'total'
--
TypeError回溯(最近一次调用上次)
在()
367
368#设置玩家的筹码
-->369 player_chips=chips()#记住默认值是100
370
371#提示玩家下注:
TypeError:\uuuu init\uuuu()缺少1个必需的位置参数:“total”
请帮忙


谢谢你关注我的请求

您的类在其构造函数中接受一个参数,但您也可以从构造函数中的输入读取它

def __init__ (self):
我想你对你在这里想要达到的目标感到困惑

备选案文1:

如果代码的调用者(构建类的代码)可以在实例创建时修改并知道
total
,只需在构造函数调用中添加参数即可

total = 100
player_chips = Chips(total)
备选案文2:

如果您不能修改调用者(很可能是我读到的),那么这意味着您需要实际读取输入中的总数。从构造函数中删除参数

def __init__ (self):
而不是

def __init__(self, total):

您应该添加方法get_total_from_user并在构造函数中设置默认参数

class Chips ():
    def __init__ (self, total=None):
        self.total = self.get_total_from_user() if not total else total
        self.bet = 0      

    def win_bet (self):
        self.total = self.total + self.bet   

    def loose_bet (self):
        self.total = self.total - self.bet

    def get_total_from_user(self):
        while True:
            try:
                return int(input("How many chips as total?: ?"))

            except:
                print("Please enter an integer")

            else: 
                break 
它允许您从用户处获取总计

Chips()
也可以通过传递值进行设置

Chips(100)
在代码的底部-没有错误。您在交互式构造函数中重写了total的值,但是,嘿,您在发送它时承诺了“init

c = Chips()
如果您将签名更改为:

def __init__ (self, total):

总体而言,交互式构造函数似乎是一个非常糟糕的主意。

您需要将
total
传递给
Chips
Chips(total)
。不要在
\uuuu init\uuuu
中要求输入。相反,调用
int(input())
outside
Chips
并传递结果。另外,与使用except
else
子句不同,更好的方法是将分号放在可能是except
total=int的行之后(…
在你的情况下。@PatrickHaugh谢谢你的帮助。我会尽力去做的。谢谢你的时间和帮助。我一定会按照你的建议去做。谢谢你的帮助,我也这么做了。但是现在我得到了这个错误;欢迎来到21点!你总共要放多少筹码?199你想放多少筹码下注?10-------------------------------------------------------------------在()377378中键入错误回溯(最后一次呼叫)-提示玩家下注:-->379下注(玩家筹码)380 381-显示卡片:在下注(筹码)中242 243其他:-->244 if chips.bet>chips.total:245打印(f“对不起,您没有足够的筹码。您的帐户中有{chips.bet}筹码”)246 TypeError:“>”在“int”和“NoneType”实例之间不受支持。谢谢你的帮助和时间。我同意,但作为这种语言的新手,我每天都在学习,并尝试根据专业标准改变我的编码风格。此外,我想问你关于学习python的好学习材料的建议?我如果你能告诉我适合初学者的好python书籍或课程,我将不胜感激。StackOverflow对倡导外部资源、产品、平台、出版物等有严格的规定。如果你搜索“学习python”或“python实践”你会发现很多建议。寻找提供挑战层次的平台或测验。处理容易的问题,直到它们变得太容易,然后转移到更难的问题上。大多数路径都会有帮助,有些路径比其他路径更有帮助,但你是帮助你的最佳判断者。