我对使用Python进行编程非常陌生,我只是想问为什么当我调用一个函数时它不起作用。我看到TypeError
关于die_roll
需要两个参数,但为什么在添加到括号中时self.result
覆盖了什么?
import random
def die_roll(self, result):
self.result = random.randint(1, 10)
print "Roll the dice, Dennis. "
print "You have rolled a %s!" % self.result
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print (" Welcome... ")
print (" TO THE WORST GAME IN THE WORLD!!!!!!!!!!! ")
print (" REALLY, IT IS QUITE BAD. YOU'LL SEE...... ")
print ("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n")
name = raw_input('Welcome to this awful adventure. Please enter your name to get started: \n')
print "\n%s? I don't like that name. \n" % (name)
name1 = raw_input('Try again: \n')
print "\n%s?! Really? That's the best you can do? You know what - just forget it. You will be called Dennis. \n" % (name1)
print "I happen to like Dennis. It's a good name. Regal. It's nice to meet you.... Dennis. \n"
print "You begin your adventure peering into a long, gloomy cave. You move by rolling a 10-sided dice.\n"
print "You will encounter random enemies along the way. If your combined rolls equal 100, you win!\n"
die_roll()
答案 0 :(得分:2)
您将功能定义为
def die_roll(self, result):
这告诉python解释器die_roll,需要两个参数self和result。
我猜你从其他类中复制了这个方法,因为self是类中方法的第一个参数的正常命名约定,在后一种情况下,self(第一个参数)指的是'这' (来自c ++或java)。
从功能体看来,您似乎不需要任何参数,也许您可以尝试 -
def die_roll():
result = random.randint(1, 10)
print "Roll the dice, Dennis. "
print "You have rolled a %s!" % result
答案 1 :(得分:0)
嗯。我不确定你的主要误解在哪里,但你的问题中有几个。
您没有关注程序的流程以及错误的来源:
def die_roll(self, result):
/stuff here/
/stuff/
print "You will encounter random enemies along the way. If your combined rolls equal 100, you win!\n"
die_roll() <--- here is where the TypeError about die_roll needing two arguments is triggered
为什么在添加到括号中时不会被self.result覆盖?,你问?因为错误表示当您拨打die_roll()
时,括号不符合您在设置def die_roll(...)
时设置的模式。您无法通过在定义函数的位置执行某些操作来避免该错误。他们总是需要在两个地方匹配 - 所有地方。如果def die_roll
说它需要两个参数,那么当你调用它时,你需要给它两个参数。
另一个误解是您正在使用def die_roll(self, result)
然后使用self.result
- 就好像逗号和点运算符以某种方式相关,或者您需要使用这些参数作为获取或返回的方式结果。 (他们不是,你没有)。
另一个原因是你正在使用单词self
和result
,就像Python理解它们一样。它们不是关键字,它们在Python中没有特殊含义。
self
在Python中没有特殊含义,然而,它是人们为一个特定变量提供的标准名称......不幸的是与面向对象相关,其他可以是一个非常滑的概念从头开始拾取。
你的标题问题为什么函数不需要self
参数?可以通过多种方式回答,现在基本上对你没有任何帮助。 blah blah类定义对象,它们包含看起来与函数完全相同但称为方法的东西。方法需要一种方法来引用它们所处的对象,因此方法的第一个参数始终是它所在的对象,并且Python引擎提供第一个参数,因此方法调用看起来总是看起来不匹配,因为该定义比调用还有一个参数。 self
是Python程序员用来命名接收对象引用的变量的约定,尽管它本身并不是一个特殊的名称。但那是所有不相关的背景,设置......
函数不需要self
,因为它们不是'in'对象,因此它们不需要引用它们所在的对象,因为它们不在一个对象中。 / p>
是的,这不是很有帮助,对不起。我能说的最有用的是,编写更多代码,更多地使用交互式解释器,探索更多,事情会变得更加清晰。