Python断言

2024-09-30 05:32:05 发布

您现在位置:Python中文网/ 问答频道 /正文

这就是我试图用下面的代码做的。在

The class Apple should take 4 constructor inputs: the color (color), the name of the apple variety (variety_name), the size (size), and the place it grew in (place_grown), in that order. Those inputs should be assigned to the following instance variables: color, variety, size, grown_in.

The class Apple should also have a string method, which should return a string of the format

A <SIZE> <COLOR> apple of the <VARIETY> variety, grown in <PLACE GROWN IN>.

The for_pies method should return the boolean value True if the variety is "Granny Smith", "Braeburn", or "Golden Delicious", and if the variety value for that Apple instance is anything else, the method should return the boolean value False.

目前,我收到2个错误:

Traceback (most recent call last):
File "Apple.py", line 312, in test_apple9
self.assertEqual(ap2.__str__(), "A large yellow apple of the Golden Delicious variety, grown in the United States.")
AssertionError: 'A large yellow apple of the Golden Delicious variety, grown in the United States ' != 'A large yellow apple of the Golden Delicious variety, grown in the United States.'

Traceback (most recent call last):
File "Apple.py", line 315, in test_apple10
self.assertEqual(ap2.__str__(),"A medium red apple of the Braeburn variety, grown in WA.")
AssertionError: 'A medium red apple of the Braeburn variety, grown in WA ' != 'A medium red apple of the Braeburn variety, grown in WA.'

代码:

^{pr2}$

不同值测试:

import unittest

class Problem4(unittest.TestCase):
    def test_apple10(self):
        ap2 = Apple("red","Braeburn","medium","WA")
        self.assertEqual(ap2.__str__(),"A medium red apple of the Braeburn variety, grown in WA.")
    def test_apple9(self):
        ap2 = Apple("yellow","Golden Delicious","large","the United States")
        self.assertEqual(ap2.__str__(), "A large yellow apple of the Golden Delicious variety, grown in the United States.")

Tags: oftheinselfapplelargeshoulddelicious
2条回答

你必须分配实例的属性。这是正确的代码:

class Apple():
    def __init__(self, color, variety_name, size, place_grown):
        self.color = color
        self.variety_name = variety_name
        self.size = size
        self.place_grown = place_grown

更改格式:

^{pr2}$

此处将self.variety改为self.variety_name

def for_pies(self):
        return self.variety in ["Granny Smith", "Braeburn", "Golden Delicious"]

然后你可以写下以下作业:

ap2 = Apple("green","Granny Smith","large","Sydney, Australia")
print ap2 # Should print: A large green apple of the Granny Smith variety, grown in Sydney, Australia
print ap2.for_pies() # should print True

ap3 = Apple("red","Mystery variety", "small","Michigan")
print ap3.for_pies() # should print False
print ap3 # should print: A small red apple of the Mystery variety variety, grown in Michigan

您没有在__init__中分配任何内容。您似乎正在与一些元组进行一系列比较(!=表示不等于);因为self.color还不存在,这将导致您看到的异常。在

赋值是=(而且您确实在for_pies中使用赋值,所以您知道如何使用它):

def __init__(self, color, variety_name, size, place_grown):
    self.color = color
    self.variety = variety_name
    self.size = size
    self.place_grown = place_grown

注意,参数的顺序也需要调整,并且我更正了variety属性的名称以符合您的要求。在

接下来,__str__方法将失败,因为它使用了几个不存在的%格式化程序。只需在任何地方使用%s

^{pr2}$

换句话说,这些不是属性名的首字母。我还在varietygrown之间添加了一个逗号。在

接下来,您可以直接返回in比较的结果,不需要使用if...else

def for_pies(self):
    return self.variety in ("Granny Smith", "Braeburn", "Golden Delicious")

注意,这个方法不需要将variety_name作为参数!分配告诉您使用self.variety实例属性。在

完成的课程是:

class Apple:
    def __init__(self, color, variety_name, size, place_grown):
        self.color = color
        self.variety = variety_name
        self.size = size
        self.place_grown = place_grown

    def __str__(self):
        return "A %s %s apple of the %s variety, grown in %s " % (
            self.size, self.color, self.variety, self.place_grown)

    def for_pies(self):
        return self.variety in ("Granny Smith", "Braeburn", "Golden Delicious")

相关问题 更多 >

    热门问题