第一部分:基础知识



学习python想要做的软件
 1.开机答题软件,(电脑一开机的输入密码,改为答题,初步设定为选择题,答对了才可以进入。)
 2.
 
第二章
2.1第一个程序:
 print("Hello Python World!")
 
2.2变量
 命名:只能包含字母,数字,下划线,不能数字打头,不能有空格,不能用关键字,应简短有效
  注意:使用小写的python变量名比较好。
 方法:可对数据进行的操作。 格式为:变量名.方法名()     例: name.title()   
2.3字符串
 格式:python中,用括号括起来的都是字符串,单引号和双引号都行。

修改大小写: 
  
  title()以首字母大写的方式显示每个单词,即将每个单词的首字母改为大写。 
  
  upper() 全部大写 
  
  lower() 全部小写 
  
 拼接字符串: 
  
  用+相连:  "hello," + "world" 
  
 空白:非打印字符,包括 空格,制表符\t,换行符\n 
  
 删除空白: 
  
  去掉开头的空白:lstrip() 
  
  去掉结尾的空白:rstrip() 
  
  去掉两端的空白:strip() 
  
2.4数字 
  
 运算:+ - * / **        备注:两个乘号(**)表示乘方运算 
  
 将数字转为字符串: str(11) 
  
 在python3中,可以直接运算,一般都对,在python2中则要考虑浮点数和整数的区别。 
  
  
  
2.5注释 
  
 单行注释: #这是注释 
  
 多行注释: '''这是注释''' 
  
 import this 
  
 

   第三章 列表简介 
  
3.1列表 
  
 定义:一系列按特定顺序排列的元素 
  
 格式:用方括号表示列表,并用逗号来分割其中的元素  
  
  例:bicycles = ['trek','cannondale','redline','specfalized']  
  
 访问:列表是有序集合,通过索引访问,索引从0开始,-1返回最后一个元素 
  
  例:bicycles = ['trek','cannondale','redline','specfalized']  
  
   print(bicycles[0]) 
  
3.2操作列表 
  
 motorcycles = ['honda','yemaha','suzuki'] 
  
 修改: motorcyctes[0] = 'ducati' 
  
 添加: 
  
  末尾追加:append()   motorcycles.append('ducati') 
  
  中间插入:insert() motorcycles.insert(0,'ducati') 
  
 删除: 
  
  直接去掉:del  del motorcycles[0] 
  
  取出末尾的元素:pop()  motorcycle = motorcycles.pop() 
  
  取出任一位置元素:pop()  motorcycle = motorcycles.pop(1) 
  
  根据值删除:remove()  motorcycles.remove('ducati') 
  
   
  
3.3列表排序 
  
 永久排序: 字母正序:sort()    字母倒序:sort(reverse=True) 例:list.sort() 
  
 临时排序:  字母正序:sorted() 字母倒序:sorted(reverse=True) 例:list.sorted() 
  
 反转排序: reverse() 例:reverse(list) 
  
 获取长度: len()  例:len(list) 
  
  
  
第四章 操作列表 
  
4.1 遍历 
  
 for循环:增强for循环和普通for循环 
  
 例: for  name  in names: 
  
    print(name) 
  
 or:  for i in range(0,len(names)): 
  
    print(names[i]) 
  
4.2 注意事项 
  
 命名:尽量用单数和复数,好区别:如  for cat in cats: 
  
 缩进:for循环中执行的代码必须缩进,才能正常循环。 
  
 冒号:for循环语句的冒号是标识循环开始的,必须有。 
  
4.3数值列表 
  
 列表很适合存储数字集合。 
  
 一个范围: range(m,n)   注:m-开始    n-结尾      含头不含尾 
  
 指定步长: range(m,n,x) 注:m-开始    n-结尾   x-步长   含头不含尾 
  
 装换为列表:numbers = list(range(1,6)) 
  
 统计函数: 
  
  digits = [1,2,3,4,5,6,7,8,9,0] 
  
  min(digits) 
  
  max(digits) 
  
  sum(digits) 
  
 列表解析: 用一行代码生成列表 
  
  例: aquares = [value for value in range(0,10)] 
  
4.4 切片 
  
 定义:通过指定索引,获取列表的一个子集 
  
  players = ['charles','martina','michael','florence','eli'] 
  
  players[0:3],players[1:4],players[:3],players[2:],players[-3:],players[:] 
  
 遍历:for player in players[:3]: 
  
 复制列表:创建一个包含整个列表的切片 [:] 
  
  my_foods = ['pizza','falafel','carrot cake'] 
  
  friend_foods = my_foods[:] 
  
   
  
4.5 元组 
  
 定义:不可修改的列表,用圆括号()来包裹标识. dimensions = (200,50) 
  
 遍历:for dimension in dimensions: 
  
 修改元组变量:重新给变量赋值 
  
 

   4.6 代码编写格式指南 
  
 PEP8 
  
 缩进:4个空格 
  
 行长: 不超过80字符 
  
    注释行长不超过72字符 
  
 空行:分割代码块 
  
 

   第五章 if语句 
  
