Gritty 坚韧不拔之志
写在前面:
本笔记完全原创,基于MOOC和线下课堂的笔记互补,用于学习,严禁其他用途!
第零周:Pycharm 使用技巧
1.Pycharm 快捷键
代码回退: command(Ctrl)+z
多选:长按 command+光标选中
2.网站资源
Python语言程序设计_北京理工大学_中国大学MOOC(慕课)
3.补充
这是用于安装第三方库的国内镜像,在后面会用到,在此先不深纠
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
第一周:Python基本语法元素
1.代码高亮
编程的色彩辅助体系,不是代码要求
2.缩进
(1)一行代码开始前的空白区域,表示程序的格式框架
(2)有单层缩进和多层缩进之分
(3)(严格明确)缩进是代码的一部分
(4)(所属关系)表达代码间包含和层次关系的唯一手段
(5)(长度一致)程序内一致即可,一般用4个空格或一个tab;也不一定非得4个,但单一程序内缩进必须相同
(6)Python 中不同层级的代码之间强制要求缩进,并且相同层级的代码要求缩进的空格数量一致。
3.注释
(1)用于提高代码可读性的辅助性文字,不被执行
(2)单行注释,以#开头
(3)多行注释,开头结尾都有三个单引号'''
'''
xxxxx
'''
4.变量
(1)用来表示和保存数据的标识符号
(2)变量采用标识符(名字)来表示,关联标识符的过程叫命名TempStr是变量名字
(3)可以使用=来向赋值或修改值,=被称为赋值符号
(4)TempStr="82F"#向变量TempStr赋值"82F"
(5)变量定义时必须顶格
5.命名
(1)命名规则:大小写字母、数字、下划线和汉字等字符及组合
(2)注意:大小写敏感(即字母大小写不同,表义不同)、首字母不能是数字、不与保留字相同
6.保留字(关键字)共35 个
(1)被编程语言内部定义并保留使用的标识符
eg:if,elif,else,in
(2)大小写敏感
and | elif | import | raise | global |
as | else | in | return | nonlocal |
assert | except | is | try | True |
break | finally | lambda | while | False |
class | for | not | with | None |
continue | from | or | yield | asyne |
def | if | pass | del | await |
7.数据类型
(1)供计算机理解的数据形式
(2)程序设计语言不允许存在语法歧义,需要定义数据的形式
eg:10,101,010关联一种计算机可以理解的形式
(3)程序设计语言通过一定方式向计算机表达数据的形式
eg:"123"表示字符串123,123则表示数字123
(4)10,011,100的三种数据类型表示
(1)整数类型:整型直接通过数字来表示,且无需添加引号eg:10011100
(2)字符串类型:"10,011,100"
(3)列表类型(相当于三个数字):[10,011,100]
(4)布尔类型:Ture/False且不加引号
#哈希函数hash(),能够进行哈希运算的类型是不可变类型,并产生一个整数哈希值
>>>hash("python is popular")
-7425766840899008624
>>>hash(["python",123])
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
hash(["python",123])
TypeError: unhashable type: 'list'
8.字符串类型
(1)由0个或多个字符组成的有效字符序列
(2)字符串由一对单引号或一对双引号表示或三个单引号
eg:""/'' eg:''' '''
为什么有那么多种:使得单引号和双引号可以包含到字符串内
(3)字符串是字符的有序序列,可对字符串进行索引
eg:"请"是"请输入带有符号的温度值:"的第0个字符
(4)字符串的序号
9. 字符串的使用
(1)使用[]获取字符串的一个或多个字符
(2)索引:通过序号访问字符串所包含字符的过程,返回字符串中的单个字符 <字符串>[M]
eg:"请输入带有符号的温度值:"[0] 或者 TempStr[-1]
(3)切片:通过序号组合访问字符串某个区间的过程,返回字符串中一段字符子串 <字符串>[M:N]
eg:"请输入带有符号的温度值:"[1:3]意思是从第一个开始,不到第三个,即'输入'
或者TempStr[0:-1]意思相当于把字符串的最后一个值去掉
TempStr[1:]表示字符串除首字符外的所有字符
(4)字符串切片的高级用法
<字符串>[M:N],M缺失表示至开头,N缺失表示至结尾
"零一二三四五六七八九十"[:3]结果为"零一二"
<字符串>[M:N:K],根据步长K对字符串切片
"零一二三四五六七八九十"[1:8:2]结果是"一三五七"
倒序技巧:"零一二三四五六七八九十"[::-1]结果是"十九八七六五四三二一零"
>>>s = "python语言程序设计"
>>>s[3:0:-1]#从序号0开始到3,以步长为1取反
'hty'
(5)字符串的特殊字符
转义符\ 即表达字符的本义
转义符表达特殊字符的本义
"这里有个双引号(\")"结果为这里有个双引号(")
转义符形成一些组合,表达一些不可打印的含义
"\b"表示回退、"\n"表示换行(光标移到下行首)、"r"回车(光标移到本行首)
10. 字符串操作符
由0个或多个字符组成的有序字符序列
操作符及使用 | 描述 |
x + y | 连接两个字符串x和y,返回新的字符串 |
n*x 或 x*n | 复制n次字符串x,返回新的字符串 |
x in s | 如果x是s的子串,返回Ture,否则返回False |
x == y | 如果 x 是 s 的子串,返回 True,否则 False |
问题: 获得输入的一个字符串s,以字符减号(-)分割s,将其中首尾两段用加号(+)组合后输出。
s = input()
ls = s.split("-")
print("{}+{}".foemat(ls[0],ls[-1]))
#WeekNamePrintv1.py
WeekStr = "星期一星期二星期三星期四星期五星期六星期日"
WeekID = eval(input("请输入星期数字(1-7):"))
pos = (WeekID - 1)*3
print(WeekStr[pos:pos+3])
#WeekNamePrintv2.py
WeekStr = "一二三四五六日"
WeekID = eval(input("请输入星期数字(1-7):"))
print("星期"+WeekStr[WeekID-1])
11. 字符串处理函数
一些以函数形式处理字符串功能
函数及使用 | 描述 |
len(x) | 长度,返回字符串x的长度,也可返回组合数据类型的元素个数 len("一二三456")结果为6 |
str(x) | 任意类型x所对应的字符串形式 str(1.23)结果为"1.23" str([1,2])结果为"[1,2]" #str与eval相当于相反操作 |
hex(x) | 整数x的十六进制小写形式字符串 hex(425)结果为"0x1a9" |
oct(x) | 八进制小写形式字符串,oct(425)结果为"0o651" |
bin(x) | 将数字 x 转换为其二进制形式,且为字符串类型 |
chr(u) | u为Unicode编码,返回其对应的字符 u 的取值范围为0~1114111(即十六进制 0x10FFFF) |
ord(x) | x为字符,返回其对应的Unicode编码整数 |
12.Unicode编码
Python字符串的编码方式:统一字符编码,即几乎覆盖所有字符的编码方式;从0到1114111(0x10FFFF)空间,每个编码对应一个字符;Python字符串中每个字符都是Unicode编码字符
"1+1=2"+chr(10004)
#'1+1=2✔'
"这个字符♉的Unicode值是:"+ str(ord("♉"))
#这个字符♉的Unicode值是:9801
for i in range(12):
print(chr(9800 + i),end="")#end等于空,end输出之后不换行
#♈♉♊♋♌♍♎♏♐♑♒♓
13.ASCII 码表
ASCII码表 | |||||||
ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 |
0 | NUT | 32 | (space) | 64 | @ | 96 | 、 |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | " | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | , | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | HT | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 |
| 77 | M | 109 | m |
14 | SO | 46 |
| 78 | N | 110 | n |
15 | SI | 47 | / | 79 | 0 | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DCI | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | X | 115 | s |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | V |
23 | TB | 55 | 7 | 87 | W | 119 | W |
24 | CAN | 56 | 8 | 88 | X | 120 | X |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | Z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | / | 124 |
|
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ~ |
31 | US | 63 | ? | 95 |
| 127 | DEL |
14. 字符串处理方法
"方法"在编程中是一个专有名词
"方法"特指<a>.<b>()风格中的函数<b>(),a 为对象,b 为方法
方法本身也是函数,但与<a>有关,<a>.<b>风格使用
字符串及变量也是<a>,存在一些方法
一些方法形式提供的字符串处理方法 12 个
方法及使用 | 描述 |
str.lower() | 返回字符串的副本,全部字符小写 "AbCdEfGh".lower()结果为"abcdefgh" |
str.upper() | 返回字符串的副本,全部字符大写 |
str.islower() | 当 str 所有字符都是小写时,返回 True,否则返回 False |
str.isnumeric() | 当所有字符都是数字时,返回 Ture,否则 False |
str.split(sep=None) | 返回一个列表,由 str 根据 sep 被分隔的部分组成 "A,B,C".split(",")结果为 ['A','B','C'] |
str.join(iter) | 将序列中的元素(如列表、元组、集合等)以指定的字符连接生成一个新的字符串 ",".join("12345")结果为"1,2,3,4,5"#主要用于字符串分隔等 |
str.count(sub) | 返回子串 sub 在 str 中出现的次数 "an apple a day".count('a')结果为 4 |
str.replace(old,new) | 返回字符串 str 副本,所有 old 子串被替换为 new "python".replace("n","n123.io")结果为"python123.io" |
str.center(width[,fillchar]) | 字符串 str 根据宽度 width 居中,fillchar (填充内容)可选 "python'.center(20,"=")结果为'=======python=======' |
str.strip(chars) | 从 str 中去掉在其左侧和右侧 chars 中列出的字符 "= python=".strip(" =np")结果为"ytho" |
str.format() | 返回字符串 str 的一种排版格式 |
str.find(sub) | 返回 sub 子串在 str 中的最低出现序号,不存在返回-1 |
#lower和upper对非英文字符形态不改变
#islower不判断非英文形态
#isnumeric判断的数字是0~9,不包括小数(点)、正负号
#old和new的长度可以不同,当new为空字符串时,相当于删除了old部分
#center(width,fillchar)当width小于字符串长度时,返回str(即不发生改变),fillchar是单个字符
#find返回的数字为正整数,即正向索引,故不会有-1的出现
#strip方法只是去掉str左右两侧chars中列出的字符,不影响字符串内部
#split方法若不加内容,sep默认是空格,sep可字符或字符串,若sep出现在字符串两侧,则会在两侧产生一个空字符串
>>>"hththth".split('t')
['h', 'h', 'h', 'h']
#join方法于split方法互逆
15. 作业
#CaesarCodeEn.py
ptxt = input("请输入明文:")
for p in ptxt:
if 'a'<=p<='z':
print(chr(ord("a") + (ord(p) - ord("a") - 3) % 26),end='')
else:
print(p,end='')
16. 字符串类型的格式化
格式化是对字符串进行格式表达的方法,用于解决字符串与变量融合的格式安排问题
字符串格式化使用.format()方法,用法如下:
<模版字符串>.format(<逗号分隔的参数>)
"{}:计算机{}的CPU占用率为{}%".format("A","B","C")
#默认012按序填充
#"{1}:计算机{0}的CPU占用率为{2}%".format("A","B","C")
#也可指定填充
#可嵌套使用
>>>"圆周率{{{1}{2}}}是{0}".format("无理数","3.1415926","...")
'圆周率{3.1415926...}是无理数'
槽内部对格式化的配置方式
{<参数序号>:<格式化控制标记>}
参数序号的作用:
1.指定占位符的索引:冒号前的数字表示占位符的索引。例如,{1:x<4}
中的 1
表示使用第二个参数进行格式化(在Python3.6之后就不需要用这种难看的形式了)
2.指定变量名:冒号前可以使用变量名来指定占位符的内容。例如,{name:x^4}
中的 name
是一个变量名,表示使用该变量的值进行格式化
3.定义格式化选项:冒号后的部分可以定义格式化选项,如对齐方式、填充字符、宽度等。例如,{:<4}
表示左对齐,宽度为4
4.省略索引和格式化选项:如果冒号前后的内容都省略,则按顺序将元组中的内容以字符串格式显示
5.嵌套槽:在某些情况下,冒号前还可以嵌套其他槽,用于更复杂的格式化需求
#
print("{0:=^20}".format("PYTHON"))
#=======PYTHON=======
print("{0:*>20}".format("BIT"))
#*****************BIT
print("{:10}".format("BIT"))
#BIT,填充默认为空格,对齐为左对齐
>>>Money = input()
>>>Money = Money[:-4]
>>>print(Money)
1234567
123
>>>Money = input("请输入带有符号的货币值:")
>>>Money = Money[-4:]
>>>print(Money)
1234567
4567
#总结:冒号没数的一端代表到此端头
#默认填充为空格,对齐为左对齐
#如果字符串超过长度3,则以字符串长度显示
<类型>
整数<类型> | |
b | 输出整数的二进制方式 |
c | 输出整数的 Unicode 字符 |
d | 输出整数的十进制方式 |
o | 输出整数的八进制方式 |
x | 输出整数的小写十六进制方式 |
X | 输出整数的大学十六进制方式 |
浮点数<类型> | |
e | 输出浮点数对应的小写字母 e 的指数形式 |
E | 输出浮点数对应的小写字母 E 的指数形式 |
f | 输出浮点数的标准浮点形式 |
% | 输出浮点数的百分形式 |
print("{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425))
#110101001,Ʃ,425,651,1a9,1A9
#b二进制表示形式、cUnicode编码形式、d 十进制表示形式、o八进制、x小写十六进制、X大写十六进制
print("{0:e},{0:E},{0:f},{0:%}".format(3.14))
#3.140000e+00,3.140000E+00,3.140000,314.000000%
#e、E使用科学计数法e、E形式表示浮点数;f为以通常的非科学计数法形式表示浮点数;以%形式表示浮点数
#精度的两种含义,对浮点数,表示小数位数(四舍五入);对字符串,表示输出的最大长度
>>>"{0:.4}".format("PYTHON")
'PYTH'
#英文的半角形式,中文的全角形式
#中文以字符形式表示,不可用作语法的一部分
17.数字类型
(1)整数
数学中的整数,包括正数和负数
(2)浮点数
数学中的实数,包含小数部分
eg:1.0
>>>type(123)
<class'int'>
18.数字
(1)浮点型:它通过数字和小数点来表示,无需添加引号。
(2)整数类型:整型直接通过数字来表示,且无需添加引号。
(3)
数据类型 | + | - | * | / |
整型和整型 | 整型 | 浮点型 | ||
整型和浮点型 | 浮点型 | |||
浮点型和浮点型 | 浮点型 |
(4)数字运算符
运算符 | 描述 |
x + y | x 与 y 的和 |
x - y | x 与 y 的差 |
x * y | x 与 y 的积 |
x / y | x 与 y 的的商 |
x // y | x 与 y 的整数商 |
x % y | x 与 y 的商的余数,也称模运算 |
-x | x 的负值 |
+x | x 本身 |
x**y | x 的 y 次幂 |
(1)+ - * / == !=
(2)//取整 %取余(模)
(3)遵循“先乘除取整取模,后加减”的运算顺序,取整取模和乘除是同一等级,都会优先参与运算。
(4)逻辑运算:and且 or或 not非
(5)运算结果按宽的输出,即使下移类型
(5)字符串运算
(1)整型和字符串相乘,整型*字符串,输出的结果,是将字符串重复几次拼接在一起。
#整型*字符串
print(5*"123")#123123123123123
print("hello"*5)#hellohellohellohellohello
(2)字符串+字符串,输出的结果,是这几个字符串的拼接。
print("123"+"123")#123123
19.列表类型
(1)由0个或多个数据组成的有序序列
列表用[]表示采用,分隔各元素
eg:['F','f']表示两个元素'F'和'f'
(2)使用保留字in判断一个元素是否在列表中
TempStr[-1] in ['C','c']判断前者是否于列表中的一个元素相同
(3)里面用单引号或者双引号都可以
20.赋值语句
(1)由赋值符号构成的一段代码
(2)
C = (eval(TempStr[0:-1] -32)/1.8#右侧变量结果赋值给变量C
(3)
TempStr = input("")#input("")返回一个字符串,TempStr也是字符串
(4)
name = "Downey"
name = "Tony"
print(name)
#Tony,当我们放入别的东西时,原来的会被丢掉
(5)赋值数字不加引号,赋值汉字、英文加引号
(6)== 表示 "等于",in 表示成员包含且一般用在列表['','']
21.分支语句
(1)由判断条件决定程序运行的方向
(2)
if TempStr [-1] in ['F','f']:#如果if后为Ture则执行:后的语句,否则跳过
(3)每个保留字所在的行存在一个:,这是语法的一部分
冒号及后续缩进用来表示后续语句于条件的所属关系
(4)在判断语句中,对非零值判断为真;对数字0的判断为假;对 None 的判断为假。
22.函数
(1)根据输入参数参数不同输出的功能过程
类似数学y=f(x)
print("格式输入有误")#打印输出"格式输入有误"
(2)函数采用<函数名>(<参数>)方法使用
eval(TempStr[0:-1])#TempStr[0:-1]是参数
(3)input
从控制台获得用户的输入
格式:<变量> = input("提示信息字符串") #用户输入的信息以字符串的形式保存在变量中
TempStr = input("请输入")#TempStr用来保存用户的输入
(4)print
以字符的形式向控制台输出结果的函数
格式:print("拟输出的字符串或字符串变量")#其中的引号不做输出
print("转换后的温度是{:.2f}C".format(C))
#{}称为槽,后续变量C填充到槽中{:.2f}表示将变量C填充到这个位置时取小数点后两位
name = "Downey"
print(f"My name is {name}")
print(f"{name} is a good boy")
print(f"{name} likes playing football")
#f表示格式化输出
#My name is Downey
#Downey is a good boy
#Downey likes playing football
注意:输出的为变量时不用加引号
name = "Downey"
print(name)
#Downey
name = "Downey"
print("name")
#Error
(5)eval评估函数
去掉参数最外层引号并执行余下语句的函数
eval()函数将字符串转换成数字,不能省略,比例input得到字符串,eval才得到数字类型
格式:eval(<字符或字符串变量>)
eval("1")#1
eval("1+2")#3
eval('"1+2"')#'1+2'
eval('print("Hello")')#Hello
23.转义字符
(1)加上\(反斜杠),改变字符原有的含义
(2)eg:
\\ | 反斜线字符 |
\' | 单引号字符 |
\" | 双引号字符 |
\a | 蜂鸣,响铃 |
\b | 回退,向后退一格 |
\r | 移动当前位置到本行开头 |
\n | 移动当前位置到下一行开头(换行) |
\t | 水平制表符(tab) |
\f | 换页 |
\v | 垂直制表 |
\0 | NULL,什么都不做 |
#续行符\,在程序以多行显示,输出为单行
#换行符\n,在程序以单行显示,输出为多行
#原来是多行,想写在一行,用分号隔开;s=[1,2,3,4,5,6,7,8,9];random.shuffle(s);print(s)
24.报错
(1)SyntaxError,表示语法错误,注意中,英括号
(2)IndentationError,表示缩进错误,也就是表明这里的代码没有顶格
(3)invalid syntax 是无效语法,说明变量定义出错了
25.实例一:温度转换
#TempConvertV1.py
TempStr = input("请输入带有符号的温度值:")
if TempStr[-1] in ['F','f']:
C = (eval(TempStr[0:-1]) - 32)/1.8
print("转换后的温度是{:.2f}C".format(C))
elif TempStr[-1] in ['C','c']:
F = 1.8*eval(TempStr[0:-1]) + 32
print("转换后的温度{:.2f}F".format(F))
else:
print("输入格式错误")
#TempConvert2.py
def TempConverter(TempStr):
if TempStr[-1] in ["F","f"]:
C = (eval(TempStr[0:-1])-32)/1.8
return "转换后的温度是{:.2f}C".format(C)
elif TempStr[-1] in ['C','c']:
F = 1.8*eval(TempStr[0:-1]) + 32
return "转换后的温度是{:.2f}F".format(F)
else:
return "输入格式错误"
value = input("请输入带有符号的温度值:")
print(TempConverter(value))