学习笔记

1.Python的基本语法

1Python的交互和脚本式

交互式是不创建脚本文件,通过解释器的交互模式来编写代码
脚本式,为创建.py格式进行执行

2标识符

在 Python 里,标识符由字母、数字、下划线组成。

在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。

Python 中的标识符是区分大小写的。

以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。

Python 可以同一行显示多条语句,方法是用分号 ;

运算符 描述
[] [:] 下标,切片
** 指数
~ + - 按位取反, 正负号
* / % // 乘,除,模,整除
+ - 加,减
>> << 右移,左移
& 按位与
^ | 按位异或,按位或
<= < > >= 小于等于,小于,大于,大于等于
== != 等于,不等于
is is not 身份运算符
in not in 成员运算符
not or and 逻辑运算符
= += -= *= /= %= //= **= &= ` = ^=` `>>=` `<<=`

3.保留字

and exec not
assert finally or
break for pass
class from print
continue global raise
def if return
del import try
elif in while
else is with
except lambda yield

2数据类型

1整数

python可以写任意大的整数

如果出现很大的数比如说10000000可以写成10000_000

2浮点数

浮点数可以用科学计数法来表示
比如说1.23*10七次幂可以写1.23e9, 0.0015等于1.5e-3

数值运算函数

round

1
2
round(11.111,2)这个函数是四舍五入round(x[,d])d为保留位数默认为0
// 11.11

abs

1
abs(x)绝对值

pow

1
2
3
4
pow(x,y[,z])
幂余
pow(2,3,3)
//2

divmod

1
2
3
商余
divmod(10,3)
//(3,1)

3.字符串

字符串是以单引号或者双引号写出来的

字符串内部中有"或者‘可以通过\来表示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
'I\'m \"OK\"!'
I'm "OK"!
str1 = 'hello, world!'
# 通过内置函数len计算字符串的长度
print(len(str1)) # 13
# 获得字符串首字母大写的拷贝
print(str1.capitalize()) # Hello, world!
# 获得字符串每个单词首字母大写的拷贝
print(str1.title()) # Hello, World!
# 获得字符串变大写后的拷贝
print(str1.upper()) # HELLO, WORLD!
# 从字符串中查找子串所在位置
print(str1.find('or')) # 8
print(str1.find('shit')) # -1
# 与find类似但找不到子串时会引发异常
# print(str1.index('or'))
# print(str1.index('shit'))
# 检查字符串是否以指定的字符串开头
print(str1.startswith('He')) # False
print(str1.startswith('hel')) # True
# 检查字符串是否以指定的字符串结尾
print(str1.endswith('!')) # True
# 将字符串以指定的宽度居中并在两侧填充指定的字符
print(str1.center(50, '*'))
# 将字符串以指定的宽度靠右放置左侧填充指定的字符
print(str1.rjust(50, ' '))
str2 = 'abc123456'
# 检查字符串是否由数字构成
print(str2.isdigit()) # False
# 检查字符串是否以字母构成
print(str2.isalpha()) # False
# 检查字符串是否以数字和字母构成
print(str2.isalnum()) # True
str3 = ' jackfrued@126.com '
print(str3)
# 获得字符串修剪左右两侧空格之后的拷贝
print(str3.strip())

字符串函数

find

返回从左边第一个指定的字符索引,找不到返回-1

index

返回从左边第一个字符索引,找不到报错

1
2
3
4
5
6
str = "abcde"
print(str.find('c'))//2

str = "hello world"
a = str.index('w')
print(a)//6

sqlit

字符串的拆分

1
2
str = "hello world"
print(str.split(' '))//['hello', 'world']

chr(x) ord(x)

字符串的方法

方法必须用.方式

八种重要字符串的方法

  • str.lower str.upper() 返回字符串的副本,全部为大小写
  • str.split(sep=None)返回一个列表,由str根据sep被分割的部分组成
1
2
"a,b,c".split(",")
# ['a','b','c']
  • str.count(sub)返回子串sub在str中中出现个数
