学习笔记

PythonChapter1~8_2019-05-02

2019-05-02  本文已影响0人  AJohn11

总注:

  1. 函数用法是 函数(参数如列表名),方法用法是 数据.方法名(参数or空)
  2. pip 安装中的权限的问题:
    sudo pip3 install packagename
    代表进行全局安装,安装后全局可用。如果是信任的安装包可用使用该命令进行安装。
    pip3 install --user packagename
    代表仅该用户的安装,安装后仅该用户可用。处于安全考虑,尽量使用该命令进行安装。
  3. if \_\_name\_\_ == '\_\_main\_\_':下的代码只有在文件作为脚本直接执行才会被执行, import的时候不会被执行。
  1. sys.argv得到的是输入的所有参数,即命令行Terminal中输入的python Cplexpythonapilpex1.py -r中python后面的部分,以列表形式保存,print(sys.argv)输出出来结果是:['Cplexpythonapilpex1.py', '-r']
if __name__ == "__main__":
    if len(sys.argv) != 2 or sys.argv[1] not in ["-r", "-c", "-n"]:
        print("Usage: lpex1.py -X")
        print("   where X is one of the following options:")
        print("      r          generate problem by row")
        print("      c          generate problem by column")
        print("      n          generate problem by nonzero")
        print(" Exiting...")
        sys.exit(-1)
    lpex1(sys.argv[1][1])

Chapter1 起步

1. python自带在终端窗口运行的解释器

2. print("hello world!")

3. 在不同系统中搭建python编程环境

Chapter2 变量和简单数据类型

1. 运行hello_world.py中发生的情况

2. 变量

有关变量的规则:

  1. 变量名只能以字母或下划线打头,只能包含字母、数字、下划线,不能含空格。(目前应使用小写的变量名,大写也没错,但是最好避免)
  2. 不要将Python关键字和函数名以及保留做特殊用途的单词用作变量名。
  3. 变量名应既简短又具有描述性。
  4. 慎用字母'l'和'o',容易被和数字1,0混淆。

3. 字符串——一系列字符

Python中用引号括起的都是字符串(单引号、双引号),这种灵活性可以让你在字符串中包含 引号 和 撇号。

  1. 修改字符串的大小写——"方法":Python可对 数据 进行的操作, 后跟括号以提供额外的信息。

name="ada lovelace"

print(name.title())#首字母大写

print(name.upper())#全大写

print(name.lower())#全小写

#句点'.'让Python对变量name执行方法制定的操作,title()是方法用来 首字母大写显示单词,lower()小写,upper()大写。

  1. 合并(拼接)字符串

Python使用加号"+"来合并字符串,这种方法称为"拼接"。

  1. 使用制表符'\t'和换行符'\n'来添加空白

空白:泛指任何非打印字符

制表符'\t',换行符'\n'

  1. 删除空白——可以删除字符串开头和末尾的空白

rstrip()删除末尾空格,

lstrip()删除开头空格,

strip()删除两边空格。

这种是‘暂时’的删除,要永久删除要对变量重新赋值!

favorite_language=' python '
print(favorite_language.rstrip()+'|')#删除末尾空格
print(favorite_language.lstrip()+'|')#删除开头空格
print(favorite_language.strip()+'|')#删除两边空格
  1. 使用字符串时避免语法错误
  1. Python 2中的print语句无需加括号

4. 数字

  1. 整数
    Python中可对整数进行如下运算:
    +-*/ -> 加减乘除
    乘方 -> **
    运算次序 -> ()来改变
    空格' ' -> 不影响表达式,只是帮助阅读
  2. 浮点数--带小数点的数字,小数点可出现在数字的任何位置!
>>> 0.2+0.1
0.30000000000000004

所有语言都存在这种问题,暂时忽略多余的小数位即可。

  1. 使用函数str()避免类型错误
  1. Python 2中的整数

5. 注释--使用自然语言说明程序

  1. 编写注释
  1. 该编写什么样的注释

6. Python之禅

Beautiful is better than ugly.
Simple is better than complex.
Complex is better than complicated.
Readibility counts.
There should be one-- and preferably only one --obvious way to do it.
Now is better than never.
漂亮、优雅、简单、正确性!

Chapter3 列表简介

1. 列表--有序集合

Python中的表示:

[] 列表
, 分隔元素
print 打印列表的内部表示包括"[]"
  1. 访问列表元素
  1. 索引从0开始(小心 差一错误)
  1. 使用列表中各个值

2. 修改、添加和删除元素

  1. 修改列表元素
    语法类似访问列表--指定列表名+元素索引,再指定新值
  2. 在列表添加元素
    (1) 列表末尾添加元素 ->append()

