吧唧吧唧的吃. . . . . . . . .

python学习


python知识点备忘

一、快捷键(python IDLE)

1、返回(复制)上一条语句

AIt + p

二、知识点

1、 数值交换

x , y = y , x

2、 转义字符

用于:’’’life is short,let\’ use python”’

3、 原始字符串(使转义字符失效)

Print(r”a\tdsfg\ndfgb\tsadsf”)

结果: a\tdsfg\ndfgb\tsadsf

4、三个单引号或双引号的使用:括号中内容会原样保存(包括换行)

5、浮点数的精准运算模块—-decimal

​ 使用原因:

0.1+0.2
0.30000000000000004
0.1 + 0.2 == 0.3
False

运用decimal后

import decimal
a = decimal.Decimal('0.1')
b = decimal.Decimal('0.2')
print(a + b)
0.3
c = decimal.Decimal('0.3')
a + b == c
True

6、科学计数法

0.00000006
6e-08		#6*10负8次方

7、复数

x = 1 + 2j
x.real
1.0
x.imag
2.0

8、地板除— //

3 // 2
1
-3 // 2
-2				#结果向下取整

9、内置函数

(1)divmod

divmod(x , y)返回(x // y , x % y)

divmod(5 , 2)
(2, 1)

(2)abs

取绝对值(模)

abs(-6)
6
abs(1 + 2j)
2.23606797749979
pow(5 , 0.5)
2.23606797749979

pow函数基础功能不再赘述

(3)pow

pow(2 , 3 , 6)
2				
#等价于
2 ** 3 % 6
2

(4)bool()

用于返回一个布尔类型的值(True 或者 False)

>>> bool(250)
True
>>> bool("False")
True
>>> bool(0.0)
False
>>> bool([])
False
>>> bool(range(0))
False

(5)len()

返回值:

返回对象的长度(包含元素的数量)。
基本用法:

>> len("FishC")
5

(6)range()

通常用于配合 for 循环指定循环的次数。

range() 有三种参数的组合使用方式,但无论选择哪一种,其参数类型仅能为整数。

如果 step 参数忽略,那么默认的步进跨度值为 1。

三种形式:

range(stop)

range(start , stop)

range(start , stop , step)

示例:

for i in range(10):
    print(i , end=' ')
print()
print("······")
for i in range(4 , 10):
    print(i , end = ' ')
print()
print("······")
for i in range(5 , 20 , 2):
    print(i , end = ' ')
print()
print("······")

结果:

0 1 2 3 4 5 6 7 8 9 
······
4 5 6 7 8 9 
······
5 7 9 11 13 15 17 19 
······

说明:

range()中stop为不包含

10、类型转换

complex("1+2j")
(1+2j)
complex("1 + 2j")
Traceback (most recent call last):
  File "<pyshell#37>", line 1, in <module>
    complex("1 + 2j")
ValueError: complex() arg is a malformed string

转换时不能有空格

11、x ** y

x的y次方

2 ** 3
8

12、短路逻辑

3 and 0
0
0 and 1
0
0 or 3
3
3 or 0		#3 or 0 在读取到‘3 or’时已经可以得出结果
3			#无需再继续读取,py直接扔出‘3’

13、优先级

and小于or

python优先级

14、分支结构

elif等于C语言中else if

(1)条件表达式

不喜欢用。。。。。

a = 6
b = 8
small = a if a < b else b
print(small)
'''
不能像下面这样,会报错
a = 6
b = 8
small = a if a < b else small = b
print(small)
'''

(2)分支嵌套

a = 3
b = 1
c = 2
if a < b:
    if a < c:
        small = a
        print(small)
else:
    if b < c:
        small = b
        print(small)
    else:
        small = c
        print(small)

注:if判断后需要有:

​ else后同样需要:

​ 不能print(small = a)

15、循环结构

(1)while

a = 0
sum = 0
while a < 10 :
    sum = sum + a
    a = a + 1

    
print(sum)
45

注1:判断条件后要有:

注2:python中不能变量++

b = 0
b ++
SyntaxError: invalid syntax
b++
SyntaxError: invalid syntax
b++;
SyntaxError: invalid syntax
[1]while………else……

当循环正常退出时,才执行else里内容

#源代码
day = 1
while day < 8:
    anwser = input("志坤今天进步一点点了吗?")
    if anwser == "是的!":
        print("志坤真棒!")
    else:
        break
    day = day + 1
else:
    print("志坤好厉害^o^")
#循环异常退出(break使循环结束)时情况
======================= RESTART: G:\python\_work\work1.py ======================
志坤今天进步一点点了吗?不是

#循环正常结束时情况
======================= RESTART: G:\python\_work\work1.py ======================
志坤今天进步一点点了吗?是的!
志坤真棒!
志坤今天进步一点点了吗?是的!
志坤真棒!
志坤今天进步一点点了吗?是的!
志坤真棒!
志坤今天进步一点点了吗?是的!
志坤真棒!
志坤今天进步一点点了吗?是的!
志坤真棒!
志坤今天进步一点点了吗?是的!
志坤真棒!
志坤今天进步一点点了吗?是的!
志坤真棒!
志坤好厉害^o^
[2]whlie循环嵌套
#九九乘法表
i = 1
while i <= 9:
    j = 1
    while j <= i:
        print(j,"*",i,"=",j*i,end=" ")
        j += 1
    print()
    i += 1

执行结果:

======================= RESTART: G:\python\_work\work1.py ======================
1 * 1 = 1 
1 * 2 = 2 2 * 2 = 4 
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16 
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25 
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36 
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81 

(2)for

for 变量 in 可迭代对象

​ statement(s)

示例1:

>>>for each in "xiao kun kun":
    print(each)

    
x
i
a
o
 
k
u
n
 
k
u
n

示例2:

for i in range(10):
    print(i , end=' ')
print()
print("······")
for i in range(4 , 10):
    print(i , end = ' ')
print()
print("······")
for i in range(5 , 20 , 2):
    print(i , end = ' ')
print()
print("······")
    

结果2:

0 1 2 3 4 5 6 7 8 9 
······
4 5 6 7 8 9 
······
5 7 9 11 13 15 17 19 
······
[1]for循环嵌套
#找出十以内所有素数
k = 0
for i in range(1, 11):
    k = 0
    for j in range(2, i):
        if i % j != 0:
            k += 1
    if k == i - 2:
        print(i,"是素数")
2 是素数
3 是素数
5 是素数
7 是素数

使用while(for)…….else…..结构的进阶版:

哈哈哈,这么简单的小程序还有进阶版,没想到吧^O^

#找出十以内所有素数进阶版
for i in range(1, 11):

    for j in range(2, i):
        if i % j == 0:
            break
    else:
        print(i,"是素数")
1 是素数
2 是素数
3 是素数
5 是素数
7 是素数

确实不需要增加变量(k)来计数了,真不错

16、列表

(1)可存放不同类型数据

time = ["现在是晚上", 23, "点", 29, "分"]
print(time)
['现在是晚上', 23, '点', 29, '分']

(2)配合for循环使用

for time in time:
    print(time, end=' ')

现在是晚上 23 点 29 分 

(3)列表索引

#列表下标也可为负数
time = ["现在是晚上", 23, "点", 29, "分"]
i = len(time)
while i > 0:
    print(time[-i],end=' ')
    i -= 1
现在是晚上 23 点 29 分

(4)列表切片

time = ["现在是晚上", 23, "点", 29, "分"]
print(time[0:3])
['现在是晚上', 23, '点']
[1]列表切片不对列表下标越界处理,如下
time[4:6]
['分']
time[4:100]
['分']
time[5:100]
[]
time[20:100]
[]
[2]列表切片中数字问题

列表切片中十进制整数字面值中不允许前导零;八进制整数使用0o前缀

time = ["现在是晚上", 22, "点", 06, "分"]
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers
[3]可设置跨度
#name[start:end:跨度]
number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
number[2:9:2]
[3, 5, 7, 9]
[4]倒叙输出
time = ["现在是晚上", 22, "点", 6, "分"]
print(time[::-1])
['分', 6, '点', 22, '现在是晚上']
[5]增/删/改/查
{1.1}增:append()

在列表尾部加入新元素(一次只能加一个元素)

#错误示范
time.append(36, "秒")
TypeError: list.append() takes exactly one argument (2 given)
#正确示范
time.append(36)
time.append("秒")
time
['现在是晚上', 22, '点', 6, '分', 36, '秒']
{1.2}extend([])

对象为可迭代对象,追加在列表后面

time = ["现在是晚上", 22, "点", 6, "分"]
time
['现在是晚上', 22, '点', 6, '分']
time.extend([36,"秒"])
time
['现在是晚上', 22, '点', 6, '分', 36, '秒']
{1.3}使用列表切片增加
#增加一个元素
time = ["现在是晚上", 22, "点", 6, "分"]
time[len(time):] = [36]
time
['现在是晚上', 22, '点', 6, '分', 36]
time = ["现在是晚上", 22, "点", 6, "分"]
#增加多个元素
time[len(time):] = [36, "秒"]
time
['现在是晚上', 22, '点', 6, '分', 36, '秒']
{1.4}插入到中间(或任意位置)
time = ["现在是晚上", 22]
time.insert(2,"点")
time
['现在是晚上', 22, '点']
{2.1}删remove()
#存在多个被删元素时,只删除第一个
abc = [1, 2, 3, 4, 1, 2, 3]
abc.remove(1)
abc
[2, 3, 4, 1, 2, 3]

注:被删元素不存在时,程序报错

abc = [1, 2, 3, 4, 1, 2, 3]
abc.remove(10)
ValueError: list.remove(x): x not in list
{2.2}使用下标删除pop()
qwe = [123, 456, 789]
qwe.pop(0)
123
qwe
[456, 789]
{2.3}清空clear()
qwe = [123, 456, 789]
qwe.clear()
qwe
[]
{3.1}改
#简单下标索引更改
qwe = [123, 456, 789]
qwe[0] = 369
qwe
[369, 456, 789]
#一次更改多个元素
qwe = [123, 456, 789]
qwe[2:] = [159, 487, 753]	#从第二个后面开始更改
qwe
[123, 456, 159, 487, 753]
{3.2}排序
#从小到大
number = [1, 9, 2, 7, 0, 6, 3]
number.sort()
number
[0, 1, 2, 3, 6, 7, 9]
#第一与最后一个元素互换,第二与倒数第二......
number = [1, 9, 2, 7, 0, 6, 3]
number.reverse()
number
[3, 6, 0, 7, 2, 9, 1]
#从大到小
number = [1, 9, 2, 7, 0, 6, 3]
number.sort()
number.reverse()
number
[9, 7, 6, 3, 2, 1, 0]
#从大到小(2)
number = [1, 9, 2, 7, 0, 6, 3]
number.sort(reverse=True)	#T要大写
number
[9, 7, 6, 3, 2, 1, 0]
{4.1}查count()
#查元素个数
num = [1,5,4,84,1,1,1,1]
num.count(1)
5
#查元素下标
wsx = ["abc","qwe","rgy","qwe"]
wsx.index("qwe")
1	#有相同元素时返回第一个被查元素的下标
#index(被查,start,end)
wsx = ["abc","qwe","rgy","qwe"]
wsx.index("qwe",2,4)
3
#不包括end这个元素
wsx = ["abc","qwe","rgy","qwe"]
wsx.index("qwe",2,3)
ValueError: 'qwe' is not in list
{5.1}改copy()
numbers_copy = number.copy()
numbers_copy
[9, 7, 6, 3, 2, 1, 0]
{6}加、乘
#加
i = [1, 2, 3]
j = [4, 5, 6]
i + j
[1, 2, 3, 4, 5, 6]
#乘
i*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
{7}嵌套(多维列表)

创立:

a = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]
a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

