《Python编程从入门到实践》笔记

戏子无情 提交于 2020-03-24 10:57:23

3 月,跳不动了?>>>

阅读时间:
2019.08.25----2019.08.30:第一部分 基础知识。


第2章:变量

1、变量的命名和使用

  • 变量名只能包含字母、数字和下划线。可以字母或者下划线打头,但不能以数字打头。例如:可以为message_1,不能为1_message。
  • 变量名不能包含空格,但可使用下划线分隔。例如:变量名greeting_message,不能为greeting message。
  • 不能用Python关键字和函数名作为变量名。
  • 慎用小写字母l和大写字母O。

2、字符串
用引号括起来的都是字符串,其中的引号可以是单引号,也可以是双引号。可以在字符串中包含引号和撇号。

  • title()方法:以首字母大写的方式显示每个单词。
  • upper()方法:改为全部大写。
  • lower():改为全部小写。
name.title()
name.upper()
name.lower()
  • 删除空白字符,使用.rstrip()(删除末尾)这种删除只是暂时的要想永久删除这个字符串的空白,必须将删除操作的结果存回到变量中;.lstrip()删除开头的空白;strip()同时删除字符串两端的空白。
  • str(age)将非字符串值转为字符串。

第3章:列表

列表是一系列按特定顺序排列的元素组成。可包含字母、数字等,元素之间可以没有任何关系。用[]来表示列表,并用逗号分隔其中的元素。

bicycles = ['trek', 'cannondale', 'redline']

使用print()打印出来时包含[]
1、访问列表元素
索引从0开始而不是1,Python可以通过索引-1直接访问最后一个列表元素。
2、在列表中添加元素


  • 在列表末尾添加,使用 .append('China')
  • 在列表中插入元素,使用insert(),可在任何位置添加新元素,因此需要指定新元素的索引和值。moto.insert(0,'ducati')

3、从列表中删除元素

  • del删除,可删除任何位置处的元素。del moto[0]
  • pop()方法,删除列表末尾的元素。moto.pop()
  • pop(index),弹出列表中任何位置处元素。moto.pop(0)
  • 根据值删除元素。moto.remove('ducati'),删除掉ducati,只删除掉第一个指定的值。若删除的值出现多次,需使用循环判断。

4、组织列表

  • 方法sort() 对列表进行永久性排序。cars.sort(),永久性修改了列表元素的排列顺序。cars.sort(reverse=True)进行逆向排序。
  • 函数sorted() 对列表进行临时排序。sorted(cars,reverse=True)
  • 反转列表,cars.reverse()。不是按与字母相反的顺序排列列表元素,而只是反转列表元素的排列顺序。reverse()为永久性修改。
  • 函数len()获取列表的长度。len(cars)。Python计算列表元素时从1开始。

第4章:操作列表

1、for循环

cars = ['bmw', 'audi', 'toyota', 'subaru']
for car in cars:
    print(car)

2、创建数字列表

  • 使用函数range(),range(1,5),打印出1~4。
  • 使用函数list()将range()的结果直接转换为列表,也可将range()作为list()的参数进行输出。numbers = list(range(1,5))。函数range()还可指定步长,例如range(2,11,2),从2开始,不断加2,直到达到或超过终止11。
  • 数字列表的最大值、最小值、总和。max(digits)、min(digits)、sum(digits)

3、使用列表的一部分

  • 切片,指定第一个索引和最后一个索引加1,例如:cars[0:3],打印0、1、2这3个元素;若没有指定第一个索引,将从列表开头开始,cars[:3]。类似的,指定第一个索引,一直到最后,cars[1:]
  • 复制列表,new_cars = cars[:]

4、元组
列表是可修改可变化的数据集。不可变的列表被称为元组,元组使用圆括号

  • 定义元组,dimensions = (200, 50)
  • 遍历元组中的所有值,像列表一样使用for循环遍历。
  • 修改元组变量。给元组变量赋值是合法的。

第5章:if语句

1、使用in和not in检查特定值是否包含在列表中。
'bmw' in cars
2、if-elif-else结构
3、确定列表不是空


cars = ['bmw', 'audi', 'toyota', 'subaru']
if cars:  #cars不为空
    for car in cars:
        print("buy " + car)
    print("\nFinish.")
