zoukankan      html  css  js  c++  java
  • python入门(三):循环

    1.for i in xxx

    xxx: 序列(列表,元祖,字符串)

    xxx: 可迭代对象

    >>> for i in "abc":

    ...     print(i)                          #对字符串做了一次遍历

    ...                                     # i是变量,也可以用别的字符

    a

    b

    c

    第一次:取a存到i里面,然后执行for的代码块

    第一次:取b存到i里面,然后执行for的代码块

    第一次:取c存到i里面,然后执行for的代码块

    >>> for x in ["s",1.4,{1:2}]:               #对列表做了一次遍历

    ...     print(x)

    ...

    s

    1.4

    {1: 2}

    >>> sum=0

    >>> for i in s:

    ...     print("i的取值:",i)                   #输出简洁明了的格式

    ...     sum+=i

    ...     print("sum的临时计算结果:",sum)    #输出简洁明了的格式

    ...

    i的取值: 1

    sum的临时计算结果: 1

    i的取值: 2

    sum的临时计算结果: 3

    i的取值: 3

    sum的临时计算结果: 6

    i的取值: 4

    sum的临时计算结果: 10

    2.in

    >>> "a" in [1,2,3,4]

    False

    >>> "a" in (1,2,3,4)

    False

    >>> "a" in "absflasjg"

    True

    3.not in

    >>> "a" not in [1,2,3,4]

    True

    >>> "a" not in (1,2,3,4)

    True

    >>> "a" not in "absflasjg"

    False

    4. range()

    >>> range(10)                 #range(10),默认从0开始

    range(0, 10)                    #生成一个类实例的文档字符串,在内存中进#存放的是一个类,较python2节省内存。动态管理数据,仅在使用数据时生成数据。

    >> list(range(1,20))

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]    #快速生成连续列表的方法,list,强制转换

    >>> for i in range(5):           

    ...     print(i)                           #实现了对range(5)的遍历,0,1,2,3,4

    ...

    0

    1

    2

    3

    4

    >>> for i in range(2,5):                   #range(2,5),从2开始

    ...     print(i)

    ...

    2

    3

    4

    >>> range(1,11,2)                      #[1,11)内步长为2,

    >>> list(range(2,11,2))

    [2, 4, 6, 8, 10]

    >>> for i in range(2,11,2):

    ...     print(i)                          #输出2,4,6,8,10

    ...

    2

    4

    6

    8

    10

    5.while xxx:

    xxx是true,就会执行下面的代码块

    注意:能用for就不用while.

    原因:while太复杂

    举例:循环3次

    >>> for i in range(3):                     #for循环2行搞定

    ...     print(i)

    ...

    0

    1

    2

    >>> a=0

    >>> while a<3:                         #while循环4行解决。需要实现声明一个变量,

    ...     print(a)                         #并且随着循环,变量的值也要动态变化

    ...     a+=1

    ...

    0

    1

    2

    必须使用while的情况:死循环

    >>> while 1:

    ...     print("8")

    ...

    8

    8

    8

    6.break                         #彻底结束循环(对for与while均生效)

    >>> for i in range(10):

    ...     if i==3:

    ...         break                  #i ==3时,彻底结束循环,所以结果未打印3

    ...     print(i)

    ...

    0

    1

    2                                 #结果到2为止

    7.continue:(结束本次循环)

    >>> for i in range(10):

    ...     if i==3:

    ...         continue               #当前i==3循环和后面代码均不执行,所以结果未打

    ...     print(i)                      #印3,开始下次循环

    ...

    0

    1

    2                                #结果中无3

    4

    5

    6

    7

    8

    9

    8.no break             #循环语句未执行任何break语句,便会执行no break

                                  #该语句是python特有的

    >>> for i in range(3):

    ...     print(i)                     #此循环未执行任何break语句

    ... else:

    ...     print("no break")     

    ...

    0

    1

    2

    no break                         #所以会执行no break

    >>> for i in range(3):

    ...     print(i)

    ...     if i==3:

    ...         break                 #此种情况虽然有break语句,但是i==3未执行到

    ... else:                          #所以依然会执行no break

    ...     print("no break")

    ...

    0

    1

    2

    no break

    >>> for i in range(5):

    ...     print(i)

    ...     if i==3:

    ...         break                 #当i==3时,彻底结束循环,break下面的均未执行

    ... else:

    ...     print("no break")

    ...

    0

    1

    2

    3                               #输出结果仅有0,1,2,3

    >>> for i in range(5):

    ...     print(i)

    ...     if i==3:

    ...         continue

    ... else:

    ...     print("no break")

    ...

    0

    1

    2

    3                               #print(i)在判断i==3前面,所以会输出3

    4

    no break                        #continue对no break无效,依然会执行no break

    总结:

    只要循环体内没有执行break就会执行else部分的代码

    小知识:

    1.调试技巧

    1)    把所有的变量值打印出来

    2)    把中间临时计算的结果打印出来

    3)    把每一个中间临时计算的结果和你期望的结果进行比对,结果发现不一致,就定位到问题所在。

    2.模板字符串%d,%s

    1)    %d:整型占位符

    >>> a=int(input("请输入一个数字:"))

    请输入一个数字:8

    >>> "%d is a number" %a            #%a  %d限定了a必须是个数字,不能是字符串

    '8 is a number'                      #等类型

    >>> a=input("请输入一个数字:")

    请输入一个数字:5

    >>> "%d is a number" %a            #%a  此处a是个字符串,故会报错

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    TypeError: %d format: a number is required, not str

    2)    %s:万能占位符

    >>> "%s is a number" %"早上好"     #%s是万能占位符,后面可以是str

    '早上好 is a number'

    >>> "%s is a number" %{1:2}        #也可以是dict

    '{1: 2} is a number'

    >>> "%s is a number" %1.2          #也可以是float

    '1.2 is a number'

    >>> "%s is a number" %3            #也可以是int       

    '3 is a number'

    >>> "%s is a number" %"早上好".encode("gbk")        #也可以是bytes

    "b'\xd4\xe7\xc9\xcf\xba\xc3' is a number"

    3.大数据处理的思想

    以前小数据处理数据,有两种方式:

    1)    把所有的数据放到内存里面处理

    2)    用到数据,取什么数据就把数据放到内存中

    大数据处理的思想:

    2) 每次处理一部分数据,处理完了就把数据从内存清除出去

    range(10)

    在python3中就是使用的大数据处理的思想,每次遍历的时候,动态的生成数据

    在python2中使用的是小数据处理数据的方式,直接生成所有数据。

    4.类:

    类不是序列,也不一定是可迭代对象

    类中都会默认自带两个方法:

    __iter__()

    __next__()

    实现了如上方法,就是可以迭代的对象。

      

    5.用到死循环的经典场景

    1)    服务器端:一般死循环

    你可以不来,(服务器端)我在死等。不操作不能无响应

    2)    你也不知道循环多少次,就要用死循环。(输入数字游戏)

     6.continue与break的区别

    break:彻底结束循环(对for与break均生效)

    continue:结束本次循环,开始下一次循环

    小练习1:

    使用for循环,求列表[1,2,3,4]所有元素的和

    >>> s=[1,2,3,4]

    >>> sum=""

    >>> sum=0

    >>> for i in s:

    ...     sum+=i

    ...

    >>> print(sum)

    10

    小练习2:

    列表[1,2,3,4,5,7],你输入一个数字,判断一下是否在这个list中,执行3次这个逻辑。

    算法:

    1.输入一个数据,存到某个变量里面

    2. 判断在不在这个列表里

    3. 在就打印一下,不在也打印一下

    4. 循环3次截止

    自己的程序:

    >>> s=[1,2,3,4,5,7]

    >>> a=input("请输入一个数字:")

    请输入一个数字:10

    >>> for i in range(3):

    ...     if a in s:

    ...        print("输入的数字在s中")

    ...     else:

    ...        print("输入的数字不在s中")

    ...

    输入的数字不在s中

    输入的数字不在s中

    输入的数字不在s中

    该程序的错误为:循环3次理解错误。并不是输入一次数值后便判断3次,无任何意义。正确的应该是输入1次数值,判断结果并输出。循环执行3次。

    更改后的程序为:

    >>> s=[1,2,3,4,5,7]

    >>> for i in range(3):

    ...     a=int(input("请输入一个数值:"))          #input语句执行完毕后的类型均是str

    ...     if a in s:                                #判断a是否在s中

    ...         print("a在s中")

    ...     else:

    ...         print("a不在s中")

    ...

    请输入一个数值:4

    a在s中

    请输入一个数值:3

    a在s中

    请输入一个数值:8

    a不在s中

    注意:

    1. 需要将输入的数字转换为int类型,否则输入任何数值其类型均是str,输出结果均是False

    >>> s=[1,2,3,4,5,7]

    >>> for i in range(3):

    ...     a=input("请输入一个数值:")          #未经过强制类型转换

    ...     if a in s:                             #判断str在list中

    ...         print("a在s中")

    ...     else:

    ...         print("a不在s中")

    ...

    请输入一个数值:3                         #虽然输入的数字是3,但是为str类型,所

    a不在s中                                #以所有的结果均是False

    请输入一个数值:4

    a不在s中

    请输入一个数值:5

    a不在s中     

    1. a=int(input("请输入一个数值:"))       

    该代码健壮性差,如果输入的内容不是数字,就会报错。稍后会学习异常处理。

    >>> s=[1,2,3,4,5,7]

    >>> for i in range(3):

    ...     a=int(input("请输入一个数值:"))

    ...     if a in s:

    ...         print("a在s中")

    ...     else:

    ...         print("a不在s中")

    ...

    请输入一个数值:5

    a在s中

    请输入一个数值:8

    a不在s中

    请输入一个数值:a

    Traceback (most recent call last):           # a=int(input("请输入一个数值:"))

      File "<stdin>", line 2, in <module>         #限制了输入的内容必须为int

    ValueError: invalid literal for int() with base 10: 'a'

    小练习3:

    输入数字,判断是奇数还是偶数。当输入的数据是100的时候,结束死循环。

    程序:

    >>> a=input("请输入一个数字:")

    请输入一个数字:67

    >>> while int(a)%2==0:

    ...     if int(a)==100:

    ...         break;

    ...     else:

    ...         print("请再次输入")

    ...

    输入67后一直死循环在“请再次输入”。明显“请输入一个数字”的位置不对

    改进程序:

    >>> while 1:

    ...     a=int(input("请输入一个数字:"))     #输入数字的程序在循环中

    ...     if a%2==0:

    ...         if a==100:                     #判断==100的程序在前面

    ...             break                     #break 结束死循环

    ...         else:

    ...             print("%s 是偶数" %a)

    ...     else:

    ...         print("%s 是奇数" %a)

    ...

    请输入一个数字:89

    89 是奇数

    请输入一个数字:67

    67 是奇数

    请输入一个数字:45

    45 是奇数

    请输入一个数字:100                   #输入100后自动退出循环,没有打印10偶数,原因为==100的位置不同,输出便不同

    老师的程序:

    >>> while 1:

    ...     a=int(input("请输入一个数字:"))

    ...     if a%2==0:

    ...         print("%s 是偶数" %a)

    ...     else:

    ...         print("%s 是奇数" %a)

    ...     if a==100:                      #a==100的条件判断偶数判断后,自然会输出

    ...         break                      #100是偶数后,结束

    ...

    请输入一个数字:67

    67 是奇数

    请输入一个数字:89

    89 是奇数

    请输入一个数字:78

    78 是偶数

    请输入一个数字:100

    100 是偶数

  • 相关阅读:
    案例分析:从一则笑话分析需求的陷阱
    2019寒假培训第二天
    2019寒假培训第一天
    牛客网国庆集训派对Day6 题目 2018年
    unique STL讲解和模板
    SPFA 模板
    ACM Shenyang Onsite 2016 题目
    牛客网国庆集训派对Day5 题目 2018年
    The North American Invitational Programming Contest 2017 题目
    牛客网国庆集训派对Day4题目 2018年
  • 原文地址:https://www.cnblogs.com/suitcases/p/10361718.html
Copyright © 2011-2022 走看看