1
2
"aabbaa",count("a")
# 4
  • str.replace(old,new)返回str的副本,所以old子串被替换为new

    1
    2
    “python".replace("n","n123.io")
    # python123.io

字符串的格式化

python用于槽方式以及format方式

1
"{}是世界上最好用的语言之一,而{}是效率最高的语言".format("python","c++")

4布尔值

只有两个True和False

布尔值可以tong过and or not表达

1
2
3
4
5
6
7
8
9
10
11
12
>>> True and False
False
>>> False and False
False
>>> 5 > 3 and 3 > 1
True
>>> True or True
True
>>> True or False
True
>>> not False
True

5.空值

用None表示,不能单纯理解为0

6变量

重点
python中

1
a='abc'

python解释器干了两个事情

  • 在内存中创建了‘abc’的字符串
  • 在内存中创建a的变量指向‘abc’

7.常量

8.list

list是一种有序的集合,可以进行修改或者删除

1
classmates=['song','wang','zhang']

使用len可获取list元素的个数

1
2
>>> len(classmates)
3

索引 切片[start: end:step]

用索引可以访问list的元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
>>> classmates[0]
'song'
>>> classmates[1]
'wang'
>>> classmates[2]
'zhang'
>>> classmates[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range




list1 = [1, 3, 5, 7, 100]
print(list1) # [1, 3, 5, 7, 100]
# 乘号表示列表元素的重复
list2 = ['hello'] * 3
print(list2) # ['hello', 'hello', 'hello']
# 计算列表长度(元素个数)
print(len(list1)) # 5
# 下标(索引)运算
print(list1[0]) # 1
print(list1[4]) # 100
# print(list1[5]) # IndexError: list index out of range
print(list1[-1]) # 100
print(list1[-3]) # 5
list1[2] = 300
print(list1) # [1, 3, 300, 7, 100]
# 通过循环用下标遍历列表元素
for index in range(len(list1)):
print(list1[index])
# 通过for循环遍历列表元素
for elem in list1:
print(elem)
# 通过enumerate函数处理列表之后再遍历可以同时获得元素索引和值
for index, elem in enumerate(list1):
print(index, elem)

当然我们也可以通过负数来索引

1
2
>>> classmates[-1]
'zhang'

增删

因为list为可变的有序表 append

1
2
3
>>> classmates.append('zhao')
>>> classmates
classmates=['song','wang','zhang','zhao']

元素想插入到指定的位置中.insert

1
2
3
4
5
>>> classmates.insert(1, 'Jack')
>>> classmates
>>> classmates.append('zhao')

classmates=['song','jack','wang','zhang','zhao']

删除末尾用 pop()

1
2
3
4
>>> classmates.pop()
'zhao'
>>> classmates
['song','jack','wang','zhang']

想删除指定的位置用pop(i)

1
2
3
4
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
list1 = [1, 3, 5, 7, 100]
# 添加元素
list1.append(200)
list1.insert(1, 400)
# 合并两个列表
# list1.extend([1000, 2000])
list1 += [1000, 2000]
print(list1) # [1, 400, 3, 5, 7, 100, 200, 1000, 2000]
print(len(list1)) # 9
# 先通过成员运算判断元素是否在列表中,如果存在就删除该元素
if 3 in list1:
list1.remove(3)
if 1234 in list1:
list1.remove(1234)
print(list1) # [1, 400, 5, 7, 100, 200, 1000, 2000]
# 从指定的位置删除元素
list1.pop(0)
list1.pop(len(list1) - 1)
print(list1) # [400, 5, 7, 100, 200, 1000]
# 清空列表元素
list1.clear()
print(list1) # []

生成式和生成器

1
2
3
4
f = [x for x in range(1, 10)]
print(f)
f = [x + y for x in 'ABCDE' for y in '1234567']
print(f)

list中可以有不同类型的甚至list

1
2
3
>>> s = [22141, True, ['asp', 'php'], 'scheme']
>>> len(s)
4

9.tuple

有序的列表叫tuple,tuple不能被修改

不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

1
2
3
>>> t = (1, 2)
>>> t
(1, 2)

如果tuple中出现list也是可以修改的

1
2
3
4
5
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

10dict(dictionary)

其他的语言叫map

使用key-value

dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:

1
2
3
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

必须要有key才能读取value
一个key只能有一个value
key不存在报错

如果想删除只要删除key就可以了

11.set

set和dict类型

是存放key的但是不存放value key不能重复

set具有数学上的set性质

比如无序,没有重复元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

>>> s.remove(4)
>>> s
{1, 2, 3}

3.基本函数

1.判断

和c语言基本相似

注意不要少写了冒号

1
2
3
4
5
6
7
age = 3
if age >= 18:
print('your age is', age)
print('adult')
else:
print('your age is', age)
print('teenager')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
age = 3
if age >= 18:
print('adult')
elif age >= 6: #elif等于else if
print('teenager')
else:
print('kid')

if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>

2.循环

python中的循环分为for in依次将list或者tuple中元素迭代

1
2
3
4
5
6
7
8
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)

