Python学习笔记2

循环语句、字符串、列表

循环语句

for循环

for 循环可以遍历任何可迭代对象,迭代对象有:字符串、列表、元组、字典等等

range()函数返回一个可迭代对象(类型为对象)

range(stop) start默认从0开始
range(start, stop[, step]) 左闭右开区间[start,stop)

1
2
3
4
#range三种写法
for i in range(5): #[0,5)
for i in range(0,5): #[0,5)
for i in range(0,5,1)
1
2
3
4
5
6
7
8
9
10
#遍历字符串
city="hangzhou"
for i in city:
print(i,end='\t') #end结尾输出
#遍历列表
a=["aa",'bb','cc','dd']
for i in a:
print(i,end='\t')
for i in range(len(a)): #列表索引必须是整数
print(i,a[i])

以求1到100的和为例

1
2
3
4
sum=0
for i in range(1,101):
sum+=i
print(sum)

用一行输出的简便写法:

1
print(sum(range(1,101)))

这题在四月份HW面试深信服的时候面试官问过一模一样的问题,当时只知道用for循环所以没答出来印象很深,真是书到用时方恨少。

while循环

语法:

1
2
while 判断条件(condition):
执行语句(statements)……

python没有do while循环

python中while可以用else语句:

1
2
3
4
5
6
count=0
while count<5:
print(count,"小于5")
count+=1 #python没有i++的写法
else:
print(count,"大于等于5")

这个else感觉有点鸡肋,意义不大啊,不加也一样。

break、continue、pass

break结束循环

continue跳过本次循环

pass是空语句,用作占位语句,不做任何事情

用for循环写一个九九乘法表:

1
2
3
4
for i in range(1,10):
for j in range(1,i+1):
print(f"{i}*{j}={i*j}",end='\t')
print("\n")

数据类型

字符串

字符串用单引号、双引号、三引号括起来,特殊字符用\转义,因为单引号在内容上用的比较多(如英文I’m a boy)所以推荐用双引号包裹

python源码文件默认用utf-8编码,字符串用unicode编码

1
2
3
4
5
6
7
8
9
word='字符串'
sentence='这是一个句子'
paragraph='''
这是第一段
这是第二段
'''
print(word)
print(sentence)
print(paragraph)

常用转义符:\\\'\"\n\t

1
2
3
#my_str="I'm a student."
my_str='I\'m a student.'
print(my_str)

字符串拼接:

+拼接字符串

1
2
str="hangzhou"
print(str+",你好")

字符串截取:

1
2
3
4
5
6
7
8
str="hangzhou"
print(str[0:6]) #切片,从0开始,截取长度为6,左闭右开区间,同range(start,end,step)
print(str[0:7:2])
print(str[3:])
print(str[:5])
print(str*3) #*重复打印
print("hello\nhangzhou")
print(r"hello\nhangzhou") #在字符串前面加r,raw原始字符串不转义内容

字符串方法

一共有40种方法,下面是常用的方法

1
2
3
4
5
6
7
8
9
10
11
.decode("utf-8")
.encode("utf-8")
.isalnum(),所有字符都是字母或数字返回true否则false
.isalpha(),所有字符都是字母返回true否则false
.isdigit(),字符串只包含数字则true否则false
.isnumeric(),字符串只包含数字则true否则false,这个与上面的区别是罗马数字和汉字数字等等不同
.join(seq)方法用于将序列中的元素以指定的字符连接生成一个新的字符串。序列包括字符串、列表和元组
.len(string)获取字符串长度,方便循环
.lstrip([chars])删除左边的空格或指定字符,chars指定字符,默认为空格
.rstrip([chars])删除右边的空格或指定字符,chars指定字符,默认为空格
.split(str="", num=string.count(str))通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。和join正好相反
1
2
3
4
5
6
7
8
9
10
11
12
13
14
s1="-"
s2=""
seq=("z","w","h")
print(s1.join(seq)) #输出z-w-h
print(s2.join(seq)) #输出zwh

