Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python正确读取PPM文件_Python_Tokenize_Ppm - Fatal编程技术网

如何使用Python正确读取PPM文件

如何使用Python正确读取PPM文件,python,tokenize,ppm,Python,Tokenize,Ppm,这是我的总体说明 编写一个颜色类,该类使用0到255范围内的整数值表示RGB颜色。您的班级必须: 放置在image.py中 提供一个构造函数,该构造函数接受来自客户端的红色、绿色和蓝色通道的值并存储这些值 提供返回红色、绿色和蓝色通道值的公共方法 编写一个表示PPM映像的PortablePixmap类。您的班级必须: 放置在image.py中 提供一个构造函数,该构造函数接受来自客户端的幻数、宽度、高度、最大颜色值和像素数据,并存储这些值 将像素数据存储为颜色对象列表(或列表) 提供一个公共方法

这是我的总体说明

编写一个颜色类,该类使用0到255范围内的整数值表示RGB颜色。您的班级必须: 放置在image.py中 提供一个构造函数,该构造函数接受来自客户端的红色、绿色和蓝色通道的值并存储这些值 提供返回红色、绿色和蓝色通道值的公共方法

编写一个表示PPM映像的PortablePixmap类。您的班级必须: 放置在image.py中 提供一个构造函数,该构造函数接受来自客户端的幻数、宽度、高度、最大颜色值和像素数据,并存储这些值 将像素数据存储为颜色对象列表(或列表) 提供一个公共方法,该方法返回PPM图像的字符串表示形式

编写一个read_ppm函数,用于打开ppm图像文件,读取其内容,并返回保存其内容的PortablePixmap对象。您的职能必须: 放置在image.py中 读取PPM图像文件的内容 对PPM图像文件的格式不敏感 如果预期和提供的像素数不同,则退出并显示错误

编写一个测试read_ppm函数的主函数。您的函数必须放在main.py中

这就是我到目前为止所做的

class Color:
# constructor takes in values from client and stores them
def __init__(self, red, green, blue): 


    # checks that type of arg == int: raises exception otherwise 
    if (isinstance(red, int) and isinstance(green, int) and isinstance(blue, int)):     
        print("good stuff, indeed integers")
    else:   
        raise TypeError("Argument must be an integer.")

    # checks if values are between 0 and 225 
    if red < 0 or red > 225: 
        print("0 < rgb values < 225")
    elif green < 0 or green > 225:
        print("0 < rgb values < 225") 
    elif blue < 0 or blue > 225:
        print("0 < rgb values < 225")

    # instance variables (RGB values)
    self._red = red 
    self._green = green
    self._blue = blue 


# methods that reuturn RGB values
def returnRed(self): 
    return self._red 

def returnGreen(self):
    return self._green

def returnBlue(self):
    return self._blue


'''class that represents a PPM image'''
class PortablePixmap:
    def __init__(self, magic_number, width, height, max_color_value, pixel_data):
        self._magic_number = magic_number
        self._width = width
        self._height = height
        self._max_color_value = max_color_value
        self._pixel_data = pixel_data


    def __str__(self):
        s = self._magic_number
        s += '\n' + str(self._width)
        s += ' ' + str(self._height)
        s += '\n' + str(self._max_color_value)
        for pixel in self._pixel_data:
            s += ' ' + str(pixel[0])
            s += ' ' + str(pixel[1])
            s += ' ' + str(pixel[2])

        return s
class颜色:
#构造函数从客户端接收值并存储它们
def __;初始(自身、红色、绿色、蓝色):
#检查arg==int的类型:否则将引发异常
如果(isinstance(红色,整数)和isinstance(绿色,整数)以及isinstance(蓝色,整数)):
打印(“好东西,确实是整数”)
其他:
raise TypeError(“参数必须是整数”)
#检查值是否介于0和225之间
如果红色<0或红色>225:
打印(“0225:
打印(“0225:
打印(“0
我有几个问题需要澄清。。 1.我是否正确地创建了颜色类? 2.我甚至需要特别提出该类中的任何异常吗?我们最终将从一个文件中读取,该文件按顺序包含所有内容,但不一定在它自己的行中

我真的只是想知道我是否正确地处理了这个问题。这些说明似乎是循序渐进的,但我并不真正理解每件事是如何联系在一起的,所以我担心我要么做得太多,要么做得太少


提前感谢

规范中没有明确说明您需要检查值,您的检查仅在某些情况下引发异常,否则会导致副作用(打印);从重用的角度来看,我希望只有例外情况(如果有的话)。除了缩进错误(我假设它只在这里,不在您的源代码中),Color类看起来涵盖了需求,尽管它们与访问器非常不和谐;可能有人受过Java的训练

docstring应该位于PortablePixmap类内部,而不是其上方

最值得注意的是,您的类对PPM格式不敏感,并将像素存储为8位无符号RGB。这使得不可能支持所有PPM,因为它们支持16位值(请注意中的maxval字段)

PortablePixmap类也不使用Color类:“将像素数据存储为颜色对象列表(或列表)”。这一要求迫使实现效率极低,但我认为整个过程只是一个练习。您需要从像素数据字符串中提取RGB三元组。这也是您需要指定的一个检查的地方;验证像素数是否正确。如果失败,则会出现ValueError异常


如果我写这类东西,我可能会使用它来减少像Color这样的类的内存使用,处理大量有限范围的数值,并可能在不使用笨拙的getter方法的情况下使存储透明。并且可以更容易地处理像素集合

哇,非常感谢您对项目描述的详细阐述!我现在看到颜色类对于这个项目没有当前的用途。它将用于未来的补充。另外,Python是我学习的第一门语言。我只有getter方法的原因是因为1。它涵盖了需求2。我在计算类的总体用途时遇到了问题,最后我在color类中删除了异常(以及int值“check”-实际上只是打印语句)并实现了您建议的属性。我认为这最终会是有益的。我关于房产的说明并不是建议你完成指定的任务!如果您根据这些要求进行评分,PortablePixmap必须使用颜色,并且颜色必须包含访问器方法。