访问:

需使用循环

for i in a:
    for j in i:
        print(j,end=" ")
    print()

1 2 3 
4 5 6 
7 8 9 

下标访问:

a[0][0]
1
{8}初始化的两种看似相同实则不同的方法
for i in range(3):
    a[i] = [0]*3

a
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
b = [[0]*3]*3
b
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

两种结果看似相同,第二种甚至不需要使用循环就创建了一个二维列表

但,实际上两种方法在内存上有很大差别

先展示区别

a[1][1] = 1
a
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]
b[1][1] = 1
b
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]

a列表在更改a【1】【1】时实实在在就是更改a【1】【1】

而b列表在更改b【1】【1】时,却更改了所有的第二列元素

在此介绍一个运算符——-is

is运算符用于检验两个变量是否指向同一个变量

举例:

x = 'xiaokunkun'
y = 'xiaokunkun'
x is y
True
a = 1
b = 2
a is b
False

{9}深拷贝
import copy
x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
y = copy.deepcopy(x)
x[1][1] = 0
x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
y
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
{10}列表推导式

列表推导式的效率通常比循环语句要快上一倍左右的速度

#示例一
oho = [1, 2, 3, 4, 5, 6]
owo = [i*2 for i in oho]
owo
[2, 4, 6, 8, 10, 12]
#示例二
matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
diag = [matrix[i][i] for i in range(len(matrix))]
diag
[1, 5, 9]
{11}

文章作者: 668rose
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 668rose !
评论
  目录