【问题标题】:Null returns in a simple Python program在一个简单的 Python 程序中返回 Null
【发布时间】:2018-05-12 07:23:43
【问题描述】:

我目前正在编写我的 Programming Fundamentals w/ Python final 项目,这是一个小游戏的集合。我正在尝试制作“高牌”游戏,其中生成 1 和 13 之间的 2 个随机数(52 张牌的面值),然后比较较高的数字并显示获胜者。

我们需要为类和程序代码提供单独的文件。这就是我的班级的样子。

import random

class card:
    def __init__(self, value):
        self.card_value = value

    def deal(self):
        numb = random.randrange(1, 13)

    def set_value(self, value):
        self.card_value = value

    def get_value(self):
        return self.card_value

    def find_face_value(self, numb):
        #face = 'test'
        print(numb)
        if numb == 1:
            print("numb == 1")
            return 'Ace'
        elif numb == 2:
            return 'two'
    ##        elif numb == 3:
    ##            face = 'three'
    ##        elif numb == 4:
    ##            face = 'four'
    ##        elif numb == 5:
    ##            face = 'five'
    ##        elif numb == 6:
    ##            face = 'six'
    ##        elif numb == 7:
    ##            face = 'seven'
    ##        elif numb == 8:
    ##            face = 'eight'
    ##        elif numb == 9:
    ##            face = 'nine'
    ##        elif numb == 10:
    ##            face = 'ten'
    ##        elif numb == 11:
    ##            face = 'jack'
    ##        elif numb == 12:
    ##            face = 'queen'
    ##        elif numb == 13:
    ##            face = 'king'
        #return face

    def __str__(self):
        return 'Numeric Value: ' + str(self.card_value)

我已经注释掉了那些(如果 numb == ...)语句 b/c 我正在测试,看看我是否能得到一个正确的回报。 这是我的游戏程序代码。

def high_card():
    #player1_card = cardClass.card(random.randrange(1, 13))
    player1_card = cardClass.card(1)
    player2_card = cardClass.card(2)
    card1 = player1_card.find_face_value(player1_card)
    #player2_card = cardClass.card(random.randrange(1, 13))
    card2 = player2_card.find_face_value(player2_card)
    print('Player 1 got', card1, player1_card, '\nPlayer 2 got', card2, player2_card)

这是我在运行 high_card() 函数时收到的输出。

>>> high_card()
Numeric Value: 1
Numeric Value: 2
Player 1 got None Numeric Value: 1 
Player 2 got None Numeric Value: 2

我的问题出在输出的最后两行。它应该说“玩家 1 得到了 Ace 数值:1”和“玩家 2 得到了两个数值:2”。我需要在我的类中使用 find_face_value 函数来返回卡片“面”的字符串。相反,Python 正在打印“None”,这意味着我没有在 find_face_value 函数中返回任何内容。我不知道该怎么做才能使它正常工作,非常感谢一些帮助。

【问题讨论】:

    标签: python python-3.x class object


    【解决方案1】:
    card1 = player1_card.find_face_value(player1_card)
    

    在上面的语句中,numb 既不是 1 也不是 2。numb 是一个卡片类(你指定了 numb=player1_card)。所以find_face_value 中的那些 if 语句都是假的,因此返回值被跳过。 Python 默认返回None。您必须在 if 语句中检查 self.card_value,而不是检查 numb

    def find_face_value(self):
        if self.card_value == 1:
            print("card value is 1")
            return 'Ace'
        elif self.card_value == 2:
            return 'two'
    
    
    card1 = player1_card.find_face_value()
    print(card1)
    

    上面的语句应该打印'Ace'。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2018-03-25
      • 2017-03-04
      • 2016-11-28
      • 2019-08-06
      • 2018-12-16
      相关资源
      最近更新 更多