5.2 条件测试:值为 Ttue 或 Flase 的表达式。 
  
 相等:=  
  
 不等:!= 
  
 多条件:and  age>22 and age<36 
  
   or  age>22 or age==18 
  
 列表中是否包含特定值:in  not in 
  
   例:requested = ['1','2','3'] 
  
    '1' in requested 
  
    '2' not in requested 
  
 布尔表达式: 
  
5.3 if语句 
  
 if 
  
 if-elif 
  
 if-elif-else 
  
5.4 if处理列表 
  
 检查特殊元素:循环套if 
  
 确定列表不为空:if套循环 
  
  
  
第六章 字典 
  
6.1 定义:用花括号包裹的一系列键值对。键值之间用冒号分隔,键值对之间用逗号分隔。 
  
 例: alien_0 = {'color':'green','points':'5'} 
  
6.2 访问:print(alien_0['color']) 
  
 添加:依次指定字典名,用方括号括起的见和相关联的值 
  
  例:alien_0['x_position'] = 0 
  
 修改:依次指定字典名,用方括号括起的键和与该键相关联的新值 
  
 删除:del 字典名[要删除的键] 
  
6.3 遍历: 
  
 遍历所有键值对:items():返回一个键值对列表 
  
  例: for key,value in alien.items(): 
  
 遍历所有键:keys():返回一个键的列表: 
  
  例:for key in alien.keys():    或者  for key in alien: 
  
 按顺序遍历所有键:用sorted()先排序再遍历 
  
  例: for key in sorted(alien.keys()): 
  
 遍历字典中的所有值:values(): 返回一个值的列表 
  
  例: for value in alien.values(): 
  
 剔除重复项再遍历值: set() 
  
  例: for value in set(alien.values()): 
  
6.4 嵌套: 
  
 定义:将一系列字典存储在列表中,或将列表作为值存储在字典中。 
  
 字典列表: 
  
 在字典中存储列表: 
  
 在字典中存储字典: 
  
  
  
第7章 用户输入和while循环 
  
7.1用户输入字符串: input() 
  
 字符串转数字 : int() 
  
 求模运算符: % 
  
7.2 while循环 
  
 格式: while 条件: 
  
 使用标志: 
  
 结束循环:break 
  
 结束循环余下代码,开始下个循环 continue 
  
 用途:在循环的途中修改字典,列表。 
  
  
  
第8章 函数 
  
8.1 定义:带名字的代码块。用于完成具体的工作 
  
 格式:  
  
  def 函数名(参数): 
  
   代码块 
  
8.2 实参和形参 
  
 实参:调用函数的时候传递给函数的实际值。 
  
 形参:定义函数的时候括号中的变量名。 
  
 关键字实参:在调用方法的时候指明形参。格式类似于:   函数名(形参=实参) 
  
 默认值:在定义函数的时候设置默认值。  格式类似于: def  函数名(形参=默认值) 
  
 实参不匹配错误:实参数量不对时。 
  
8.3 返回值:函数中用return关键字返回值,调用方法的时候用变量接收 
  
 实参可选,不必填的参数设置默认值 
  
8.4 传递列表 
  
8.5 传递任意数量的实参 
  
 def make_pizza(*toppings):     *表明这个是一个参数的元组。可以接受任意数量的参数 
  
 def make_pizza(size,*suppings):  结合使用位置实参和任意数量实参 
  
 def_build_profile(first,last,*user_info): 使用任意数量的关键字实参,user_info传递键值对 
  
8.6 将函数存储在模块中 
  
 模块:扩展名位.py的文件。 
  
 导入整个模块:在同一目录层级下, 直接导入:  import module_name 
  
     使用模块中的函数: module_name.function_name() 
  
 导入特定函数: from module_name import function_name 
  
     from module_name import function_0,function_1,function-2 
  
 使用as给函数指定别名:from module_name import function_name  as 别名 
  
 使用as给模块指定别名:import module_name as 别名 
  
 导入模块中所有函数: from  module_name import * 
  
8.7 函数编写指南: 
  
 函数名称具有描述性,只用小写字母和下划线。 
  
 必须有注释,在函数定义后面。文档字符串格式。 
  
 函数之间用两行空行分开。 
  
  
  
第9章 类 
  
 类:表示现实世界中的事物和情景。定义一大类对象都有的通用行为。 
  
 对象:基于类创建,具备类的通用行为和独特个性。 
  
 实例化:根据类来创建对象。 
  
9.1 创建和使用类 
  
 定义: class Dogs():  #类名首字母要大写   class ClassName():    
  
 方法: def __init__(self,name,age):  #构造方法,self就是this。 可供类中所有方法使用。 
  
   error: Dog() takes no arguments     注意init两边是双下划线,    
  
 属性:name,age  可以通过实例访问的变量。 #self.age = age    self.name = name 
  
9.2 根据类创建实例 
  
  dog = Dogs('豆豆',6) 
  
 修改属性的值: 
  
  直接通过实例进行修改: 
  
   my_new_car.odometer_reading = 23 
  
  通过方法进行设置: 
  
   my_new_car.update_odometer(23) 
  
  通过方法进行递增: 
  
   my_new_car.increment_odometer(100) 
  
