Skip to content

kbac001/python_helloworld

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 

Repository files navigation

《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)

  1. 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用于控制新建单行对象操作,具体如下

game_functions.py:

- 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

settings.py:

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

exercise_13_04.py:

    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表示主刻度,后面分布为次刻度及主次刻度都显示.

持续更新中……

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published