python从入门到实践知识点总结_GitHub - xieqing0428/python_helloworld: 《Python编程 从入门到实践》练手总结...

《Python编程 从入门到实践》练手总结

最近在看《Python编程 从入门到实践》同步更新课后练习进度,在最后把制作的思维导图放出~

第一部分:

第六章

PEP 8 字典缩进方式

方法一:

friends = {'first_name': 'ming',

'last_name': 'xiao',

'age': '18',

'city': 'nanjing'}

方法二:

friends = {

'first_name': 'ming',

'last_name': 'xiao',

'age': '18',

'city': 'nanjing'

}

或者:

friends = {

'first_name': 'ming',

'last_name': 'xiao',

'age': '18',

'city': 'nanjing'

}

第九章

创建无参数类的时候可以把类的括号去掉class User:

定义类之后空余两行再执行相关操作

继承父类__init__函数时,使用

super().__init__()而不是super.__init__()

调用类的时候,即使没有参数传入也不可以将括号删去

self.privileges = Privileges()

第十章

处理多个异常,可将异常放在元组中

try:

--snip--

except (FileNotFoundError, json.decoder.JSONDecodeError):

--snip--

第十一章

勘误:

import unittest

from HelloWorld.Chapter_11.Example.city_functions import city_country

class TestCityFunctionsCase(unittest.TestCase):

"""测试city_functions功能"""

def test_city_country(self):

result = city_country('Santiago', 'Chile')

self.assertEqual(result, "Santiago, Chile")

- unittest.main()

+ if __name__ == '__main__':

+ unittest.main()

直接使用unittest.main()会报错

第二部分:

项目源码

PS: conda和pip真是大坑啊, 安装了anaconda3之后,貌似pip命令就默认下载到conda的目录下,而pip3则是默认下载到osx的默认python3目录下……

$ pip install pygame

Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple

Requirement already satisfied: pygame in /Users/alessa0/anaconda3/lib/python3.7/site-packages (1.9.4)

$ pip3 install pygame

Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple

Requirement already satisfied: pygame in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (1.9.4)

ship_speed_factor 设置小数,但是centerx等属性只能接受整数,所以步进应该是1, 2, 1, 2……设置了连续移动所以看不太出来

设置雨滴超出屏幕后新建雨滴对象

修改create_fleet函数,当single=True时创建单行对象,single=False时创建多行对象

game_functions.py:

+ from random import randint

- def create_fleet(rain_settings, screen, rains):

+ def create_fleet(rain_settings, screen, rains, single=False):

rain = Rain(rain_settings, screen)

number_rains_x = get_number_rain_x(rain_settings, rain.rect.width)

+ if single:

+ number_rows = 1

+ else:

number_rows = get_number_rows(rain_settings, rain.rect.height)

for number_row in range(number_rows):

for number_rain in range(number_rains_x):

+ # 控制雨滴随机生成

+ random_number = randint(-10, 10)

+ if random_number > 0:

create_rain(rain_settings, screen, rains, number_rain,

number_row)

问题: 原本在update_rains(rain_settings, rains)中remove对象后直接使用create_fleet (rain_settings, screen, rains, single=True)

,但是存在一个问题,因为遍历rains是一个过程,remove操作不是同步的,而创建单行对象又不只是创建一个对象,会造成重复。

解决: 在settings中添加一个属性self.rain_create_allowed用于控制新建单行对象操作,具体如下

- def update_rains(rain_settings, rains):

+ def update_rains(rain_settings, screen, rains):

"""更新雨群中所有雨滴的位置"""

rains.update()

# 删除消失的雨滴

for rain in rains.copy():

+ if rain.rect.top >= rain_settings.screen_height:

rains.remove(rain)

+ rain_settings.rain_create_allowed = True

+ else:

+ # 防止重复新建雨滴对象

+ if rain_settings.rain_create_allowed:

+ create_fleet(rain_settings, screen, rains, single=True)

+ rain_settings.rain_create_allowed = False

+ # 允许新建雨滴对象(用于超出屏幕范围后删除对象及新建对象)

+ self.rain_create_allowed = False

while True:

gf.check_events()

- gf.update_rains(rain_settings, rains)

+ gf.update_rains(rain_settings, screen, rains)

gf.update_screen(rain_settings, screen, rains)

import matplotlib.pyplot as plt

# 设置刻度标记的大小

plt.tick_params(axis='both',which='major',labelsize=14)

which一共3个参数[‘major’ , ‘minor’ ,‘both’] 默认是major表示主刻度,后面分布为次刻度及主次刻度都显示.

持续更新中……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值