PYTHON-学习笔记

1.1语言概述

1.1.1运行模式

命令行模式:整个程序一起运行(常用)

交互模式:只能运行一个句子(好处:不用print)

1.1.2变量替换

a="1"
b="2"
c=a
a=b
b=c
print(a, b)
a="1"
b="2"
a,b=b,a
print(a, b)

2.数据表示与操作

2.1变量名(标识符)

大小写不一样:age != Age

由于python是动态语言,故不需要提前定义变量

不可使用关键字:59354eabbef647839acdf2149800d8b7.png

内置函数名一旦作为标识符,虽然合法但原有函数功能会消失

尝试用英文翻译+下划线命名法:如用户名user_name而不用yong_hu_ming

2.2运算符号 

普通运算符号

乘号:*

除号:/  (注意不是" \ ",这是转义符号)

乘方:**

其余运算符号 

导入math函数库:

                            import math
                            math.函数名()

import math
print(math.sqrt(3))#输出根号三

运算优先级

() > ** >正负号> */ > +-    eg.-2**4=-16

运算顺序:乘方从右到左,其余从左到右

2.3注释

#一行注释
#多行注释1:选中,按 ctrl和/ 省略
# 1
# 2
# 3
#取消多行注释1:选中,按 ctrl和/ 省略
1
2
3
#多行注释2:"""注释"""
"""1
2
3
4"""

2.4数据类型

求数据类型:type()

a="123"
print(type(a))#输出a的数据类型

数据类型转换

eval(“表达式”)=表达式

如x,y=eval("3","4")则x=3,y=4

可变类型:字典、列表、集合(其余为不可变)

序列:列表、字符串、元组

*改变序列,相当于改变背后的对象

序列的方法

2.4.1字符串str

a="abcde"
b='cdefg'

字符串不可变

s='hello'
s[0]='k'#会报错

求字符串长度:len()

        任何符号(包括空格)都算一个长度;一个完整的转义符(如\n)只算一个长度。

a="abc"
print(len(a))#求字符串a长度

索引字符串字符

a="abcde"
print(a[0],a[4])#输出字符串a第1、5个字符

字符串运算符

+ 连接两个字符串

* 复制一个字符串并形成一个新的字符串

常用方法
s='abcdef'
s.upper()#将字符串s中所有字母改为大写
s.lower()#将字符串s中所有字母改为小写
s.replace('edf','g')#将字符串s中对应字符改为指定字符

“his age is {}".format(age)
"my name is {1},age is {0}".format(age,name)#序号也是从0开始

a.strip()#去掉字符串a两边的空格
a.rstrip()#去掉字符串a右边的空格
a.lstrip()#去掉字符串a左边的空格

table=str.maketrans(str1,str2)#生成str1和str2中对应元素对应的转换表table
b=a.translate(table)#根据转换表table将a的元素转换为对应的b的元素

a = ['hello','good','boy','wii']#列表a中元素类型必须为字符串才能用join
print(' '.join(a))#hello good boy wii
print(':'.join(a))#hello:good:boy:wii

title = "this is a name"
result = title.find("is", 0, 9)
print(result)#若没有,不会像index一样报错,会输出-1

注意:字符串不可变,方法处理后生成的是一个新对象

格式化

'{0:*>10}'.format(10)#用*填充,共十位,右对齐

字符串连接

print("hello"+" "+"world")

单双引号转义

print("he said "yes"")#错误的
print('he said "yes"')#正确的

换行:\n

print("hello\nworld")
print(r"hello\nworld")#=print("hello\\nworld"),让转义字符照样输出,不生效

           三引号跨行字符串

print("""hello
world""")

2.4.2列表list

shopping_list=["键盘","键帽"]#将“键盘”“键帽”两个加入列表shopping_list
shopping_list.append("显示器")#将“显示器”加入列表shopping_list的末尾
shopping_list.remove("显示器")#将“显示器”移除列表shopping_list
len(shopping_list)#求列表shopping_list长度(即元素数量)

注意:用变量名.方法(...)如append、remove等的时候已经改变了原来的列表,故不需要重新对原列表赋值

列表中元素索引与字符串相同

创建列表

a=list('hello')#a=['h','e','l','l','o']
b=list(range(1,10,2))#b=[1,3,5,7,9]

二维列表

列表元素种类

a=[[1,2,3],[4,5,6],[5,6,7]]#创建【1 2 3|4,5,6|7,8,9】的矩阵
b=a[0][0]#访问列表第一行第一个元素

