四、循环语句之for
python 的循环有两种,一种是我们之前讲的while循环,另外一种就是for...in循环,依次把list或者tuple中的元素或者字符串迭代出来。
name = ['lili','Bob','Tracy'] for name in names: print(name)
执行这段代码,会依次打印names的每一个元素
lili Bob Tracy
所以 for x in … 循环就是把每个元素带入变量x,然后执行缩进块语句。
计算1~10的整数之和,可以用一个sum变量做累加:
sum = 0 for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: sum = sum + x print(sum)
如果要计算1~100的整数之和,从1到100有点困难,在python中提供一个range()函数,可以生成一个整数序列,再通过list()函数可以转换为list,比如range(5)生成的序列是从0开始小于5的整数。
sum = 0 for x in range(100): sum += x print(sum)
for 循环使用else语句
与while...else类似,else也会在循环正常执行完的情况下执行
for i in range(10): print(i) else: print("********")
range函数
range函数可创建一个可迭代对象,一般用在for循环中
函数语法:
range([start,] stop[, step])
参数说明:
1.start:计数从start开始,默认从0开始,例如:range(5)等价于range(0, 5) 2.stop:计数到stop结束,但不包括stop。例如:range(0,5)的取值为[0,5) 3.step:步长,默认为1,例如range(0,5) 等价于range(0, 5, 1)
函数返回一个可迭代对象,从这个可迭代对象中可以获取一个整数列表
#使用list函数,可以从可迭代对象中获取整数列表 >>> list(range(5)) [0, 1, 2, 3, 4]
嵌套循环
我们可以循环体中嵌套循环
需求:打印九九乘法表
''' 行 列 1x1=1 1 1 1x2=2 2x2=4 2 2 1x3=3 2x3=6 3x3=9 3 3 ... 总结:列数随着行数的变化而变化,列数的最大值和行数相等。 ''' i = 1 while i <= 9: j = 1 while j <= i: sum = j*i print("%dx%d=%d"%(j,i,sum),end=" ") j += 1 print("") i += 1 ''' 打印结果: 1x1=1 1x2=2 2x2=4 1x3=3 2x3=6 3x3=9 1x4=4 2x4=8 3x4=12 4x4=16 1x5=5 2x5=10 3x5=15 4x5=20 5x5=25 1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36 1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49 1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64 1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81 '''
拓展:
默认情况下使用print("")会自动打印换行符,如果需要更改换行符则需要在print()中添加end属性即print("",end=" "),这样就把换行更改成空格
五、String字符串
1.什么是字符串
字符串是以单引号或者双引号括起来的任意文本,一个字符串由若干个任意字符组成
2.创建字符串
str1 = "hello world" str2 = 'you are good'
3.字符串运算
3.1字符串链接
3.1.1 使用加号进行链接
#字符串的链接,通过“+”进行链接 s1 = 'welcome' s2 = 'to guangzhou' print(s1 + s2)
注意:字符串 + 数字,这样会报错,不同类型的不能相加
3.1.2 使用“,”进行链接【tuple类型】
s1 = 'hello' s2 = 'world' print(s1, s2) #使用“,”链接的时候,在“,”的位置会产生一个空格
3.1.3 使用%格式化链接
s1 = 'hello' s2 = 'world' print("%s %s"%(s1, s2))
3.1.4 使用join函数进行链接
s1 = ['hello', 'world'] print("".join(s1))
注意:"".join()函数内部只需要传递一个参数。
3.2 重复输出字符串
#重复输出字符串,通过乘法的方式实现 s3 = 'good' print(s3 * 3)
3.3 获取字符串中的字符
#通过索引的方式实现 #索引:给一个字符串中的字符从0开始编号,也成为下标 #索引的取值范围:[0,str.length-1] #访问方式: 变量名称[索引] str3 = 'good' print(str3[0]) #索引值还可以从-1开始,-1代表倒数第一个字符 print(str3[-1])
3.3 截取字符串
# 通过下标截取字符串 str1 = "hello world" print(str1[3:6]) #注意:截取字符串的范围是str[start : end] 它是一个前闭后开的区间[start,end) #如果n的值超过了字符串的最大长度,则仍然截取原下标的长度 #从开头截取到指定索引之前[0,5) print(str1[:5]) #从指定截取到结尾[4,str1.length) print(str1[4:]) #注意在使用str[start : end]来截取字符串的时候,若start不写默认从第一个字符开始 #若end不写,则默认到最后一个字符结束
3.5 判断是否包含指定字符
#判断字符串中是否包含某指定字符串 str4 = "you are a good boy" print("good" in str4) #若包含有则返回True否则为False
3.6 格式化输出
#通过%来改变后面的字母或者是符号的含义,%被称为占位符 # %s:打印字符串 print ("His name is %s"%("Aviad")) # %d:打印整数 print ("He is %d years old"%(25)) # %f:打印浮点数,可指定小数点后的精度 print ("His height is %f m"%(1.83)) # %.2打印浮点数(指定保留小数点位数) print ("His height is %.2f m"%(1.83)) #指定占位符宽度 print ("Name:%10s Age:%8d Height:%8.2f"%("Aviad",25,1.83)) #指定占位符宽度(左对齐) print ("Name:%-10s Age:%-8d Height:%-8.2f"%("Aviad",25,1.83)) #指定占位符(只能用0当占位符) print ("Name:%-10s Age:%08d Height:%08.2f"%("Aviad",25,1.83)) age = 18 name = "丽丽" weight = 45.5 print("my name is %s , I am %d year old and my weight is %.2f kg"%(name, age, weight)) #注意:%.nf表示精确到小数点后n位,会四舍五入
4.关于字符串常用函数
4.1 eval(str)
功能:将字符串str当成有效的表达式来求值并返回计算结果。
可以把list,tuple,dict, set和string相互转化
>>>num1 = eval('123') >>>print(num1) 123 >>>num2 = eval("[1, 2, 3]") >>>print(num2) [1, 2, 3] >>> num3 = eval("12-3") >>> print(num3) 9
4.2 len(str)
功能:返回当前字符串的长度(字符的个数)
>>> len("you are good") 12
4.3 str.lower()
功能:返回一个把字符串中的大写字母转换为小写字母 的字符串
>>> str = "Hello World" >>> print(str.lower()) hello world
注意:此方法不改变原本的字符
4.4 str.upper()
功能:返回一个把字符串中的小写字母转换为大写字母的字符串
>>> str = "Hello World" >>> print(str.upper()) HELLO WORLD
4.5 str.swapcase()
功能:返回一个把字符串中的大写字母转为小写字母,小写字母转换为大写字母的字符串
>>> str = "Hello World" >>> print(str.swapcase()) hELLO wORLD
4.6 str.capitalize()
返回一个首字母大写,其他小写的字符串
>>> str = "Hello World" >>> print(str.capitalize()) Hello world
4.7 str.title()
返回一个每个单词首字母大写的字符串
>>> str = "Hello World" >>> print(str.title()) Hello World
4.8 str.center(width[, fillchar])
功能:返回一个指定宽度的居中字符串,fillchar为填充的字符,默认使用空格
>>> str = "Hello World" >>> print(str.center(50,"*")) *******************Hello World********************
4.9 str.ljust(width[, fillchar])
功能:返回一个指定宽度的左对齐字符串,fillchar为填充字符。默认使用空格填充
>>> str = "Hello World" >>> print(str.ljust(50,"*")) Hello World***************************************
4.10 str.rjust(width[, fillchar])
功能:返回一个指定宽度右对齐字符串,fillchar为填充字符,默认使用空格填充
>>> str = "Hello World" >>> print(str.rjust(50,"*")) ***************************************Hello World
4.11 str.zfill(width)
功能:返回一个长度为width字符串,原字符串右对齐,前面补0
>>> str = "Hello World" >>> print(str.zfill(50)) 000000000000000000000000000000000000000Hello World
4.12 str.count(str 【,start】【, end】)
功能:返回字符串中str出现的次数,可以指定一个范围,若不指定则默认从头到尾,匹配的时候是区分大小写的。
>>> str = "Hello World" >>> print(str.count("hello", 0 , 10)) 0
4.13 str.find(str1【, start】【, end】)
功能:从左到右检测str1字符串是否包含在字符串中,可以指定范围,默认从头到尾。
返回的是第一次出现的开始的下标,若未查询到,则返回-1
>>> str = "Hello World" >>> str1 = "llo" >>> print(str.find(str1, 0 , 10)) 2
4.14 str.rfind(str1【, start】【, end】)
功能:类似于str.find(),不过是从右边开始查找
>>> str = "Hello World" >>> str1 = "llo" >>> print(str.rfind(str1, 0 , 10)) 2
4.15 str.index(str1[, start = 0] ,[ end = len(str)])
功能:类似于find(),与find() 不同的是,如果str1不存在的时候会报一个异常
>>> str2 = "Hello World" >>> str1 = "hello" >>> print(str2.index(str1, 0 , 10)) ValueError: substring not found
4.16 str.lstrip()
功能:截掉字符串左侧指定的字符串,则默认删除空白符(包括'\n', '\r', '\t', ' ')
>>> str = '**** you are very good' >>> print(str.lstrip()) >>> print(str.lstrip()) **** you are very good >>> print(str.lstrip("*")) you are very good
4.17 str.rstrip()
功能:截掉字符串右侧指定的字符串,则默认删除空白符(包括'\n', '\r', '\t', ' ')
>>> str = '**** you are good****' >>> print(str.rstrip()) **** you are good**** >>> print(str.rstrip("*")) **** you are good
4.18 str.strip()
功能:截掉字符串左右两侧指定的字符串,则默认删除空白符(包括'\n', '\r', '\t', ' ')
>>> str1 = " hello world " >>> str1.strip() 'hello world'
4.18 string.split(str="", num=string.count(str))
功能:以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。 num -- 分割次数
>>> str1 = "hello you are good" >>> str1.split() ['hello', 'you', 'are', 'good'] >>> str1.split(" ",2) ['hello', 'you', 'are good ']
练习题