Why is 'module' object not callable? [duplicate]

心不动则不痛 提交于 2020-01-02 20:17:40

问题


Possible Duplicate:
TypeError: ‘module’ object is not callable

This is my very first Python attempt, just trying to regain basic programming knowledge after a 10 year silence in a, for me, new language, Python. The basic idea is a tiny battly engine which decides the better hit. The bugging code is next.

self.__power = self.__att*random(2,4)/dier.__defn

As my python knowledge is extremely basic, I'm rather scared of saying the right things so Im gonna put my code down below (47 lines), you..ll notice it is really transparant so I dont suspect this will give any problem. The errorline is 16. I tried renaming the att variable to atta as well as some repositionings though new bugs come, I solve them and in the end its always the same error on the same line.

class Character:
def __init__(self,name="", att=0,defn=0,lvl=0,leven=0,exp=0, power=0):
        self.__att = att
        self.__defn = defn
        self.__lvl = lvl
        self.__leven = leven
        self.__name = name
        self.__xp = exp
        self.__power = power

    def batl(self):
        import random
        while self.__lvl <= 3:
            dier = Character("Anaconda",1,1,50,1,0,0)
            print "You encountered an " + dier.__name + " and fight it."
            **self.__power = self.__att*random(2,4)/dier.__defn**
            dier.__power = (dier.__att*random(1,4))/self.__defn
            if self.power > dier.power:
                growth = dier.__lvl*dier.__atta
                groei()
            else:
                dmg = dier.lvl*dier.att
                leven = leven-dmg
            if leven < 0:
                print "Alas, you're done for."
                exit()
            else:
                print "You took " + dmg + "damage and have " + leven + "life left."


    def groei(self):
        if (growth+exp) > 100:
            lvl += 1
            exp = growth-100
            print "You won and gained " + str(growth) + " and grew from level " + str(lvl-1) + " to level " + str(lvl) + "."
        else:
            exp = growth + exp
            print "You won and gained " + str(growth) + "."

def main():

hero = Character("Nevery",2,1,2,100,0,0)
hero.batl()

if name == 'main': main()

As you can see ive got my character class, in which i have defined the battle() method and the groei() method, very basic. Can anyone point me what I'm missing out on, been looking at it for hours. Thanks in Advance


回答1:


random is the module, not the function. You need to call random.random. You could also from random import random, but I'd go with the first option in this case.




回答2:


Use random.random() instead of random?



来源:https://stackoverflow.com/questions/13649403/why-is-module-object-not-callable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!