【有书共读11】零压力学Python读书笔记14 & 15

# coding=utf-8

# 生命游戏的python实现
# 定义矩阵类


class Matrix2D:     """     矩阵类     """     def __init__(self, rows, cols):         """"         init         """         self.rows = rows         self.cols = cols         self.grid = [[0] * cols for _ in range(rows)]     def get_cell(self, r, c):         """         获取r行c列的值         :param r:         :param c:         :return:         """         return self.grid[r][c]     def set_cells(self, n, *args):         """         将任意个单元格的值设置为n         :param n: 设置为的值         :param args:         :return:         """         for r, c in args:             self.grid[r][c] = n     def inc_cells(self, *args):         """         将任意个单元格加1         :param args:         :return:         """         for r, c in args:             self.grid[r][c] += 1     def set_all_cells(self, n=0):         """         将所有的单元格都设置为0         :param n:         :return:         """         for i in range(self.rows):             for j in range(self.cols):                 self.grid[i][j] = n


rows = 20
cols = 40
life_mat = Matrix2D(rows, cols)
nc_mat = Matrix2D(rows, cols)
life_mat.set_cells(1, (0, 0), (2, 2), (3, 0), (3, 1), (3, 2))
border_str = '_' * cols  # 创建边界字符串


def get_chr(a_mat, r, c):     """     :param a_mat:     :param r:     :param c:     :return:     """     return 'X' if a_mat.get_cell(r, c) > 0 else ' '


def get_mat_str(a_mat):     """     :param a_mat:     :return:     """     disp_str = ''     for i in range(rows):         lst = [get_chr(a_mat, i, j) for j in range(cols)]         disp_str += ''.join(lst)+'\n'     return disp_str


def do_generation():     """     :return:     """     # 打印当前的生命矩阵的状态     print(border_str + '\n' + get_mat_str(life_mat))     nc_mat.set_all_cells(0)     """     补充nc矩阵,将nc矩阵中相邻位置都加1     在边上和角上实现环绕     """     for i in range(rows):         for j in range(cols):             if life_mat.get_cell(i, j):                 im = (i - 1) % rows                 ip = (i + 1) % rows                 jm = (j - 1) % cols                 jp = (j + 1) % cols                 nc_mat.inc_cells((im, jm), (im, j), (im, jp),                                  (i, jp), (i, jm), (ip, jm),                                  (ip, j), (ip, jp))     # 根据邻居矩阵规则生成下一代     for i in range(rows):         for j in range(cols):             n = nc_mat.get_cell(i, j)             if n < 2 or n > 3:  # 死亡                 life_mat.set_cells(0, (i, j))             elif n == 3: # 繁殖                 life_mat.set_cells(1, (i, j))


n = int(input())
for i in range(n):     do_generation()

第18章
# coding=utf-8
# yield 编写生成器函数
# next()获取下一个
from time import time


def gen_rand():     p1 = 1200556037     p2 = 2444555677     max_rand = 2 ** 32     r = int(time() * 1000)     while True:         n = r         n *= p2         n %= p1         n += r         n *= p2         n %= p1         n %= max_rand         r = n         yield n


my_rand = gen_rand()  # 生成一个可迭代的对象
for x in range(10):     print(next(my_rand))

"""
本章知识点总结:
本章要点总结如下。
1:在 Python中,要创建自定义的可迭代对象,可编写生成器函数。生成器不返回
值,而使用 yield语句。"""
yield x
"""
2:生成器的状态被保存,供生成器被再次调用时使用。所有局部变量的值都被保留。
3:实例化生成器函数后,无须再次实例化它,除非你要重启生成器。相反,只需保
存生成器一次,然后反复使用它。
"""
my_rand = gen_rand()
print(next(my_rand))
print(next(my_rand))
"""
4:虽然特性看起来像实例变量,行为也像实例变量,但其实现与实例变量不同。要
实现特性,可为何个特性添加两个特殊方法:获取方法和设置方法
5:用户试图获取特性的值时,将训用其获取方法。获取方法的定义语法如下
"""


@property
def property_name(self):     statements     return value


"""
6:用户试图设置特性的值时,将调用其设置方法。设置方法的定义语法如下
"""


@roperty_name.setter
def(self, new_value):     statements


"""
7:装饰器将一个函数作为参数,根据这个函数定义一个新函数,并返回这个新函数
8:下面的语句导致原始函数(被包装的函数)被其新版本取代
"""
function.decorator(function)
#Python##笔记##读书笔记#
全部评论
pycharm 写的代码上传上来还是会乱码,所以我给链接附在了后面,链接里面的看得会比较好一点。
点赞 回复 分享
发布于 2018-11-02 16:05

相关推荐

11-24 11:23
门头沟学院 C++
点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务