您的位置:首页 > 编程语言 > Python开发

python笔记5 - 字符串格式化表达式,while语句嵌套,for循环,break,continue,死循环

2017-10-29 22:56 991 查看

2017/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)
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