//
Michael
Bob
Tracy

3.输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
print("hello world")
# 可以输出字符串
# 含有运算符的表达式
print(88 * 88 - 55)
# 将数据输出文件中 主要盘符要存在 使用file=p a+以读写状态,没有就新建
fp = open('E:/编程/python/text.txt', 'a+')
print('hello world', file=fp)
# 输出到这个文件夹
fp.close()
# 关闭


a, b = 5, 10
print(f'{a} * {b} = {a * b}')

4.针对数据类型的特征

1.Slice

在list或者tuple取元素

range函数

1
2
3
4
5
6
7
8
>>>list(range(0, 30, 5))
[0, 5, 10, 15, 20, 25]
>>> list(range(0, 10, 2))
[0, 2, 4, 6, 8]
>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> list(range(5))
[0, 1, 2, 3, 4]
1
2
3
4
5
6
7
8
list中可以通过for来切片
>>> r = []
>>> n = 3
>>> for i in range(n):
... r.append(L[i])
...
>>> r
['Michael', 'Sarah', 'Tracy']

python有更简单的方法实现切片操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> L[0:3]
['Michael', 'Sarah', 'Tracy']
>>> L[:3]
['Michael', 'Sarah', 'Tracy']
>>> L[1:3]
['Sarah', 'Tracy']
如果0-99提取前十
>>> L=list(rang(100))
>>> l
[0,1,2....99]

>>> l[:10]
l [0,1,...9]

前十个,每两个取一个
l[:10:2]

l[::5]

2.lteration

在python中通过for循环遍历list或者tuple叫迭送

3.列表生成式

5基本库

1time库

time

1
1648043734.0478468

ctime

1
Wed Mar 23 21:57:29 2022

gmtine

1
time.struct_time(tm_year=2022, tm_mon=3, tm_mday=23, tm_hour=13, tm_min=58, tm_sec=1, tm_wday=2, tm_yday=82, tm_isdst=0)

2022

天天向上的力量

一年365进步与退步千分之一
365中工作五天进步百分之一,周末退步百分之一
你和365天都在进步百分之一的卷仙一起工作,你工作日学习,但是休息日两天下降百分之一,那么你至少要在工作日学习百分之多少呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# daydayup.py
def dayUp(df):
dayup = 1
for i in range(365):
if i % 7 in[6,0]:
dayup=dayup*(0.99)
else:
dayup =dayup*(1+df)
return dayup
dayfactor = 0.01
while dayUp(dayfactor) < 37.78:
dayfactor+=0.001
print("他工作日努力参数为{:.3f}".format(dayfactor))

//0.019

文本进度条

1
2
3
4
5
6
7
8
9
10
11
# TextProBar1.py
import time
scale = 10
print("........执行开始........")
for i in range(scale+1):
a='*'*i
b = '.'*(scale-i)
c = (i/scale)*100
print("\r{:^3.0f}%[{}->{}]".format(c,a,b))
time.sleep(0.1)
print("........结束........")

…结束…")