str = "this is string example....wow!!!"
print (str.split( )) # 以空格为分隔符
print (str.split('i',1)) # 以 i 为分隔符
print (str.split('w')) # 以 w 为分隔符
#输出如下:
#['this', 'is', 'string', 'example....wow!!!']
#['th', 's is string example....wow!!!']
#['this is string example....', 'o', '!!!']

列表

列表用[]表示,用逗号分隔元素,列表元素类型可以不同,支持数字、字符串甚至可以嵌套列表

列表元素用下标访问,下标从0开始,-1为末尾

列表可以用+拼接,用*重复,用[ : : ]切片,用for循环遍历列表

用法示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
list0=['a',1]
list1=['b',2]
list2=list0+list1 #list2=['a',1,'b',2]
print(list2[0:4:2]) #输出['a','b']
print(list0[0]) #输出a

for i in list2:
print(i)

# while循环可以操作它的下标,for循环不行
i=0
while i<len(list2):
print("第{}个为:{}".format(i,list2[i]))
i+=1

常用方法:

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
39
40
41
#增:
list0=[1,2]
list1=[3,4]
list0.append(5) #将元素添加到末尾
list0.append(list1) #将列表当作一个元素添加到末尾
list0.extend(list1) #将列表中每个元素依次加入末尾
list0.insert(1,2) #insert(下标,元素) 指定位置前插入

#删:
moviename=["加勒比海盗","骇客帝国","第一滴血","指环王","速度与激情","指环王"]
del moviename[2] #指定位置删除或者整体删除del moviename
del moviename #删除整个列表
moviename.pop() #弹出末尾元素,可赋给变量
moviename.remove("指环王") #删除匹配到的第一个元素

#改:
namelist=["小张","小王","小李"]
namelist[1]="小何" #直接修改指定下标的内容就行
print(namelist) #输出["小张","小何","小李"]

#查:在不在的意思 用in/not in判断
namelist=["小张","小王","小李"]
findName=input("请输入要查找的姓名:")
if findName in namelist:
print("找到")
else:
print("没找到")
mylist=["a","b","c","a","b"]
print(mylist.index("a",1,4)) #可以查找指定下标范围的元素并返回找到对应数据的下标
print(mylist.index("a",1,3)) #左闭右开区间[1,3),找不到会报错
print(mylist.count("b")) #统计某个元素个数

#排:
a=[1,2,3,4]
print(a) #输出[1,2,3,4]
a.reverse() #将列表元素反转
print(a) #输出[4,3,2,1]
a.sort() #升序排序
print(a) #输出[1,2,3,4]
a.sort(reverse=True) #降序
print(a) #输出[4,3,2,1]

嵌套列表:

1
2
3
schoolnames=[["北京大学","清华大学"],["浙江大学","杭州电子科技大学"],["浙江师范大学","浙江工业大学"]]
print(schoolnames[0]) #输出['北京大学', '清华大学']
print(schoolnames[0][1]) #相当于二维数组差不多,输出清华大学

小练习

练习一

把8个老师随机分配到3个办公室

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import random
offices=[[],[],[]]
teachers=["A","B","C","D","E","F","G","H"]
for teacher in teachers:
index=random.randint(0,2)
offices[index].append(teacher)
i=1
for office in offices:
print(f"办公室{i}的人数为:{len(office)}")
i+=1
for teacher in office:
print(f"{teacher}",end='\t')
print("\n")
print("-"*30)

练习二

image-20210419215034179

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
products=[["iphone",6888],["MacPro",14800],["小米6",2499],["Coffee",31],["Book",60],["Nike",699]]
i=0
print("-"*6,end='\t')
print("商品列表",end="\t")
print("-"*6,end='\n')
for product in products:
print("{}".format(i),end='\t')
i+=1
for x in product:
print("{}".format(x),end='\t\t')
print("\n")

prod=[]
sum=0
while 1:
tem=input("请输入想买的商品编号:")
if(tem=='q'):
print("购物车商品有:",end='')
for i in prod:
print("{}".format(i),end=' ')
print("总价格为:{}".format(sum))
break
else:
prod.append(products[int(tem)][0])
sum+=products[int(tem)][1]
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2020-2021 Blog of Tianze

请我喝杯咖啡吧~

支付宝
微信