zoukankan      html  css  js  c++  java
  • 循环语句(2)和列表

    循环语句2

    for 语句

    作用:
    用来遍历(所有的事情只经历一遍)迭代对象的数据元素
    讲解:火车发现朋友发朋友圈同一两火车,去找朋友,火车车厢的,把所有的车厢找一遍就能找到他。
    可迭代对象是指能一次获取数据元素的对象
    可迭代对象包括:
    字符串:str
    列表: list
    元组: tuple
    字典: dict

    for 语法
    for 变量列表 in 可迭代对象:
    语句块1
    else:
    语句块2

    说明:
    可迭代对象不能在提供对象时,遍历结束,执行else字句。else可以省略,当循环内部用break语句终止循环时,else字句部分的句子不在执行。
    示例:

     1 # 法一
     2 s = 0#用于累加
     3 for x in range(1, 101):
     4     if x % 5 == 0:
     5         continue
     6     if x % 7 == 0:
     7         continue
     8     if x % 11 == 0:
     9         continue
    10 
    11     print(x, end=' ')
    12 
    13     s += x
    14 print("和:", s)
    15 print("--------------------------------------------")
    16 
    17 # 法二
    18 s = 0#用于累加
    19 for x in range(1, 101):
    20     if x % 5 == 0 or x % 7 == 0 or x % 11 ==0:
    21         continue
    22     s +=x
    23     print(x)
    24 
    25 print("heshi:",s)
    26 
    27 
    28 ('szh====>#',szh)
    29 
    30 print("当 for语句结束后,szh绑定的是:",szh)


    练习:
    任意输入一段字符串
    1.计算你输入的字符‘A’,个数,并打印出来
    2.计算出空格的个数,并打印出来
    (要用for的语句,不允许使用s.count()方法)
    思考用while语句能否实现上述功能?

     1 adeshu=0
     2 kgshu=0
     3 s=input('请输入字符串')
     4 for szh in s:
     5     if szh == 'A':
     6         adeshu +=1
     7     if szh == ' ':
     8         kgshu +=1    
     9 print("A的个数",adeshu)#或print("A的个数",adeshu,"空格数",kgshu)
    10 print("空格数",kgshu)
    11 
    12 # count_A =0
    13 # count_space =0
    14 # i = 0 #获取索引
    15 # while i < len(s):
    16 #     ch =s[i]#取出字符
    17 #     #先判断ch是否是"A"
    18     # if ch == 'A':
    19     #     count_A +=1
    20     # if ch == ' ':
    21     #     count_space +=1  
    22     # i +=1#限制循环
    23 # print("A的个数",count_A) 
    24 # print("空格数",count_space)

    range() 函数

    格式:
    range(stop)
    从零开始,每次生产一个整数后加1的操作,直到stop为止,(不包含stop)
    range(start,stop[,step])
    从start开始,每次生产一个整数后移动step,直到stop为止(不包含stop,且step可以是负数)
    详见:
    >>>help(range)
    作用:
    用来创建一个生成一系列整数的可迭代对象(也叫整数序列生产器)
    说明:
    range函数调用返回的对象可用于for语句来进行一次迭代取出其中的整数
    示例:
    range(4) #生成0,1,2,3
    range(1,10,2) #生成1,3,5,7,9
    range(5,0,-2) #生成5,3,1
    range(4,0) #空
    示例见:range.py

     1 for x in range(4):
     2     print(x)        #0  1  2  3 
     3 
     4 print('-------------')
     5 for x in range(3, 6):
     6     print(x) 
     7 print('=============')
     8 
     9 for i in range(1, 21):
    10     print(i, end=' ')
    11 print()
    12 
    13 s=1
    14 while s<=20:
    15     print(s, end=' ')
    16     s +=1
    17 print()


    练习:
    1求100以内那些整数与自身+1的乘积在对11求余的结果等于8的数


    2.写程序计算 1 + 3 + 5 +... + 99的和


    for 语句嵌套

    只要是语句就能放在语句能存在的地方

    示例:
    for x in 'asb':
    for y in '123':
    print(x + y)

    #现实中可以用来生成有规律的编号,


    思考:

    for x in range(5):
    for y in range(10):
    print(x,y,'ABC')
    请问这条语句执行多少次?

    #50次

    练习:

    用for语句实现
    1.输入一个数代表正方型的宽度N打印如下:
    如:输入5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5

    #法一
    k=int(input('请输入正方形的宽'))            
    for x in range(1,k+1):    #
        for x in range(1, k+1):#行数          
            print(x, end=' ')
        print()   
    
    #  法二
    z = int(input('请输入正方形的宽:'))
    j = 0
    while j < z:
        i=1
        while i <= z:
            print(i,end=' ')
            i +=1
        j +=1
        print()    
    else:
        print()


    2.写程序来改写上题,如输入5,打印如下:
    1 2 3 4 5
    2 3 4 5 6
    3 4 5 6 7
    4 5 6 7 8
    5 6 7 8 9

     1 # 法一
     2 k=int(input('请输入正方形的宽'))
     3 for line in range(k):#行数
     4     for x in range(x,k+x):
     5         print('%02d' % x, end=' ')
     6     print()
     7 
     8 # 法二    
     9 k=int(input('请输入正方形的宽'))
    10 for line in range(1, k+1):#行数
    11     for x in range(line,k+line):
    12         print('%02d' % x, end=' ')
    13     print()
    14 for x in range(5):
    15     if x == 2:
    16         continue
    17     print(x)
    18 
    19 # 打印10以内的偶数
    20 for n in range(10):
    21     if n %2 ==1:#奇数
    22         continue#取下一个数
    23     print(n)
    View Code

    continue 语句

    问题:

    如何让程序不再向下执行,重新开始新的一次执行
    continue语句的作用:
    用于循环语句(while,for语句)中,不在执行本次循环内continue之后的语句,重新开始新的循环。
    说明:
    1.在while语句中执行continue语句,不在执行本次循环内continue之后的语句,直接跳转到while真值表达式进行判断。
    2.在for语句中执行continue语句,不绑定本次遍历的元素,继续遍历下绑定一个元素。

    练习:

    输入一个整数用begin绑定
    在输入一个整数用end绑定
    打印从begin开始,到end结束内的全部奇数(不包含end)

     1 begin = int(input('请输入:'))
     2 end = int(input('请输入:'))
     3 for x in range(begin,end):
     4     if x % 2 ==0:
     5         continue
     6     print(x)
     7 
     8 #用while循环打印10以内的奇数数
     9 for n in range(10):
    10     if n % 2 ==1:
    11         continue
    12     print(n)
    13 
    14 
    15 i=0
    16 while i<10:
    17     if i %2 ==0:#== 0求奇数/== 1偶数
    18         i +=1
    19         continue
    20     print(i)
    21     i +=1
    View Code

    将练习改写为用while语句

     1 begin = int(input('请输入:'))
     2 end = int(input('请输入:'))
     3 while begin < end:
     4     if begin % 2 == 0:
     5         begin +=1
     6         continue
     7     print(begin)
     8     begin +=1
     9 
    10 
    11 begin = int(input('请输入:'))
    12 end = int(input('请输入:'))
    13 i=begin
    14 while i<end:
    15     if i % 2 ==0:
    16         i +=1
    17         continue
    18         print(i)
    19     i +=1
    20 
    21 begin = int(input('请输入:'))
    22 end = int(input('请输入:'))
    23 i=begin
    24 while i<end:
    25     i +=1
    26     if (i -1) % 2 ==0:
    27         continue
    28     print(i-1)
    View Code

    求1~100之间所有不被5,7,11整除的数的和(可以考虑用continue实现)

     1 # 法一
     2 s = 0#用于累加
     3 for x in range(1, 101):
     4     if x % 5 == 0:
     5         continue
     6     if x % 7 == 0:
     7         continue
     8     if x % 11 == 0:
     9         continue
    10 
    11     print(x, end=' ')
    12 
    13     s += x
    14 print("和:", s)
    15 print("--------------------------------------------")
    16 
    17 # 法二
    18 s = 0#用于累加
    19 for x in range(1, 101):
    20     if x % 5 == 0 or x % 7 == 0 or x % 11 ==0:
    21         continue
    22     s +=x
    23     print(x)
    24 print("heshi:",s)

    容器类

    列表 list

    列表的定义:
    1.列表是一种容器(通常用来存储计算机的数据对象,可以存放任意类型的数据对象)
    2.列表是可以被改变的序列 扩展:id(内存地址)不变的情况下改变列表,所以是可变数据类型
    3.列表是由一系列特定元素组成的,元素与元素之间可能没有任何关关联系,但它们之间有先后顺序关系。
    创建空列表的字面值方式
    l = [] #l绑定空列表
    创建非空列表的字面值方式
    l = [1,2,3,4]
    l = ['北京','上海','深圳','西安']
    l = [1,'two',3.14,'四']
    l = [1,2,[3.1,3.2,3.3],4]
    列表的构造函数 list
    list() 生产一个空的列表,等同于[]
    list(iterable) 用可迭代对象创建一个列表
    示例:

    1 l = list() #l = []
    2 l = list('hello') #l = ['h','e','l','l','o']
    3 l = list(range(5,10,2)) #l = [5,7,9]
    View Code

    列表的运算
    运算符:
    + += * *= (算法功能同字符串)
    + :用于拼接列表
    >>> x = [1,2,3]
    >>> y = [4,5,6]
    >>> z = x + y
    [ 1, 2, 3,4, 5, 6]
    >>> z
    >>> z =y + x
    >>> z
    [4, 5, 6, 1, 2, 3]
    += :用于将右侧的可迭代对象的数据追加到原列表
    >>> x = [1,2,3]
    >>> y = [4,5,6]
    >>> x += y
    >>> x
    [ 1, 2, 3,4, 5, 6]

    * : 用于生成重复的列表,新的列表
    *=: 赋值生成重复列表,地址不变
    比较运算:同字符串规则完全相同:按编码值依次进行比较,只有依次对应比较的是同类型,不同类型比较会出错
    == != < <= > >=
    如:[1,2,3] < [1,3,2] #True
    ['w',1] < [2,'w'] # 出错

    列表是可迭代对象:
    L = [2,3,5,7,11]
    for x in L:
    print(x)
    成员检查:in/not in
    判断一个元素是否存在列表当中,如果存在则返回True,否则返回False
    in 和not in的返回值相反
    示例:

    1输入三行文字,将这三行文字保持于一个列表l中,并打印如:
    请输入: abc
    123
    你好
    生成列表如下:['abc','123','你好'] print(L)

     1 a = 'abc'
     2 b = '123'
     3 c = '您   好'
     4 # L = [a, b, c]
     5 # print(L)
     6 
     7 # a=input("请输入")
     8 # b=input("请输入")
     9 # c=input("请输入")
    10 # L=[a, b, c]
    11 # print(L)
    12 
    13 L = []
    14 a=input("请输入")
    15 b=input("请输入")
    16 c=input("请输入")
    17 L.append(a)
    18 L.append(b)
    19 L.append(c)
    20 print(L)


    2.输入任意行文字,存于列表L中,当不输入任何内容直接回车后结束输入
      2.1打印L列表中的内容
      2.2计算你共输入了几行内容
      2.3计算你共输入了多少个字符

     1 a = []
     2 h = 0 #行数
     3 while True:
     4     w = list(input('输入任意行文字'))
     5     if w ==[]:
     6         break
     7     a +=w#输入后列表
     8     n = len(a)#输入后字符长度
     9     h +=1
    10 print(a,'输入的行数',h, '字符个数',n)


    3.输入一个整数(代表树干的高度)
    打印出如下一棵树
    输入2
    *
    ***
    *
    *
    输入3 *
    ***

     1 for i in range(1, w+1):# 打印树叶
     2 # 或:for i in range(w):
     3         i +=1
     4     print(' '*(w-i)+'$'*(2*i-1))
     5 for g in range(1, w+1):
     6     print(' '*(w-1)+'$')
     7 
     8 
     9 while True:
    10     tree_lenght = int(input('请输入一个树干的高度'))
    11     i = 1
    12     j = 1
    13     while i <= tree_lenght:
    14         print(' '*(tree_lenght-i)+'*'*j,)#弄清楚长度最大值(tree_lenght+2)和空格和i的关系来设置
    15         i +=1#控制行数
    16         j +=2#控制*号的个数,*号是以+2递增。
    17     for i in range(tree_lenght):
    18         print(' '*(tree_lenght-1)+"*")
    19     choice = input("输入0退出,按其他继续输入:")
    20     if choice == '0':
    21         break


    4.输入任意一个整数,判断这个数是否素数(prime),素数(也叫质数),只能被1和本身整除且大于1的正整数。

    如:2 3 5 7 11等
     提示:
     用排除法:当判断x 是否是素数时,只要让x分别除以2,3,4,5,..... x-1只要整除了,那x就不是素数,否则x 是素数

    1 a = int(input('输入一个整数:'))
    2 for z in range(2,a-1):
    3     if a % z == 0:
    4         print('不是素数')
    5         break
    6 else:
    7     print('是素数',a)

    5.算出100 -1000以内的水仙花数(Naricissistic Number)
    水仙花数是指百位的3次方加上十位的3次方加上个位的三次方等于原数
    xyz = x**3+z**3+y**3
    索引index
    切片slice

     1 # 法一
     2 for s in range(100,1000):
     3     a = int(s/100)#百位
     4     b = int(s/10%10)#十位
     5     c = int(s%10)#个位
     6     if s == a**3 + b**3 + c**3:
     7         print(s)
    11 
    12 # 法二
    13 for z in range(100,1000):
    14     a = (int(str(z)[0]))**3
    15     b = (int(str(z)[1]))**3
    16     c = (int(str(z)[2]))**3
    17     if a + b + c == z:
    18         print(z)
    19 
    20 # 法三(有误)
    21 def isArmstrongNumber(n):
    22     a = []
    23     t = n 
    24     while t > 0:#循环找出每一位数的值
    25         append (t % 10) * t / = 10 
    26         3 = len(a)
    27     return
    28     sum([x**3 for x in a ]) ==n
    29     for x in range (100,1000):
    30         if isArmstrongNumber(n):
    31             print x
    32 
    33 # 法四:
    34 for a in range(1,10):#百位
    35     for b in range(10):#十位
    36         for c in range(10):#个位
    37             if a*100+b*10+c == a**3 + b**3 + c**3:
    38                 print(a*100+b*10+c)
    39 print('a','b',sep=' ')
    40 print('a','b',end=' ')
    41 print()
  • 相关阅读:
    java中的静态变量与实例变量
    Java中的关键字this
    继承和多类的基础(C++)
    11-1:(42)接雨水
    10-2
    10-1
    9-2
    9-1
    8-2
    8-1
  • 原文地址:https://www.cnblogs.com/Alan-Song/p/9627049.html
Copyright © 2011-2022 走看看