Why does this script print an extraneous 'none' in the output

后端 未结 3 1702
情话喂你
情话喂你 2020-12-12 03:43

I\'ve written a simple script to help me better understand using classes. It generates a random character for a game. I defined the object and then call a function on that o

相关标签:
3条回答
  • 2020-12-12 04:02

    The stats() method does not return anything. A function that doesn't return anything evaluates to None. Which is what you print.

    So, don't print the return value of the function. Just call it. Now, you should rename the function as printStats() to make it clear what it does. And then just call it like this:

    def printStats(self):
        ....
    
    player = Player(name)
    player.printStats()
    

    Naming is a really important part of programming. A slightly poor choice of name often leads to confusion like this.

    0 讨论(0)
  • 2020-12-12 04:02

    You print the return value of player.stats():

    print player.stats()
    

    but the .stats() method does not have a return statement. The default return value of any function or method in python is None, if no return statement has been given:

    >>> def foo():
    ...     pass
    ...
    >>> print foo()
    None
    

    Either remove the print before the method call, or have stats() return a string to print instead of doing all the printing in the method.

    0 讨论(0)
  • 2020-12-12 04:09
    print player.stats()
    

    Is the culprit. player.stats() == None

    You want just:

    player.stats()
    

    You'd do better to name your function player.printStats().


    Another option would be to make it return a string:

    def stats(self):
        return '\n'.join([
            self.name
            "Strength  : %d" % self.strength,
            "Dexterity : %d" % self.dexterity,
            "Hit Points: %d" % self.hit_points,
            "Aura      : %d" % self.aura,
            "Weapon    : %s" % self.weapon,
            "Spell     : %s" % self.spell,
            "Item      : %s" % self.item,
            "Element   : %s" % self.element,
            "-" * 20
        ])
    

    And then print player.stats() would behave as expected

    0 讨论(0)
提交回复
热议问题