(3) 列表中删除元素
可以根据 位置 或 值 来删除列表中元素
1-使用del语句删除元素 ->del 列表名[索引]
如果知道删除的元素在列表中的位置,可使用del语句
2-使用方法pop()删除元素 -> 删除末尾元素,接着使用它
类似于弹出栈顶元素,并接着使用其值
3-弹出列表中任何位置的元素 -> pop(i)
注意:使用pop()后,被弹出元素不再在列表里了!
4-根据值删除元素->remove(),只删除第一个指定值元素
不知道从列表中删除的值所处位置,只知道要删除的值,可以使用方法remove()。
remove()从列表中删除元素时,也可以接着使用它的值。

3. 组织列表

  1. 使用方法sort()对列表进行永久性排序
  1. 使用函数sorted()对列表进行临时排序
  1. 反转排列列表顺序 -> 方法reverse()--永久性改变
  2. 确定列表长度 -> 函数len(列表名)(从1开始,应该无差一错误)

4. 使用列表时避免索引错误

Chapter4 操作列表

注意:

1. 遍历 整个列表

需要对列表中每个元素都进行相同的操作,可使用Python中 for循环。

  1. 深入地研究循环
  1. 在for循环中执行更多操作
  1. 在for循环结束后执行一些操作

2. 避免缩进错误

Python通过使用缩进让代码变得易读。

  1. 忘记缩进--会提示错误
  1. 忘记缩进额外的代码行--逻辑错误 语法可能正确
  1. 不必要的缩进--Python会指出
  2. 循环后不必要的缩进--逻辑错误
  1. 遗漏冒号

3. 创建数字列表

  1. 使用函数range(开始值,结束值(,步长))
  1. 使用range()创建数字列表
  1. 对数字列表进行简单的统计计算--max(),min(),sum()
  2. 列表解析--将for循环和创建新元素的代码合并成一行,并自动附加新元素 -> 列表名=[表达式 for循环]
squares=[value**2 for value in range(1,10)]
print(squares)

4. 使用列表的一部分

  1. 切片 -- 列表名[起始:终止+1],起始终止可缺省, 可负数
  1. 遍历切片--for循环中使用切片
  2. 复制列表--用 切片!省略起始和终止索引[:], 不能直接赋值!
    注意:如果直接将列表赋值,相当于创建了一个关联,两个变量起始指向同一个列表!

5. 元组 -- 使用 圆括号(), 可以使用索引访问其元素

  1. 定义元组、遍历元组--类似定义、遍历列表,用for循环即可
  2. 修改元组变量 -- 只能重新定义整个元组

6. 设置代码格式

  1. 格式设置指南
    Python改进提案(PEP) PEP8--提供了代码格式设置指南
  2. 缩进--影响运行!
    每级缩进使用4个空格
    制表符和空格尽量不要混用,容易造成问题
  3. 行长
    建议每行不超过80个字符,注释行不超过72字符
  4. 空行--不影响运行
    将程序不同部分分开可使用空行。
    空行不影响运行,缩进影响。
  5. 其他格式设置指南--未完待续

Chapter5 if语句 (和for循环一样,有冒号!!!)

1. 简单示例

cars=['bmw','audi','toyota','subaru']
for car in cars:
    if car=='bmw':
    print(car.upper())
else:
    print(car.title())

2. 条件测试(也称 布尔表达式)

  1. 检查是否相等(相等运算符==)
    大多数条件测试将一个变量的当前值同特定值比较。
    一个等号= -> 陈述
    两个等号== -> 发问
  2. 检查是否相等时不考虑大小写--用方法lower()全部改为小写
    Python检查是否相等时 区分大小写!!!
  3. 检查是否不相等(不相等!=)
    大部分程序--检查是否相等
    有时候--检查是否不等效率高
  4. 比较数字--可包含各种数学比较
print(1==1.0)

结果:True

  1. 检查多个条件--关键字 and 和 or
    (1) 使用and检查多个条件
  1. 检查特定值是否在列表中--关键字 in (元素 in 列表)
  1. 检查特定值是否不包含在列表中--关键字 not in
  2. 布尔表达式--条件测试的别名
    布尔表达式结果要么True要么False,常用来记录条件。

3. if语句(冒号!!!)

  1. 简单if语句
if conditional_test:
    do something

缩进作用与for循环中相同。
通过测试--执行所有缩进行;否则--忽略。

  1. if-else
    True->执行一个,False->执行另一个
  2. if-elif-else -- 检查超过两个的情形
  3. 使用多个elif代码块
  4. 省略else代码块
  1. 测试多个条件

4. 使用if语句处理列表

  1. 检查特殊元素
  2. 确定列表非空
    之前--假设列表至少一个元素。
    其实,for循环前检查列表非空很重要。