else:
    print("OK!")
#执行结果:
buy bmw
buy audi
buy toyota
buy subaru

Finish.

第6章:字典

字典是一系列键-值对。可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。字典用放在==花括号{}==中的一系列键-值对表示。

alien = {'color': 'green', 'points': 5}
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }

1、删除键-值对(删除的键值对永久消失)

alien = {'color': 'green', 'points': 5}
del alien['point']

2、遍历字典

  • 遍历所有的键-值对。for key, value in favorite_languages.items():
  • 遍历字典中的所有键。for name in favorite_languages.keys():
  • 按顺序遍历字典中的所有键。for name in sorted(favorite_languages.keys()):
  • 遍历字典中的所有值。for language in favorite_languages.values():。若要剔除重复项,可使用集合(set),集合类似于列表,但每个元素必须是独一无二的,for language in set(favorite_languages.values()):

3、嵌套
将一系列字典存储在列表中,或将列表作为值存储在字典中,甚至在字典中嵌套字典。
1)字典列表(在列表中存储字典)

alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
aliens = [alien_0, alien_1]
for alien in aliens:
	print(alien)

2)在字典中存储列表

favorite_languages = {
    'jen': ['python', 'ruby'],
    'sarah': ['c'],
    'edward': [ 'ruby', 'go'],
    'phil': ['python','haskell'],
    }
for name, languages in favorite_languages.items():
    print("\n" + name.title() + "'s favorite languages are:")
    for language in languages:
        print("\t" + language.title())

3)在字典中存储字典
在字典中嵌套字典,代码会变得复杂。尽可能让每位用户的字典的结构都相同,这样使嵌套的字典处理起来更容易。

users = {
    'aeinstein': {
        'first': 'albert',
        'last': 'einstein',
        'location': 'princeton',
        },
    'mcurie': {
        'first': 'albert',
        'last': 'einstein',
        'location': 'princeton',
        },
    }

第7章:用户输入和while循环

1、函数input()
函数input()接受一个参数:即要向用户显示的提示或说明。
message = input("Tell me something:")
2、使用标志


active = True
while active:
    message = input("prompt")
    if message == 'quit':
        active = False
    else:
        print(message)

3、break和continue
break为结束循环,continue为结束当前循环进入下一次循环。
4、使用while循环来处理列表和字典

  • 在列表之间移动元素。可使用pop() 以每次一个的方式从列表删除。
  • 删除包含特定值的所有列表元素。
while 'cat' in pets:
   pets.remove('cat')

第8章:函数

1、实参和形参
def greet_user(username)的定义中,username是一个形参——函数完成其工作所需的一项信息。在greet_user('jesse')的调用中,值jesse是一个实参,实参是调用函数时传递给函数的一项信息。将实参jesse传递给了函数greet_user(),这个值被存储在形参username中。
2、关键字实参
关键字实参是传递给函数的名称-值对。


def describe_pet(animal_type, pet_name):
#调用时,使用关键字实参时,务必准确地指定函数定义中的形参名
describe_pet(animal_type='hamster', pet_name='harry')

3、默认值
编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则,将使用形参的默认值。

def describe_pet(pet_name, animal_type='dog')
#调用时,3种方式。
1) describe_pet(pet_name='willie')
2) describe_pet('willie')
3) describe_pet(pet_name='harry', animal_type='hamster')
4) describe_pet('harry', 'hamster')

4、传递任意数量的实参
python允许函数从调用语句中收集任意数量的实参。将实参封装到一个元组中。

def make_pizza(*toppings):
    print(toppings)
make_pizza('pepperoni')
#输出: ('pepperoni',)
make_pizza('pepperoni', 'green peppers', 'extra cheese')
#输出: ('pepperoni', 'green peppers', 'extra cheese')

5、结合使用位置实参和任意数量实参
如果要让函数接收不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。

def make_pizza(size, *toppings):

#调用时
make_pizza(16, 'pepperoni')
make_pizza(12, ' mushrooms',  'green peppers', 'extra cheese')

6、将函数存储在模块中
在pizza.py中,def make_pizza(size, *toppings):
在making_pizzas.py中,

