/9/29
字符串格式化表达式,while语句嵌套,for循环,break,continue,死循环
=====================================================================
技巧:
subl中按ctrl+shift+上(下)键,能够上下移动光标所在的行数据
=====================================================================
while语句嵌套:
while a > b:
while b > c:
...
else:
...
实例:
i = 1
while i <= 10:
j = 1
while j < 10
print("i=",i,"j=",j)
j += 1
i += 1
spyder3(python的编译执行器)的使用:
f5 runfile 运行
console 控制台相当于终端
绿色执行蓝色调试执行
variable explorer 可观察变量的变化
=====================================================================
for循环语句:
for语句可以用来遍历序列或可迭代对象的每一个元素(遍历:从头到尾,可迭代:可以从头查到尾)
可迭代对象包括:
字符串str
列表list
元组tuple
字典dict
集合set
固定集合frozenset
迭代器
for语句的语法:
for 变量列表in 可迭代对象:
语句1
...
else:
语句2
...
说明:else子句部分可以省略
语句1的执行次数与可迭代对象的元素个数有关
实例1:
s = "hello"
for ch in s: #能够实现对字符串"hello"的遍历查询
print("ch->>",ch)
else:
print("for语句结束")
print("程序结束")
执行结果:
>>>
ch->> h
ch->> e
ch->> l
ch->> l
ch->> o
for语句结束
程序结束
实例2:
任意输入一个字符串,计算其中的‘a’的个数并打印出来
str = input("请输入一个字符串:")
i=0
for ch in str:
if ch == 'a':
i += 1
print(i)
总结:
能够实现对输入字符串的遍历查询,"for"语句的"in" 和"if" 语句中的"in"返回值略微不同,前者返回遍历字符,后者返回"True"和"False"
range函数:生成可迭代整数数字序列,是个整数集合的对象,经常用在for循环中(比如对电话号码和计数的操作)
格式:见>>>help(range)
range(stop):
从零开始,每次生成一个整数,后加1操作,直到stop为止(不包括stop)
range(start,stop[,step])
start 开始
stop 结束(不包含stop)
step 步长(可以为负数,且可以省略)
例:
range(3) >>> 0 1 2
range(5) >>> 0 1 2 3 4
range(1,8,2) >>>1 3 5 7
range(5,0,-1) >>>5 4 3 2 1
range(1,3) >>>1 2
range(4,0) >>>空,没有数据,不是4 3 2 1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
实例1:
for x in range(10):
print(x)
实例2:
for x in range(10):
print("aaaaaaaaaaaaaaaaaaaa")
>>>aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
------------------------------------
实例3:
打印1-10奇数
打印1-10偶数
print("奇数:",end=' ')
for x in range(1,11)
if x % 2 == 1:
print(x,sep=' ')
------------------------------------
实例4:打印1-100的奇数:
print("奇数:",end=' ')
for x in range(1,11):
if x % 2 == 1:
print(x,end=' ')
print()
注:
print(x,end=' ')
print()
------------------------------------
实例5:
打印100-1000之间的水仙花数(个位3方+十位3方+百位3方= 原数)
例如:153 370
(1)通过取整或求余数得到各个位置的数,再完成水仙花数的判断
for x in (100,1000):
a = x // 100
b = x // 10 % 10
c = x % 10
if x = a**3+b**3+c**3:
print(x)
(2)将整数转换成字符串以便于进行拆减,(数组化后
for i in range(100,1000)
j = str(i)
a = int(j[0])
b = int(j[1])
c = int(j[2])
if i == a**3 + b**3 + c**3
print(i)
(3)
for i in range(100,1000):
m = 0
for j in str(i):
m += int(j)**3
if i == m:
print(i)
=====================================================================
break语句:用于循环语句(while,for)中,用来终止当前循环语句的执行
实例1:
i = 0
while i < 10:
print(i)
i = i + 1 #这是一个动作语句,而不是判断语句,只有在判断语句中,子语句才会缩进进行一个判断和修改,实际上已经缩进在判断语句中
else:
print("while循环结束")
print("程序结束")
bug提示:若i自增缩进错误,将出现提示:IndentationError: unexpected indent
------------------------------------
实例2:
i = 0
while i < 10:
break #while语句结束,break是一个动作语句,缩进在判断语句中
print(i) #如果break放在这一行与print交换位置,则输出0,再打印程序结束
i = i + 1
else:
print("while循环结束")
print("程序结束") #只输出“程序结束”break跳出最近的循环语句;
这里while和else合体构成一个完成的循环系统,所以break用于跳出这个完整的循环系统,不会对循环元素进行任何处理。
说明:
1)break语句通常和if语句组合使用;
2) 当break语句执行后,此循环语句break之后的语句将不再执行;
3)break语句终止循环时,循环语句的else子句将不会执行;
4)break语句只能终止当前循环语句的执行,如有循环嵌套时,不会跳出外重循环(跳出子层,不跳出外层);
=====================================================================
continue语句:用于循环语句中,不再执行本次循环内continue之后的语句,重新开始一次新的循环(跳出子层以后,从下一个循环元素(实际是用本元素继续处理)继续处理)。
示例1:打印10以内的偶数
for x in range(10):
if x%2==1:
continue #奇数将会进行continue处理,即放弃这个循环元素的左右处理,开始下一个循环元素的处理
print(x,end=' ') #如果是奇数,就打印在一行,用空格间隔,但实际不会进行任何的数据处理
else:
print("打印结束")
print("程序结束")
>>>打印结束
打印结束
打印结束
打印结束
打印结束
程序结束
实例2:
x = 1
while x < 10:
if x%2==1:
continue
print(x,end=' ')
x +=1
else:
print("打印结束")
print("程序结束")
总结:这实际上是个死循环,它只有判断语句,由于x<10的原因,x会停在值2反复在else中进行"打印结束"打印操作,变成一个死循环
实例3(改进实例2):
x = 1
while x < 10:
if x%2==1:
x += 1
continue
print(x,end=' ')
x +=1
else:
x += 1 #添加该语句完成x的自增数值循环,否则会停在某个值一直进行打印操作
print("打印结束")
print("程序结束")
说明:
1)在while语句中执行continue语句,将会直接跳转到while语句真值表达式处重新判断循环条件(放弃本元素的处理,将该元素带到真值表达式前完成后面的操作,很容易出现死循环!!)
2)在for语句中执行continue语句,将会从可迭代对象中移向下一个元素再次进行循环;
=====================================================================
14.死循环:是指循环条件一直成立的循环;
死循环通常用break语句来终止循环;
死循环的else子句永远不会执行;
=====================================================================
练习:
1.打印1-20之间的整数,打印在一行显示每个数字之间用一个空格分隔:1 2 3 ...18 19 20
解:
for x in range(1,21):
print(x,end = ' ')
print() #将提示符转到下一行
---------------------------
2.打印1-20之间的整数,每一行打印五个,打印四行,如下:
1 2 3 4 5
6 7 8 9 10
11 12 13...
...
解:
for x in range(1,21):
print(x,end = ' ')
if x % 5 == 0:
print('\n') ##k可以简化为print()
#如果不加引号,会将其认为是变量,进而输出变量的值;这里加了引号,表示输出字符,而又添加了\转义,变成了换行字符,类比空格字符
---------------------------
3.输入一个整数(代表树干的高度),打印如下一棵树:
输入:2 行数前后空格星星
* 1 1 1
*** 2 0 3
*
*
输入:3
* 1 2 1
*** 2 1 3
***** 3 0 5
*
*
*
...
解:
n = input("请输入一个整数:")
n = int(n)
for x in range(1,n+1): #这个x用来记录三角形的行数,即第x行;只是用于计数
print(' '*(n-x),'*'*(x*2-1),' '*(n-x),end='\n')
for x in range(1,n+1):
print(' '*(n-1),'*',end='\n') #同上,记录树干的行数;只是用于计数
补充:输出部分可以不用,而使用+ 进行追加
---------------------------
4.输入unicode的起始编码和终止编码,打印此范围内所有的字符,如:
$./my_unicode.py
请输入起始值:48
请输入终止值:64
打印结果如下:
十进制编码十六进制编码(hex())文字chr()
48 0x30 0
49 0x31 1
50 0x32 2
解1:
n1 = int(input("请输入起始值:"))
n2 = int(input("请输入终止值:"))
print("十进制编码",' '*3,"十六进制编码hex()",' '*3,"文字,chr()",end='\n')
for x in range(n1,n2+1):
print(x,' '*(len('十进制编码')+6),hex(x),' '*(len('十六进制编码hex
()')+6),chr(x),end='\n')
注意:要注意print的位置
新解法:
begin = int(input("请输入起始值:"))
end = int(input("请输入终止值:"))
print("十进制编码十六进制编码文字")
for x in range(begin,end+1):
print(str(x).center(11),hex(x).center(14),chr(x))
5.打印九九乘法表
解:
for x in range(1,10):
for y in range(1,x+1):
print(x,'*',y,'=',x*y,' ',sep='',end=' ')
print('\n')
新解法:!!!!!!!!!!!!!
for row in range(1,10):
for col in range(1,row+1):
print("%d*%d=%d" % (col,row,col*row),end=' ') ##格式化输出
print() ##与上一行末尾的' '连用能够实现一行多元素输出后再转行
6.打印前20个斐波那契数:1 1 2 3 5 8 13 21 34 55...
解:
a=1
b=1
print(a,b,sep=' ',end=' ')
for i in range(1,10):
a=a+b
print(a,end=' ')
b=b+a
print(b,end=' ')
print('\n')
补充:
print(a,b,sep=' ',end=' ')
可以写成:
print(a,end=' ')
print(b,end=' ')
解法1:
a = 1
b = 1
print(a,end=' ')
print(b,end=' ')
for i in range(18):
n = a + b
print(n,end=' ')
a = b
b = n
print()
解法2:
a = 1
b = 1
print(a,end=' ')
print(b,end=' ')
for i in range(18):
print(a+b,end=' ')
a , b = b , a + b
print()
新的解法3-元组赋值-for:
a = 1
b = 1
for x in range(20):
print(a,end = ' ')
a,b = b,a+b
print()
解法4-列表-元组赋值:
a = 1
b = 1
L = []
for x in range(20):
L.append(a)
a,b = b,a+b
for x in L:
print(x,end=' ')
print()
解法5-列表形式输出:
a = 1
b = 1
L = []
for x in range(20):
L.append(a)
a,b = b,a+b
print(L)
解法6-列表:
L = [1,1]
while len(L) < 20:
L.append(L[-1]+L[-2])
print(L)