列表操作

a[1]=2#将第一个元素修改为2

name=list('perl')
name[2:]=list('ab')#将列表name里第三个及以后元素改变为ab

list=['11','22','33','44']
del list[2]#删除列表list中第三个元素

列表的方法

常用函数

list=[3,5,2,-1,4]
print(max(list))#打印列表里的最大值
print(min(list))#打印列表里的最小值
print(sorted(list))#打印从小到大排序好的列表

2.4.3字典

创建

fac={}或fac=dict()

fac=dict([("math","1"),("english","2")]

fac=dict(math="11",english="22")

格式

dictionary={键1:值1,键2:值2,键3:值3}

contacts={("张伟",23):"15000000",
("张伟",34):"15000001",
("张伟",56):"15000002",}
zhangwei23_phone=contracts[("张伟",23)]

键必须是不可变数据类型,即不可以用列表→所以用元组,如tuple=("元素1","元素2")

contracts["美女A"]="13660401028"#往字典contracts中添加或覆盖(原来已有)美女A的值
print("小明" in contracts)#如果为True则字典contracts中有"小明"这个键,False反之
del contracts["小明"]#删除字典contracts中小明键和对应的值
len(contracts)#求字典contracts中有几个键值对
方法
print(score["张三"])#若不存在会报错
score.get("张三")#访问键“张三”对应的值,若不存在会返回None
score.get("张三",k)#访问键“张三”对应的值,若不存在会返回k
score.key()#返回字典score内所有键
score.values()#返回字典score内所有值
score.items()#返回字典score内所有键和值
改变项

常用操作

len()

比较是否相同:==或!=

合并字典1、字典2:{**dict1,**dict2}(如键有重复,2覆盖1)

排序

①先转化为列表

b=list(d.items())

按照键排序:b.sort(key=lambda x:x[0])#若用此法,①不可省

                 或 d=dict(sorted(d.items(),key=lambda x:x[0])

按照值排序:b.sort(key=lambda x:x[1])

                 或 d=dict(sorted(d.items(),key=lambda x:x[1])

2.4.4数字类型

布尔:True和Fulse(=0)

关系运算符:== != >=等等

                    字符串间可比较大小:依次比较字符编号(但字符串不能与数字比)

逻辑运算符:not > and > or

一般=True可省略,即:i%3 等价于i%3==1, not i%3等价于i%3==0

空值:None

a=None#a为空值,里面什么都没有

整数int

进制形式

二进制0b

八进制0o

十六进制0x,如0x10=16


进制转换

10-2 bin()

10-8 oct()

10-16 hex()……………hex(16)="0x10"

复数complex:虚部用j表示,如1+3j,2j…(j大小写均可)

浮点数float

“/”为浮点数除法,结果为浮点数。如10/2=5.0

运算一方为浮点数,结果就是浮点数

浮点数运算有误差:用decimal函数

a=decimal.Decimal("2.1")

math库

33545e3f51644a16a1f230d7f0b00a20.jpg

2.4.5元组

特点:不可变,可作为字典的键和集合的元素(而列表不可以)

turple=(1,7,3,3)
a=turple.count("3")#计算3出现的次数
b=turple.index("7")#计算7下标

2.4.6集合

创建集合

fruit={apple,orange,pear,grape}#直接赋值,如果遇到相同项会直接删去
empty_set=set()#创建空集合
#empty_set={}则创建空字典
prime=set([1,2,3,1,a])#将列表转换为集合
操作

添加元素:add()

删除元素:discard()删除某个元素,若不存在不会报错

                   remove()删除某个元素,若不存在会报错

                   clear()删除所有元素剩下空集合

其他:sum(),len(),in,not in,max(),min()

方法

s1.issubset(s2) s1是否是s2的子集

s1.isupperset(s2) s1是否是s2的超集

运算

保留原顺序并去重

生成幂集

2.5输入

input():默认输入字符串(“()”为函数标志,括号内为参数)

如何输入提示语:input("提示语")

一行如何输入多个值:m,n=input().split()

                          split函数本质上是将输入的东西通过括号内的东西进行切分。

转换字符类型

int("123")#将字符串“123”转换为整数123
float("123")#将字符串“123”转换为浮点数123
#例子
age=int(input("请输入您的年龄:"))
print("您十年后会是"+str(age+10)+"岁")

2.6输出

如何设置多个输出值之间的分隔(默认为空格):print(a,b,c,sep=",")

如何设置输出的结束符(默认为换行\n:print(a,end="")

输出格式控制

print(f"我的名字是{name},身高是{height:.1f}")

print("my name is {:},height is{:}".format(name,height)")

2.7函数

2.7.1内置函数

内置转换函数

e9aa6cfa52734c34a2158918f4b5dd9c.jpg

将其他进制转化为十进制:int('10101011',2) #将二进制数 10101011转化为十进制

匿名函数lambda
# 匿名函数lambda:用一行定义函数
f1=lambda x:2*x+5#即f(x)=2x+5
f2=lambda a,b:a+b#即f(a,b)=a+b
排序函数sorted
# 排序函数sorted(序列,比较的元素,升/降序)
a={'a':4,'b':3,'c':2,'d':1}
b=sorted(a.items(),key=lambda s:s[1],reverse=False)#默认升序False
print(dict(b))
#输出{'d': 1, 'c': 2, 'b': 3, 'a': 4}
map函数
# map(功能,序列1,序列2……)
b=list(map(lambda x:x*2+1,[1,3,5,7]))
print(b)
#输出[3, 7, 11, 15]
c=list(map(lambda a,b:a*2+b*3,[1,3,5,7],[2,4,6,8]))
print(c)
#输出[8, 18, 28, 38]
zip函数
# 元组打包函数zip(对象1,对象2,……)
a=[1,2,3]
b=[5,6,7]
c=[7,8,9]#记得分行哈~
print(list(zip(a,b,c)))
#输出[(1, 5, 7), (2, 6, 8), (3, 7, 9)]
#可用于重构字典
d={'a':1,'b':2,'c':3}
D=dict(zip(d.values(),d.keys()))
print(D)
#输出{1: 'a', 2: 'b', 3: 'c'}
eval和exec函数
# eval:运行“数学表达式”
eval("1+2+3")
# exec:运行“python程序”
exec("print('good')")#两个引号不能一样
all和any函数
# all([元素1,元素2……]):参数都是True时才返回True
print(all([1,1,3,0]))
# any([元素1,元素2……]):参数有一个True时就返回True
print(any([1,1,3,0]))
#备注:True==1,False==0

2.7.2模块导入(import)

import module_name
→module_name.f()

from module_name import function1,function2
→function1(),function2()

from module_name import*
→function3(),function4()

import module_name as mn
→mn.f()

2.7.3特殊函数

2.7.3.1随机函数

2.7.4参数

位置参数

def position(a,b):
    print(b,a)
    return
position(7,787)
#输出787 7

关键字参数

def key(a,b):
    print(b,a)
    return
key(b=7,a=898)
#输出7 898

默认值参数

def moren(a,b=10086):
    print(b,a)
    return
moren(7)#未提供参数值时,输出指定默认值
moren(8,9)#提供参数值时,调用时替代默认值
#输出10086 7和9 8

不定长参数

def buding1(a,*b):
    print(a,b)
    return
buding1(1,2,3,4,5,6,7)#一个星号会接受一个元组类型
def buding2(a,**b):
    print(a,b)
    return
buding2(1,x=1,y=2,z=3)#两个星号会接受一个字典类型

 备注:如何才能输入后输出1 (2, 3, 4)?

def a(x,*y):
    print(x,y)
s=list(map(int,input().split()))#输入1 2 3 4
a(*s)

2.7.5变量

3流程控制

分支结构

条件语句if

单分支:if...

双分支:if...else...

ff66406dd81043e7a5e790b152bd2df4.png

多分支:if...elif...else

#比较某个数与60的大小
num=int(input("请输入一个数字:"))
if num > 60:
    print(str(num)+"比60大")
elif num < 60:
    print(str(num) + "比60小")
else:
    print("你输入的是60")

嵌套条件语句

5176321a570544e1b83ccf15b7a258b2.png 83c5dd7fc3a0477785d2867f19bb6490.png

有时候可以用逻辑符号and or not 来简化条件语句

条件语句while

注意:循环内必须有i=i+1否则会死循环

特殊语句

break语句:跳出所在的(最近的一个)循环

*若由break跳出,则不执行else的语句块2;若循环正常结束,由else,则执行语句块2

continue语句:跳过本次循环

4文件

4.1文件的打开与关闭

打开文件:open(filename,mode)

filename可以是文件的实际名字,也可以是包含完整路径的名字

infile=open('d:\python\test.txt','r')#错误的
infile=open(r'd:\python\test.txt','r') 
infile=open('d:\\python\\test.txt','r') 
infile=open('d:/python/test.txt','r')

或者: ,这种方式不用close

关闭文件:file.close()

4.2文件读取和写入

文件读取

文件写入

文件的标准输入和输出(就是直接定向输入输出的位置,不用说别的)

import sys
# 重定向标准输入到文件
sys.stdin = open("input.txt", "r")
# 重定向标准输出到另一个文件
sys.stdout = open("output.txt", "w")

#后续操作
# 后续直接用sys.stdin和sys.stdout作索引
# while True:
#     line = sys.stdin.readline()
#     if not line:
#         break
#     sys.stdout.write(line)
# # 关闭文件
# sys.stdin.close()
# sys.stdout.close()

4.3文件操作(例题示范)

1文件复制

a=open("C:\\Users\\蔡予\\OneDrive\\桌面\\cj.txt",'r')
b=open("C:\\Users\\蔡予\\OneDrive\\桌面\\cjback.txt",'w')
c=a.read()
b.write(c)
a.close();b.close()
2文件合并

把file1.txt和file2.txt文本文件的每一行交替合并到file.tex中,最后把行数较多的剩余内容全部写道file.tex中。

前:后:

f1=open("C:\\Users\\蔡予\\OneDrive\\桌面\\file1.txt",'r')
f2=open("C:\\Users\\蔡予\\OneDrive\\桌面\\file2.txt",'r')
f=open("C:\\Users\\蔡予\\OneDrive\\桌面\\file.txt",'w')

# print(f1.readlines())
# print(f2.readlines())#先试试看看输入成不成功、细节上有没有出问题

flag=1
while True:
    line1=f1.readline()
    if line1:#line1!=0即line1存在
        f.writelines(line1)
    else:
        flag=1
        break
    line2 = f2.readline()
    if line2:
        f.writelines(line2)
    else:
        flag=2
        break
if flag==1:
    f.writelines(f2.readlines())#lines和line不一样哦~
else:
    f.writelines(f1.readlines())
f1.close();f2.close();f.close();
3计算平均分

文件score.txt是学生一学期的成绩,计算总评成绩(笔试*50%+平时25%+实验*25%)并按照以下格式输出

文件:输出:

#读入多行文本
f=open("C:\\Users\\蔡予\\OneDrive\\桌面\\score.txt",'r',encoding='UTF-8')
s=f.readlines()

#输出头部信息
l0=s[0].split()
print("{:<4s}{:<3s}{:<3s}{:<3s}{:<3s}{:5s}".format(l0[0],l0[1],l0[2],l0[3],l0[4],"平均分"))

#计算平均分
for line in s:
    l=line.split()
    if l[2].isdigit() and l[3].isdigit() and l[4].isdigit():
        s=round(int(l[2])*0.5+int(l[3])*0.25+int(l[4])*0.25,2)

#按格式输出
    if l[2].isdigit() and l[3].isdigit() and l[4].isdigit():
        print("{:4s}{:^4s}{:^5s}{:^5s}{:^5s}{:.2f}".format(l[0],l[1],l[2],l[3],l[4],s))

#不要忘了关闭文件
f.close()

异常处理 

try:
    正常的操作
except:
    如果报错的操作

典型问题

排序问题

1)选择法:选择最大/小的放到最前面

list=[30,81,31,65,87]
for i in range(len(list)-1):
    idx=i
    for j in range(i,len(list)):
        if list[j]>list[idx]:
            idx=j
    list[idx],list[i]=list[i],list[idx]
print(list)

2)冒泡法:相邻比较,把大/小放后面

list=[30,81,31,65,87]
for i in range(len(list)-1):
    for j in range(len(list)-1,i,-1):
        if list[j-1]<list[j]:
            list[j],list[j-1]=list[j-1],list[j]
print(list)

搜索问题

二分法

统计计数问题

提取特殊种类信息(如数字)

数列求和(积)

1)for循环:项数已知

2)while循环:精确度等限制条件已知

最好用递推公式算,不仅可以避免阶乘,还可以大大减少计算量(若用阶乘,因为10^6的阶乘太大运算不了)。

图形

循环结构

打印n阶杨辉三角

n=int(input())
a=[0]*n#占好n行
for i in range(n):
    a[i]=[1]*(i+1)#有数字的地方全拿1填充
for i in range(2,n):#从第三行开始处理
    for j in range(1,i):#只处理非1位
        a[i][j]=a[i-1][j-1]+a[i-1][j]
print(a)

穷举求解

数论类

1)公约数、公倍数

2)斐波那契数列

二维数组

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值