import pizza

pizza.make_pizza(16, 'peppperoni')

7、导入特定的函数

  • from module_name import function_name。例如,from pizza import make_pizza
  • 通过用逗号分隔函数名,从模块中导入任意数量的函数:from module_name import function_0, function_1, function_2

8、使用as给函数指定别名
如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短而独一无二的别名。
指定别名的通用语法如下:from module_name import function_name as fn
例如给函数make_pizza()指定别名mp()。from pizza import make_pizza() as mp


9、使用as给模块指定别名
给模块指定别名的通用语法如下:import module_name as mn
例如给模块pizza指定别名p。import pizza as p

10、导入模块中的所有函数
from module_name import *


第9章:类

1、创建类:
根据类来创建对象被称为实例化。

#dog.py
class Dog():
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def sit(self):
        print(self.name.title() + " is now sitting.")
    def roll_over(self):
        print(self.name.title + " rolled over.")
dog = Dog('pitte', 16)
print(dog.name + ", " + str(dog.age))

方法__init__()是一个特殊的方法。开头和末尾各有两个下划线,这是一种约定,避免python默认方法与普通方法发生名称冲突。
其中形参self必不可少,还必须位于其它形参的前面。 python调用这个__init__()方法来创建类实例时,将自动传入实参self,每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

2、继承
子类继承父类的所有属性和方法,同时还可以定义自己的属性和方法。

class Car():
    ...
    
class ElectricCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
my_tesla = ElectricCar('tesla', 'model s', 2016)

创建子类时,父类必须包含在当前文件中,且位于子类前面。定义子类时,必须在括号内指定父类的名称。方法__init__()接收Car实例所需的信息。
super()是一个特殊函数,帮助python将父类和子类关联起来。

3、导入类
from car import Car
from car import Car, ElectricCar
import car



第10章:文件和异常

1、读取整个文件

file_path = r'C:\Users\lenovo\Desktop\filename.txt'
with open(file_path) as file_object:
    contents = file_object.read()
    print(contents)

注:
在使用绝对路径时,运行时可能会出现报错,SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: tr,引起这个错误的原因就是转义问题。
3种解决方法:

  • 1)在路径前面加r,即保持字符原始值的意思。file_path = r'C:\Users\lenovo\Desktop\filename.txt'
  • 2)替换为双反斜杠。file_path = 'C:\\Users\\lenovo\\Desktop\\filename.txt'
  • 3)替换为正斜杠。file_path = 'C:/Users/lenovo/Desktop/filename.txt'

2、逐行读取

file_path = r'C:\Users\lenovo\Desktop\filename.txt'
with open(file_path) as file_object:
    for line in file_object:
        print(line)

3、写入空文件

file_path = r'C:\Users\lenovo\Desktop\filename.txt'
with open(file_path, 'w') as file_object:
    file_object.write("I love herbin.")

调用open()时提供了两个实参。第一个实参为要打开的文件的名称,第二个实参(‘w’)指要以写入模式打开这个文件。(‘w’)模式打开文件后清空再写入。
可使用‘a’将内容添加到文件末尾,而不是覆盖文件原始内容。
只能将字符串写入文本文件。若要将数据存储到文本文件中,必须先使用函数str()将其转换为字符串格式。

  • 读取模式(‘r’)
  • 写入模式(‘w’)
  • 附加模式(‘a’)
  • 读取和写入文件的模式(‘r+’)

4、异常
使用try-except代码块处理。
将可能引发异常的代码放在try语句中。
1)使用try-except代码块


try:
    print(5/0)
except:
    print("error.")

2)else代码块

try:
    answer = int(first_num) / int(second_num)
except:
    print("error.")
else:
    print(answer)

可在except: 中加入pass,出现异常时什么都不做。

5、存储数据
1)使用json.dump()和json.load()来存储数字列表:

import json
numbers = [2, 3, 5, 7, 11, 13]
filename = 'numbers.json'
with open(filename, 'w') as f_obj:
    json.dump(numbers, f_obj)

使用json.load()将这个列表读取到内存中:

with open(filename) as f_obj:
	numbers = json.load(f_obj)
发布了131 篇原创文章 · 获赞 255 · 访问量 34万+
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!