if 列表名:#列表非空时返回True,列表空时返回False
  1. 使用多个列表 -- 用好关键字in, 理清楚逻辑关系
for requested_topping in requested_toppings:
    if requested_topping in available_toppings:
        print('Adding'+requested_topping+'.')
else:
    print('Sorry, we do not have'+requested_topping+'.')

5. 设置if语句的格式

PEP8 提供的建议:
在比较运算符如==,>=,<=,!=等两边各添加一个空格。

Chapter6 字典--花括号"{}"

1. 简单示例

alien_0={'color':'green','points':5}
print(alien_0['color'])
print(alien_0['point'])
  1. 使用字典

3. 遍历字典

  1. 遍历字典中所有键-值对
user_0={
    'username':'efermi',
    'first':'enrico',
    'last':'fermi',
    }
for key,value in user_0.items():
    print('\nKey:'+key)
    print('Value:'+value)
  1. 遍历字典中所有--方法keys()
  1. 按顺序遍历字典中的所有
    字典->记录键和值的关联关系,但是获取字典元素时,获取的顺序是不可预测的。
    以特定的顺序返回元素->for循环中对返回的键进行排序(使用sorted()来获得按特定顺序排列的建列表的副本)。
  2. 遍历字典中的所有--方法values()

4. 嵌套

  1. 字典列表
alien_0={'color':'green','points':5}
alien_1={'color':'green','points':5}
alien_2={'color':'green','points':5}
aliens=[alien_0, alien_1, alien_2]
print(aliens)
  1. 字典中存储列表
    将列表存储在字典中,如:
pizza={
    'crust':'thick',
    'toppings':['mushrooms','extra cheese'],
    }
  1. 字典中存储字典

Chapter7 用户输入和while循环

1. 函数input()的工作原理

message=input("Tell me something, and I will repeat it back to you: ")
print(message)

Terminal:

python Chapter7.py 
Tell me something, and I will repeat it back to you: ooooo
ooooo
  1. 编写清晰的程序
prompt="if you tell us who you are, we can personalize the message you see."
prompt+="\n What is your first name?"
name=input(prompt)
print("\nHello, "+name+'!')

Terminal:

python Chapter7.py 
if you tell us who you are, we can personalize the message you see.
 What is your first name?ooo

Hello, ooo!
  1. 使用int()获取数值输入
  1. 求模运算符--%
  1. Python2.7中获取输入

2. while循环简介

while循环--不断运行,知道指定条件不满足为止。

  1. 使用while循环--注意冒号
  1. 让用户选择何时退出
prompt="\nTell me something, and I will repeat it back to you: "
prompt+="\nEnter 'quit' to end the program."
message=''
while message != 'quit':
    message=input(prompt)
    if prompt != 'quit':
        print(message)

Terminal:

Tell me something, and I will repeat it back to you: 
Enter 'quit' to end the program.ooo
ooo

Tell me something, and I will repeat it back to you: 
Enter 'quit' to end the program.kkk
kkk

Tell me something, and I will repeat it back to you: 
Enter 'quit' to end the program.quit
  1. 使用标志
  1. 使用break退出循环
  1. 在循环中使用continue
  1. 避免无限循环

3. 使用while循环处理列表和字典

  1. 在列表之间移动元素
    用方法pop()从一个列表中删除,用current存储其值,再用方法append()(或者insert(i)其实也可以啊)把它加入到另一个列表中。
    例:
unconfirmed_users=['alice','brian','candace']
confirmed_users=[]

while unconfirmed_users:
    current_user=unconfirmed_users.pop()
    print("Verifying user: "+current_user.title())
    confirmed_users.append(current_user)

print("\nThe following users have been confirmed: ")
for confirmed_user in confirmed_users:
    print(confirmed_user.title())

输出:

Verifying user: Candace
Verifying user: Brian
Verifying user: Alice

The following users have been confirmed: 
Candace
Brian
Alice
  1. 删除包含特定值的所有列表元素
    使用方法remove删除列表中的特定值,但是remove只能删除掉一个,要删除掉所有特定值的元素的方法--使用好while和in
while 不想要的值 in 列表:
    列表.remove(不想要的值)

例:

pets=['dog','cat','dog','goldfish','cat','rabbit','cat']
print(pets)

while 'cat' in pets:
    pets.remove('cat')
print(pets)

输出:

