python print funcition不适用于类

时间:2019-06-02 22:16:11

标签: python python-3.x

我正在创建一个骰子游戏,您可以在其中打印出骰子的面孔(我是初学者) 而且必须有2个班级一个称为DiceGame的类。它有一个叫做play的方法,可以显示骰子的脸。还有一个叫做Die的课程。它具有一个名为face的属性,该属性保存了脸部图像。有一种叫做roll的方法,可以随机设置脸部。

import random

class Die(object):

    def __init__ (self, face =None, faceValue = None):
        self.face = face
        self.faceValue = faceValue
    def roll(self):
        for c in range(1,2):
            random.randint(1,2)
            if random == '1':
                self.face = (' ------\n|      |\n|   o  |\n|      |\n ------')
def __str__(self):
        return str(self.face)
class DiceGame(Die):
    def play(self):
        print(self.face)
go = DiceGame(Die)
print(go.play)

输出为

bound method DiceGame.play of <__main__.DiceGame object at 0x7fd060db0358>> 

它应该打印模面。 (我是堆栈溢出的新手。不确定为什么我的代码要这样格式化。)

2 个答案:

答案 0 :(得分:0)

您的代码有几个问题:

  1. 在第go = DiceGame(Die)行上,类Die将作为面发送到构造函数中。尝试使用go = DiceGame()

  2. 您不会在第print(go.play)行调用方法play。尝试使用go.play()

  3. random.randint(1,2)返回整数对象。与“ 1”进行比较将始终导致False。

  4. 在您的代码中,您实际上并没有滚动。

固定代码:

import random
class Die(object):
    def __init__(self, face=None, faceValue=None):
        self.face = face
        self.faceValue = faceValue

    def roll(self):
        self.faceValue = random.randint(1, 6)
        if self.faceValue == 1:
            self.face = (
                ' ------\n'
                '|      |\n'
                '|   o  |\n'
                '|      |\n'
                ' ------')
        elif self.faceValue == 2:
            self.face = (
                ' ------\n'
                '| o    |\n'
                '|      |\n'
                '|    o |\n'
                ' ------')
        elif self.faceValue == 3:
            self.face = (
                ' ------\n'
                '| o    |\n'
                '|   o  |\n'
                '|     o|\n'
                ' ------')
        elif self.faceValue == 4:
            self.face = (
                ' ------\n'
                '| o   o|\n'
                '|      |\n'
                '| o   o|\n'
                ' ------')
        elif self.faceValue == 5:
            self.face = (
                ' ------\n'
                '| o   o|\n'
                '|   o  |\n'
                '| o   o|\n'
                ' ------')
        elif self.faceValue == 6:
            self.face = (
                ' ------\n'
                '| o   o|\n'
                '| o   o|\n'
                '| o   o|\n'
                ' ------')

    def __str__(self):
        return str(self.face)


class DiceGame(Die):
    def play(self):
        self.roll()
        print(self.face)


go = DiceGame()
go.play()

替代滚动方法可以是:

    def roll(self):
        self.face_value = random.randint(1, 6)
        self.face = u"⚀⚁⚂⚃⚄⚅"[self.face_value-1]

,但是您可能需要将# -*- coding: utf-8 -*-作为代码的第一行来表示编码。

答案 1 :(得分:0)

我同意Jan,尽管我会在DiceGame类中将方法play更改为返回self.face,而不仅仅是打印它。相反,我会print(go.play())

import random

class Die(object):

    def __init__ (self, face =None, faceValue = None):
        self.face = face
        self.faceValue = faceValue
    def roll(self):
            self.faceValue = random.randint(1, 6)
            if self.faceValue == 1:
                self.face = (
                    ' ------\n'
                    '|      |\n'
                    '|   o  |\n'
                    '|      |\n'
                    ' ------')
            elif self.faceValue == 2:
                self.face = (
                    ' ------\n'
                    '| o    |\n'
                    '|      |\n'
                    '|    o |\n'
                    ' ------')
            elif self.faceValue == 3:
                self.face = (
                    ' ------\n'
                    '| o    |\n'
                    '|   o  |\n'
                    '|     o|\n'
                    ' ------')
            elif self.faceValue == 4:
                self.face = (
                    ' ------\n'
                    '| o   o|\n'
                    '|      |\n'
                    '| o   o|\n'
                    ' ------')
            elif self.faceValue == 5:
                self.face = (
                    ' ------\n'
                    '| o   o|\n'
                    '|   o  |\n'
                    '| o   o|\n'
                    ' ------')
            elif self.faceValue == 6:
                self.face = (
                    ' ------\n'
                    '| o   o|\n'
                    '| o   o|\n'
                    '| o   o|\n'
                    ' ------')
    def __str__(self):
            return str(self.face)
class DiceGame(Die):
    def play(self):
        self.roll()
        return self.face

go = DiceGame()
print(go.play())