更新记录
2018.5.24 ,更新190 ~ 195
2018.5.27, 更新196 ~ 201,下面的课程要开始讲实例了,期待
064
- bool型数据,True=1,False=0 参与运算
065
- 字符间用
+
进行连接 - 用
*
进行重复的 - 除了
+
和*
进行字符串拼接,字符串之间不能做其他运算
067
-
input(X)
将x输出到控制台 -
type(x)
查看x的变量类型 - 使用
print
函数时,用户输入的任何内容认为是一个字符串
068
-
int(x)
转换为整数 -
float(x)
转换为浮点数
077
-
%s
表示字符串 -
%d
表示整数,%06
可以用0
补足6位 -
%f
表示浮点数,%.2f
可以用来表示两位小数 -
%%
用来显示%
078 变量的命名
- 见名知意
- 字母、下划线、数字;开头不能是数字;不能与关键字重名
079 关键字
-
通过一下命令查看python的关键字
import keyword print(keyword.kwlist)
080 变量的命名规则
-
标示符区分大小写。andy 和Andy是不同的变量
-
通常在
=
左右各留一个空格 -
通常变量名由两个或者多个单词构成
a. 每个单词都使用小写字母
b. 单词之间用`_下划线连接
c. 例如:frist_name、last_name、qq_password、qq_number等
-
082 if语句的基本语法
- 代码缩进为一个
tab
键,或者4个空格 --建议使用空格- 开发时,tab和空格不要混用
084 比较关系运算符
- ==, !=
- if及下方缩进部分是完整的一部分代码。
087
-
Else
用来显示条件不成立的时候做什么事情
088
- 多行代码需要注释掉,采用
Ctrl
+/
的快捷方式 - 写
if...else...
结构,if语句后的判断结束后加:
,else
的后面也需要加:
# 注意"18"和"else"后面的":"
if age >=18:
print("可以进入")
else:
print("禁止进入")
089
- age = int(input("请输入年龄")) # int 将字符串转换为整型
- pycharm中运行代码的快捷键是:
Ctrl
+`F5
091
- 逻辑运算符:and/or/not
条件1 and 条件2
条件1 or 条件2
not 条件
095 elif
- Python的多条件不是else if 而是elif
if 条件1:
条件1满足时执行的代码
elif 条件2:
条件2满足时执行的代码
elif 条件3:
条件3满足时执行的代码
else:
以上条件都不满足时执行的代码
- 注意格式中的
:
098 if的嵌套格式
if 条件1:
条件1满足时执行的代码
……
if 条件1基础上的条件2:
条件2成立时执行的代码
else:
条件2不满足时执行的代码
else:
条件1不满足时执行的代码
100 整体缩进与回退
- 集体缩进的方法是:选中之后按
tab
键 - 缩多了往回退的方法:选中之后按
shift
+tab
106 随机函数
import random
110 循环
初始条件设置——通常是重复执行的 计数器
while 条件(判断 计数器 是否达到 目标次数):
条件满足时,做的事情1
条件满足时,做的事件2
……
处理条件(计数器 + 1)
114 赋值运算符
c = a + b
-
c += a
等效于c = c + a
-
c -= a
等效于c = c - a
115 计数方法
- 编程语言通常从
0
开始计数
120 break 和 continue
- 遇到
break
条件满足后,直接跳出循环 - 遇到
continue
,条件满足后,跳到条件条件判断的地方,不执行后续的那一次的代码。- 在循环中,如果使用
continue
这个关键字,在使用关键字之前,需要确认循环的计数是否修改,否则可能死循环。
- 在循环中,如果使用
123
- continue只排除某一些指令
- break只要遇到某指令就退出
124 循环的嵌套
- while嵌套的语法
126 嵌套演练-小星星
- print在输出的时候如果不需要换行,就需要加上,end=""。举例print("*",end="")
132 转义字符
-
\t
输出 制表符 -
\n
输出 换行符 -
\"
输出 “ -
\r
输出 回车 -
133 函数基础
- 函数:把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用
137
-
注意:定义好函数之后,只表示这个函数封装了一段代码而已,如果不主动调用函数,函数是不会主动执行的。
def say_hello(): print("hello 1") print("hello 2") print("hello 3") say_hello()
139
- 函数的调用必须在函数定义的下方,如果没有定义函数,就调用函数,就会报错。
140
-
pycharm
中,step over
的作用是跳过自定义函数,当成一行去执行;step in
的作用是将一步一步执行自定义函数。对内置函数,两种step过程是一样的。
141 函数的基本使用
- 函数空行规范:按要求,在自定义函数前需要保留两行空行。
- 函数的文档注释:在自定义函数下方使用
"""函数说明"""
,可以对函数进行注释。在函数调用的地方按下Ctrl+Q
可以查看函数说明。
142 函数的参数
- 对上例的修改
def sum_2_num():
"""对两个数字的求和"""
num1 = 10
num2 = 20
result = num1 + num2
print("%d + %d = %d"%(num1,num2,result))
sum_2_num()
- 发现问题:只能写10+20的
143
def sum_2_num(num1,num2):
"""对两个数字的求和"""
result = num1 + num2
print("%d + %d = %d"%(num1,num2,result))
sum_2_num(40,30)
144 形参与实参
def sum_2_num(num1,num2):
定义函数时的 num1和num2 是 形参
sum_2_num(40,30)
调用函数时的 40和30 是 实参
145 函数的返回值
- 返回值:是函数 完成工作 后,最后给调用者的一个结果*。
- 在函数中,使用
return
关键字可以返回结果 - 调用一方,可以使用 变量 来 接收 函数的返回值。
146 函数返回值举例
def sum_2_num(num1,num2):
"""对函数的求和"""
result = num1 + num2
#可以使用返回值,告诉函数一方结果
return(result)
#可以使用变量来接收函数的返回值
sum_result = sum_2_num(10,20)
print("计算结果:%d"%sum_result)
147 Return的使用注意事项
-
return
表示返回,之后的同缩进代码将不会被执行,即便有,pycharm也会提示“unreachable”
148 函数的嵌套调用
# hm_07_函数的嵌套调用
def test1():
print("*" * 50)
def test2():
print("-" * 50)
test1()
print("+" * 50)
test2()
150
# hm_08_打印分隔线
def print_line(char,times):
print(char * times)
print_line("hi ", 40)
152
# 函数的嵌套
def print_line(char, times):
print(char * times)
def print_lines(char, times, col):
row = 1
while row <= col:
print_line(char, times)
row += 1
print_lines("% ", 20, 2)
153 Pycharm小技巧
- 光标放在函数名上,稍等片刻出现黄色小灯泡,点击选择第二项
insert documentation string stub
,此时pycharm将自动增加多行注释,并且以:param
方式把形参标注出来。建议这么写:
def print_line(char, times):
print(char * times)
def print_lines(char, times, col):
"""打印多行分隔线 --->此处描绘整个函数的作用
--->自动留空
:param char:分隔线使用的分隔字符 --->冒号后该形参的作用
:param times:分隔字符重复的次数 --->冒号后该形参的作用
:param col:分隔线出现的行数 --->冒号后该形参的作用
"""
row = 1
while row <= col:
print_line(char, times)
row += 1
print_lines("% ", 20, 2)
154 模块
- 模块 是Python程序架构中的一个 核心概念 。
- 每个以
.py
j结尾的python
源代码文件都是一个模块 。要记得用import
导入才能用。
156
- 模块名不能用数字开头,否则无法使用
import
157 pyc文件
- pyc文件:导入的
py
文件被编译之后的结果,这样可以提高运行速度。
158 几种数据类型
-
字符串
、列表
、元组
、字典
都可以看成是一个序列或者是容器
159 列表
-
list
(列表)是python中使用的 最频繁 的数据类型。 -
list
就是C语言中的数组
。 - 使用
[ ]
将它们括起来,数据之间用,
进行分割。
举例:
name_list = ["zhangsan","lisi","wangwu"]
160
- 列表存储数据的索引(或下标)从
0
开始 name_list[0]
- 如果索引超过了,程序会报错。
161 列表有哪些操作?
- 有11种操作——方法。有点类似于函数的调用。如:
name_list.clear
等
162 列表的“增”、“删”、“改”、“查”
166 del
- 在日常开发中,要从列表删除数据,建议使用列表提供的方法
name_list = ["张三","李四","王五"]
# 使用del关键字(delete)删除列表元素
# 提示:在日常开发中,要从列表删除数据,建议使用列表提供的方法
del name_list[1]
# del关键字本质上是用来将一个变量从内存中删除
name = "小明"
del name
# 注意:如果使用del关键字将变量从内存中删除
# 后续的代码就不能再使用这个变量了
print(name)
print(name_list)
167
-
len
函数可以统计列表中元素的总数 -
count
方法可以统计列表中某一个元素出现的次数
name_list = ["张三","李四","王五","王小二","张三"]
# len函数可以统计列表中元素的总数
list_len = len(name_list)
print("列表中包含 %d 个元素"%list_len)
# count方法可以统计列表中某一个元素出现的次数
count = name_list.count("张三")
print("张三出现了 %d 次"%count)
#从列表中删除数据
name_list.remove("张三")
print(name_list)
168 列表排序
name_list = ["zhangsan","lisi","wangwu","wangxiaoer"]
num_list = [6, 8, 4, 1, 10]
# 升序 ==>sort方法
# name_list.sort()
# num_list.sort()
# 降序 ==>sort方法
# name_list.sort(reverse=True) # True 的 T 必须大写
# num_list.sort(reverse=True)
# 逆序 ==>reverse方法
name_list.reverse()
num_list.reverse()
print(name_list)
print(num_list)
169 关键字、函数和方法
- 关键字:不需要使用
()
,查看已经学过的关键字的方法:
import keyword
print(keword.kwlist)
len(keword.kwlist) # 有33个关键字
- 函数:
函数名(参数)
,函数需要死记硬背 - 方法需要通过对象来调用,表示针对这个对象要做的操作。
对象.方法名(参数)
170 列表的循环遍历
- 遍历:从头到尾一次从列表中获取数据
- 在循环内部针对每一个元素,执行相同的操作。
- 在python中为了提高列表的遍历效率,专门提供了迭代(iteration )遍历,用for,不能用while
name_list = ["zhangsan","lisi","wangwu","wangxiaoer"]
# 使用迭代遍历列表
"""
顺序的从列表中依次获取数据,每一次循环过程中,数据都会保存在
my_name 这个变两种,在循环体内部可以访问到当前这一次获取到的数据
for my_name in 列表变量:
print("我的名字叫: %s"%my_name)
"""
for my_name in name_list:
print("我的名字叫: %s"%my_name)
171
- python中支持在列表中保存不同类型的数据
- 但在实际开发中,一个列表通常只存储相同类型的数据
172 元组
- 元组
tuple
和列表两点不同:- 元组用
()
定义,列表用[]
定义 - 元组一旦定义,不能增删改
- 元组用
- 元组有特定的应用场景,之后讲
173
- 定义空元组的方法:
empty_tuple = ()
,但实际工作中很少定义一个空元组。 - 定义有一个元素的元组的方法:不能用
single_tuple = (5)
是错的,这种情况下5
前后的括号被忽略了,应该使用single_tuple = (5,)
174
info_tuple = ("zhangsan",18,1.75,"zhangsan")
# 1. 取值和取索引
print(info_tuple[0])
# 根据已知值查索引
print(info_tuple.index("zhangsan"))
# 2. 统计计数
print(info_tuple.count("zhangsan"))
# 统计元组中包含的元素的个数
print(len(info_tuple))
175
- 在元组中使用遍历并不多
176 元组的应用场景
- 函数的参数和返回值,一个函数可以接收任意多个函数,或者一次返回多个函数。
- 格式化字符串,格式化字符串(%)后面的
()
本质上就是一个元组 - 将列表转换成元组,就可以保护列表中的数据不可以被修改,以保护数据安全。
177
# 本例用以验证:格式化字符串后面的()本质上就是元组
info_tuple = ("小明",21,1.75)
# 格式化字符串后面的()本质上就是元组
# 正常情况下我们会这么写:print("%s 年龄是 %d 身高是 %.2f"%("小明",21,1.75))
print("%s 年龄是 %d 身高是 %.2f"%info_tuple)
info_str = "%s 年龄是 %d 身高是 %.2f"%info_tuple
print(info_str)
190 - 字符串的查找与替换
hello_str = "hello world"
# 1. 判断是否以指定字符串开始
print(hello_str.startswith("Hello"))
# 2. 判断是否以指定字符串结束
print(hello_str.endswith("world"))
# 3. 查找指定字符串
# index同样可以查找指定的字符在大字符串中的索引
print(hello_str.find("llo"))
# index方法如果指定的字符串不存在,会报错
# find方法如果指定的字符串不存在,会返回-1
print(hello_str.find("abc"))
# 4. 替换字符串
# replace方法执行完成之后,会返回一个新的字符串
# 注意,不会修改原有字符串的内容
print(hello_str.replace("world","python"))
方法 | 说明 |
---|---|
string.startswith(str) | 检查字符串是否是以 str 开头,是则返回 True |
string.endswith(str) | 检查字符串是否是以 str 结束,是则返回 True |
string.find(str, start=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1
|
string.rfind(str, start=0, end=len(string)) | 类似于 find(),不过是从右边开始查找 |
string.index(str, start=0, end=len(string)) | 跟 find() 方法类似,不过如果 str 不在 string 会报错 |
string.rindex(str, start=0, end=len(string)) | 类似于 index(),不过是从右边开始 |
string.replace(old_str, new_str, num=string.count(old)) | 把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次 |
191 文本对齐相关
# 假设:以下内容是从网络上抓取的
# 要求:顺序并且居中对齐输出以下内容
poem = ["登鹳雀楼",
"王之涣",
"白日依山尽",
"黄河入海流",
"欲穷千里目",
"更上一层楼",]
for poem_str in poem:
print("|%s|"%poem_str.center(10," ")) #此处填充中文空格
print("|%s|"%poem_str.ljust(10," ")) #此处填充中文空格
print("|%s|"%poem_str.rjust(10," ")) #此处填充中文空格
方法 | 说明 |
---|---|
string.ljust(width) | 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 |
string.rjust(width) | 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 |
string.center(width) | 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 |
192 去除空白字符
方法 | 说明 |
---|---|
string.lstrip() | 截掉 string 左边(开始)的空白字符 |
string.rstrip() | 截掉 string 右边(末尾)的空白字符 |
string.strip() | 截掉 string 左右两边的空白字符 |
# 假设:以下内容是从网络上抓取的
# 要求:顺序并且居中对齐输出以下内容
poem = ["\t\n登鹳雀楼",
"王之涣",
"白日依山尽\t\n",
"黄河入海流",
"欲穷千里目",
"更上一层楼",]
for poem_str in poem:
#先使用strip方法去除字符串中的空白字符
#再使用center方法居中显示文本
print("|%s|"%poem_str.strip().center(10," "))
- 只要在处理文字的时候有很多无用的空白需要去除,就可以使用strip方法,只保留真正需要的字符。
193 字符串拆分与连接的方法
- 重点讲两个:
split(负责拆分)
、join(负责连接)
- 下面的例子先拆分后连接,通过这样的操作,将不需要的空白字符去掉并重新连接为一个新的字符串。
# 假设:以下内容是从网络上抓取的
# 要求:
# 1. 将字符串中的空白字符全部去掉
# 2. 再使用“ ”作为分隔符,拼接成一个整齐的字符串
poem_str = "登鹳雀楼\t 王之涣\t 白日依山尽\t \n 黄河入海流\t 欲穷千里目\t \n 更上一层楼 \t"
print(poem_str)
# 1. 拆分字符串
poem_list = poem_str.split()
print(poem_list)
# 2. 合并字符串
result = " ".join(poem_list)
print(result)
194 字符串的切片
- 切片索引结束字符不包含在切出的字符串中
- 步长: 跳跃 指定长度去切割
- 倒序:最后一个是-1,向前,分别是-2、-3、-4……切的时候不包含最后一个字符。
- 倒序和正序可以同时存在,所在范围可以认为起始为0,结束为-1
字符串[开始索引:结束索引:步长]
195
num_str = "0123456789"
# - 1. 截取从 2 ~ 5 位置 的字符串
print(num_str[2:6])
# - 1. 截取从 2 ~ 末尾 的字符串
print(num_str[2:])
# - 1. 截取从 开始 ~ 5 位置 的字符串
print(num_str[0:6])
# - 1. 截取完整的字符串
print(num_str[:])
# - 1. 从开始位置,每隔一个字符截取字符串
print(num_str[0:9:2])
# - 1. 从索引 1 开始,每隔一个取一个
print(num_str[1::2])
# - 1. 截取从 2 ~ 末尾 - 1 的字符串
print(num_str[2:-1])
# - 1. 截取字符串末尾两个字符
print(num_str[-2:])
# - 1. 字符串的逆序(面试题)
# 注意:切片的时候,如果步长为负数,那么就认为从右向左切
# 所以此处可以不用指定起始位置为-1,也可以逆序输出
print(num_str[::-1])
196
-
len(item)
计算个数 -
del(item)
删除变量 -
max(item)
找到最大值,如果是字典,只对key比较 -
min(item)
找到最小值,如果是字典,只对key比较
t_dict = {"a":"z","b":"y","c":"x"}
max(t_dict) # 返回值为 c
min(t_dict) # 返回值为 a,只比较了key
-
cmp("1","2")
python 3.0 中已经取消了,直接用大于小于等比较就可以了 - 字典和字典不能比较大小。
197
- 字符串、列表和元组都可以使用切片,但是字典不能使用切片,因为字典是无序的。
198 运算符
-
*
让字符串、列表、元组重复若干次。字典不能重复,因为字典中的key是唯一的,一旦重复,key就不唯一了。 -
+
让字符串、列表、元组进行拼接。字典不能拼接。 - 注意
extend
方法和append
方法与之的区别。
199
-
in
和not in
判断某个元素是否为其成员。返回值为True
或者False
运算符 | Python 表达式 | 结果 | 描述 | 支持的数据类型 |
---|---|---|---|---|
in | 3 in (1, 2, 3) | True | 元素是否存在 | 字符串、列表、元组、字典 |
not in | 4 not in (1, 2, 3) | True | 元素是否不存在 | 字符串、列表、元组、字典 |
200 for...else
-
for
也可以带else
,for
遍历后就会执行else后的语句。然而,一旦For
中使用break
退出了循环,else就不会被执行了。
for num in [1, 2, 3]:
print(num)
if num == 2:
break
else:
# 如果循环体内部使用break退出了循环,
# else下方的代码就不会被执行。
print("测试本段代码是否会执行")
print("结束循环")
For...else实例
students = [
{"name":"小美"},
{"name":"阿土"}
]
# 在学员列表中搜索指定的姓名
find_name = "小"
for stu_dict in students:
print(stu_dict)
if stu_dict["name"] == find_name:
print("We find! %s"% find_name)
# 如果已经找到,应该直接退出循环,而不再遍历后续的元素。
break
else:
# 如果希望在搜索列表时,所有的字典检查之后,都没有发现需要搜索的目标
# 还希望得到一个统一的提示,就会用else
# 如果把else放在if对应的位置,就会发现,起作用时,会多次输出,不是我们想要的。
print("查无此人")
print("loop over")
网友评论