['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
['dog', 'dog', 'goldfish', 'rabbit']
  1. 使用用户输入来填充字典
while 标志:
    新键=input("新键输入提示")
    新值=input("新值输入提示")
    字典名[新键]=新值
    标志的改变代码块
其他操作

我的问题:对重名的用户未处理,还可以进一步改进!

Chapter8 函数

1. 定义函数--关键字def

def 函数名(完成任务需要的参数):
    """文档字符串(注释), 描述函数是做什么的"""
    函数体(缩进部分)
  1. 向函数传递信息
    最简单的例子:
def greet_user(username):#username是形参
    """显示简单的问候语"""
    print("Hello, "+username.title()+"!")

greet_user('jessi')#jessi是实参
greet_user('sarah')

输出:

Hello, Jessi!
Hello, Sarah!
  1. 实参和形参
    函数greet_user(username)中,

2. 传递实参

  1. 位置实参
    调用函数时,Python必须将调用中的每个实参关联到函数定义中的一个形参
    位置实参:最简单的关联方式--基于实参的顺序关联
  1. 关键字实参--传递给函数的名称-值对
  1. 默认值
def describe_pet(pet_name, animal_type='dog'):
    """显示宠物的信息"""
    print("\nI have a "+animal_type+".")
    print("My "+animal_type+"'s name is "+pet_name.title()+".")

describe_pet('hamster', 'harry')#顺序实参
describe_pet(animal_type='hamster', pet_name='harry')#关键字实参
describe_pet(pet_name='willie')#默认值
#describe_pet(animal_type='hamster', pet_name='harry')<=>describe_pet(pet_name='harry', animal_type='hamster')

输出结果均为:


I have a harry.
My harry's name is Hamster.

I have a hamster.
My hamster's name is Harry.

I have a dog.
My dog's name is Willie.
  1. 等效的函数调用
    鉴于可以混合使用位置实参、关键字实参和默认值--通常有多种等效的函数调用方式。
  2. 避免实参错误

3. 返回值

  1. 返回简单值
  1. 让实参变成可选的
  1. 返回字典
  1. 结合使用函数和while循环

4. 传递列表

  1. 在函数中修改列表
  1. 禁止函数修改列表

5. 传递任意数量的实参

def make_pizza(*toppings):#星号让Python创建名为toppings的空元组
    """打印顾客点的所有配料"""
    print(toppings)

make_pizza('pepperoni')
make_pizza('mushrooms','green peppers', 'extra cheese')

输出:

('pepperoni',)
('mushrooms', 'green peppers', 'extra cheese')
  1. 结合使用位置实参任意数量实参
def make_pizza(size, *toppings):#星号让Python创建名为toppings的空元组
    """概述要制作的比萨"""
    print("\nMaking a "+str(size)+
        "-inch pizza with the following toppings:")
    for topping in toppings:
        print("- "+topping)

make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers', 'extra cheese')

输出:


Making a 16-inch pizza with the following toppings:
- pepperoni

Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese
  1. 使用任意数量的关键字实参
def build_profile(first,last,**user_info):#2个星号让Python创建名为user_info的空字典
    """创建一个字典,其中包含我们知道的有关用户的一切"""
    profile={}
    profile['first_name']=first
    profile['last_name']=last
    for key, value in user_info.items():
        profile[key]=value
    return profile

user_profile=build_profile('albert','einstein',location='princeton',field='physics')
print(user_profile)

输出:

{'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton', 'field': 'physics'}

6. 将函数储存在模块中

  1. 导入整个模块
#pizza.py
def make_pizza(size, *toppings):#星号让Python创建名为toppings的空元组
    """概述要制作的比萨"""
    print("\nMaking a "+str(size)+
        "-inch pizza with the following toppings:")
    for topping in toppings:
        print("- "+topping)

在pizza.py 同一目录下创建making_pizzas.py,调用刚创建的模块。

#making_pizzas.py
import pizza
pizza.make_pizza(16,'pepperoni')
pizza.make_pizza(12,'mushrooms','green peppers', 'extra cheese')

输出:


Making a 16-inch pizza with the following toppings:
- pepperoni

Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese
  1. 导入特定的函数
from pizza import make_pizza
make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers', 'extra cheese')
  1. 使用as函数指定别名
from pizza import make_pizza as mp
#此时用make_pizza()就会报错,或者不报错但是调用却的是现有程序里的,而非pizza里的
mp(16,'pepperoni')
mp(12,'mushrooms','green peppers', 'extra cheese')
  1. 使用as模块指定别名
import pizza as p
p.make_pizza(16,'pepperoni')
p.make_pizza(12,'mushrooms','green peppers', 'extra cheese')
  1. 导入模块中所有函数--星号*运算符

7. 函数编写指南

牢记几个细节:

def function_name(
        parameter_1, paramater_2, paramater_3, 
        paramater_4, paramater_5):
    function_body

我的问题:函数名相同形参不同的函数算相同的函数吗?这种复用可以吗?
我的测试结果:
名称相同的函数再定义时会覆盖!所以似乎是不行的。

上一篇 下一篇

猜你喜欢

热点阅读