基本语法
- 输入
a = int(input())
b = int(input())
- 输出
print(a,b,c) # 以空格分隔,then换行
print(a,b,c,end="")# 以end后的值为分隔,不换行
- python变量均为指针
b=1 # b指向1所在的内存位置
a=b # a指向b所在的内存位置
a is b # a和b所在内存位置相同
a==b # a,b指向值相等
- 赋值(交换a,b值)
a,b = b,a
print(a,b)
a=b=c=1
print(a,b,c)
字符串
- 字符串,用‘ ’ ,“ ”
- “”" 三双引号 “”"中可以包含换行符、制表符
ptint("""Tab(\t)我爱你\n"""")
- 字符串下标,从左至右0 - n-1 ,从右至左-1 - -n
a="I love you"
print(a[-1]) # I
print(a[0]) # I
- 字符串内容不可更改
- +连接字符串
- 用in/not in 判断子串
a="Hello"
print("He" in a) # true
print("EL" not in a)# true
- 字符串–数转化(整数和字符串无法相加)
int(x)/float(x)/str(x)/eval(x)
- string.split() 空格分隔字符串为一个列表
- ord(x)求字符x的编码
- chr(x)求编码为x的字符
- 字符串
- 字符串函数
s="AABCDE"
s.count(A) # 2
s.find(A,0) #从头开始查找A第一次出现的下标 0,find找不到-1,index找不到报错
s.rfind(A,4) #从尾部开始查找A第一次出现的下标 1,rfind找不到-1,rindex找不到报错
x=s.replace(A,B) #将A替换为B BBBCDE,但是s原本不变AABCDE
s.strip() #去除头尾空白字符的字符串
s.lstrip() #去除头空白字符
s.rstrip() #去除尾空白字符
s.strip('.') #去除头尾.的字符串
- 字符串切片
s="ABCDE" #s[n:m:z]-->每z个字符取得下标为n到m-1的字符(z为负数则倒着取)
s[0:2] #AB
s[-3:-1] #CD
s[:2] #AB
s[2:] #CDE
s[::-1] #倒着每1个字符取一个,即将字符串反转EDCBA
s[0:4:2] #AC
列表 List
- 声明 list = [1,2,3,4] / lsit = [“good”,“fuck”]
- 列表后面添加元素,不会生成新的列表(注意与元组的区别)
list=[1,2,3]
list2=list
list+=[4]
print(list is list2) # True
-
list.append(200) 在列表尾部添加元素200,del list[1] 删除列表下标为1的元素
-
len(list) 求元素个数长度(列表,字符串,元组等)
-
对于列表而言,list+=list2 != list=list+list2
list1=list=[1,2,3]
list+=[4,5,6] # 在list尾部添加元素4,5,6
print(list1 is list) # True
list=list+[7,8,9] # 将list和[7,8,9]组合,重新生成新的列表,再赋值给list
print(list1 is list) # False
- 列表乘法(去掉一层[])
a=[0]*2 # a=[0,0]
b=[[0]]*2+[[0]]*2 # b=[[0],[0],[0],[0]]
c=[[0]*2] # c=[[0,0]]
b[0][0]=5 # b=[[5],[5],[0],[0]]
b[2][0]=6 # b=[[5],[5],[6],[6]]
- 用 in 判断列表是否包含某个元素
list=[1,2,3,4]
print(3 in list,5 not in list) # true true
- 列表排序
a.sort() # a列表从小到大排序,默认比较元素本身大小
a.sort(key=function) # 比较以a列表中每一个元素为参数调用方法function后的大小
a.sorted() # 返回一个新的从小到大的列表
- 自定义比较规则排序
student=[
('John','A',15),
("Mike","B",12),
("Mike","C",18),
('Bom',"D",10)
]
student.sort(key=lambda x:x[2]) #student中的每一个元组作为参数,返回元组中下标为2的元素,进行从小到大比较
student.sort(key=lambda x:-x[2]) #student中的每一个元组作为参数,返回元组中下标为2的元素,进行从大到小比较
print(student)
算数表达式
- / 普通除法,结果一定是小数
- // 取整
- **取幂
- %取余
z = 10.0-1
print(z) # 9.0
逻辑表达式
- and 且,or或
- 0,"",[]相当于False,但不等于False
print(not "")# true
print([])# false
条件分支
if 条件1:
执行语句
elif 条件2:
执行语句
else:
执行语句
### 必须有缩进且对齐!!
循环
- for
for i in range(5): #[0,5)
for i in range(0,10,3): #[0,10)步长3
for i in [1,2,3,4]: #[1,4]
for i in range(5):
if i==4:
break
else:
# else 会在for循环结束时执行,若break了则不执行
- 斐波那契数列
n = int(input())
s,temp=0,1
for i in range(1,n+1):
s+=i*temp
temp*=i
print(s)
函数
def fun(can1,can2,can3,....):
sentence
return can1
- 全局变量 global n
- 局部变量注意
n=9
def fun():
print(n)
n=10
# UnboundLocalError: local variable 'n' referenced before assignment
- 递归(上楼梯、汉诺塔、雪花曲线)要善于考虑n-1,n-2对原规模问题的优化
## 上楼梯,一次上1或2级楼梯,上n层楼有多少种方法
def upstep_way(n):
if n==1:
return 1
elif n==2:
return 2
else:
return upstep_way(n-1)+upstep_way(n-2)
转义字符
- ’ \'后面的字符连在一起成为转义字符
s="abac\t" # \t为转义字符
s=r"abc\t" # 加上r取消转义
元组
- 由,号分隔
t=123,4556,678
u=t,9999 #输出 ((123,4556,678),999)
- 元组元素不能赋值(元组元素是指针,指针指向的位置一旦确定,不可更变,但是可以更改指针指向位置的内容)
- 元组元素内容可以修改
v=1,2,[1,2,3]
v[2]=222 #报错
v[2][1]='world' #即 将[1,2,3]改为['world',2,3]
- 元组切片和访问 与字符串一致
- 元组后面添加元素时,会生成一个新的元组
t=(1,2,3)*3 # 等价于(1,2,3,1,2,3,1,2,3)
b=1,2,3,4
a=b
print(a is b) # True
t+=(200,) # 生成了一个新的元组
print(a is b) # False
- 元组排序只能用sorted()