9.3 继承 
  
  一个类继承另一个类时,它将自动获得另一个类的所有属性和方法。原有的类称为父类,新类 
  
 称为子类,子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。 
  
 创建子类时,父类必须包含在当前文件中,且位于子类前面。定义子类时,在括号中指定父类的名 
  
 字。 
  
  方法__init__()必须接受创建父类所需的信息。且在方法中有一个特殊函数super().__init__() 
  
 将父类和子类关联起来。让子类实例包含父类的所有属性。父类也叫超类。 
  
  重写:子类中和父类名字相同的方法。 
  
  将实例用过属性:将类的一部分作为一个独立的类提取出来。 
  
   
  
9.4 导入类 
  
 将类存储在模块中,然后在模块中导入类。 
  
 导入单个类: 
  
  from car import Car 
  
  my_car = Car(...) 
  
 在一个模块中存储多个类:from car import Car,ElectricCar 
  
 导入整个模块: 
  
  import car 
  
  my_beetle = car.Car(...) 
  
 导入模块中的所有类: from module_name import * 
  
 在一个模块中导入另一个模块: 
  
  
  
9.5 Python 标准库 
  
 顺序字典: from collections import OrderedDict 
  
  
  
9.6 类编码风格 
  
 类名:驼峰命名法,首字母大写,不用下划线 
  
 实例名/模块名:小写,单词之间用下划线隔开 
  
 类注释:类定义后面加文档字符串,描述类的功能。 
  
 分割方法:一个空行 
  
 分割类:两个空行 
  
 导入顺序:先导入标准模块库,再添加一个空行,再导入自己编写的模块。 
  
  
  
  
  
第10章 文件和异常 
  
 异常:Python创建的特殊对象,用于管理程序运行时出现的错误。 
  
  
  
10.1 从文件中读取数据 
  
  read()  : 一次性读取整个文件内容。推荐使用read(size)方法,size越大运行时间越长 
  
  readline()  :每次读取一行内容。内存不够时使用,一般不太用 
  
  readlines()   :一次性读取整个文件内容,并按行返回到list,方便我们遍历 
  
 全部读取: 
  
 with open('pi_digits.txt') as file_object: 
  
  contents = file_object.read() 
  
  print(contents) 
  
 with 标识用,不用手动打开(open),关闭(close) 
  
  #相对路径报错,不知道是不是notepad++的问题。绝对路径可以找到文件。直接点击文件运行也可以,就是在 
  
  # notepad++中运行找不到。 
  
 逐行读取: 
  
 with open(filename) as file_object: 
  
 for line in file_object: 
  
  print(line.rstrip()) 
  
 注:文件读取的本质是用迭代器一个个读,因而一个文件读到最后以后,再调用读取的方法,就读不到东西了。 
  
 放到列表中: 
  
 with open(filename) as file_object: 
  
  lines = file_object.readlines() 
  
   
  
10.2 写入文件 
  
  write(string)需要传入一个字符串做为参数,否则会报错 
  
  writelines(list)既可以传入字符串又可以传入一个字符序列,并将该字符序列写入文件 
  
  注意 :writelines()必须传入的是字符序列(字符串列表),不能是数字序列 
  
 with open('F:\pythonStudy\learning_python.txt','a') as file_object: 
  
 file_object.write('追加了一句话。') 
  
 open参数:  a - 追加 w - 直接写 r - 只读 
  
  
  
10.3 异常 
  
 格式: try-exists-else 
  
 例:  try: 
  
    print(5/0) 
  
   exists: 
  
    print("You can't divide by zero!") 
  
   else: 
  
    print('success') 
  
  
  
10.4 存储数据 
  
 json模块用来存取数据,很方便的转为python可以读取的数据类型。 
  
 存:json.dump(数据,文件) 
  
 取:json.load(文件) 
  
 重构:代码写好后,将代码划分为一系列完成具体工作的函数,这样的过程称为重构。 
  
  
  
  
  
第11章 测试代码 
  
 测试模块:unittest 
  
 单元测试:用于核实函数的某个方面没有问题。 
  
 测试用例:是一组单元测试。 
  
 全覆盖式测试用例: 
  
 具体用法: 
  
  1.导入unittest测试模块。导入要测试的方法或类。 
  
  2.创建测试类,继承了unittest.TestCase类。没有__init__方法,直接写测试方法。测试方法的名字用test开头 
  
   后面的单词最好具有描述性,说清这个方法是测试什么的。 
  
  3.在测试方法中调用需要测试的方法,然后用断言方法来判断是否通过测试 
  
   断言方法:  self.assertEqual(方法返回值,预计返回值) 
  
  4.在最后面用 unittest.main() 启用这个测试用例。     
  
 断言方法: 
  
  assertEqual(a,b)   核实 a == b 
  
  assertNotEqual(a,b)   核实 a != b 
  
  assertTrue(x)    核实 x 为 True 
  
  assertFalse(X)    核实 x 为 False 
  
  assertIn(item,list)   核实 item 在 list 中 
  
  assertNotIn(item,list)   核实 item 不在 list 中 
  
 setUp():测试类的初始化方法,用于创建一个需要测试的类的单例。