Python03 if、while、fo

发布时间:2019-08-15 09:58:13编辑:auto阅读(1714)

    Python03 if、while、for

    标签(空格分隔): 编程语言 python


    1.if

    number = 100
    guess_number = int(input('guess number:'))
    
    if guess_number == number:
        print ('Bingo')
    elif guess_number > number:
        print ('think smaller')
    else:
        print ('think bigger!')

    满足if的条件就print ('Bingo'),不满足则跳过;
    满足elif的条件就......,不满足就跳过;
    如果if和elif的条件都不满足,就执行else下面的代码。
    图中代码要注意int(input)这里,针对希望写入数字时,就要使用int给转义成数字格式,否则默认input是字符串,执行代码时会报错。

    1.png-2.1kB
    满足else的执行结果

    2.png-2.5kB
    满足elif的执行结果

    3.png-2.3kB
    满足if的执行结果

    menu = 'A','C','D'
    for i in menu:
        if i == 'A' or 'C':
            print ('aaa')
        else:
            print ('bbb')

    2.png-0.6kB
    if i == 'A' or 'C' 这个从表面意思看可能的判断如果i等于A或者C的话,就print aaa,但其实不是这样的,这个C的部位即使不是C,是任意数据都表示为数字1(True),所以实际意思是当 i 等于A或True就会print aaa,C这个部位存在任意数据就相当于一直为True,所以可以看到执行结果就是一直print aaa

    menu = 'A','C','D'
    for i in menu:
        if i == 'A' or 'any':
            print ('aaa')
        else:
            print ('bbb')

    2.png-0.6kB

    可以看到or 后面是任何数据类型,都为True。

    menu = 'A','C','D'
    for i in menu:
        if i == 'A' or i == 'any':
            print ('aaa')
        else:
            print ('bbb')

    if i == 'A' or i == 'any' 这表示相当于判断等于A或any就print aaa
    2.png-0.8kB

    menu = 'A','C','D'
    for i in menu:
        if i == ('A' or 'any'):
            print ('aaa')
        else:
            print ('bbb')
    

    加括号的方式来写也可以。
    4.png-0.8kB

    2.while


    2.1 无线循环

    count = 0
    while True:
        print ('count',count)
        count += 1

    当一直为True时,也就是一直为真,就会执行count +=1(相当于count = count +1),每加一次1就赋值给count,并打印出来。

    image_1c08843qn1hc6e7ouq11196om2b.png-3.6kB
    只是一瞬间数字就加到了240529,这里只能强制停止循环,否则会一直加下去。


    2.2 break

    umber = 100
    while True:
        guess_number = int(input('guess number:'))
        if guess_number == number:
            print ('Bingo')
            break
        elif guess_number > number:
            print ('think smaller!')
        else:
            print ('think bigger!')

    If条件成立的话就print,然后break会跳出while循环;
    否则就一直while循环
    4.png-3.7kB


    2.3 设置常事限制次数

    number = 100
    count = 0
    while True:
        if count ==3:
            print ('time out')
            break
        guess_number = int(input('guess number:'))
        if guess_number == number:
            print ('Bingo')
            break
        elif guess_number > number:
            print ('think smaller!')
        else:
            print ('think bigger!')
        count += 1

    我们通过一个变量count来进行计数,初始值为0
    尝试一次,就执行一次count +=1,当满足count等于3时(限制次数为3),就通过break结束while循环。


    2.4 while条件修改

    number = 100
    count = 0
    while count<3:
        guess_number = int(input('guess number:'))
        if guess_number == number:
            print ('Bingo')
            break
        elif guess_number > number:
            print ('think smaller!')
        else:
            print ('think bigger!')
        count += 1
    else:
        print ('time out!')

    删除标题3中的if count == 3这块语句,直接在while中定义,当count<3时,就执行while语句,这样就减少并优化了代码,执行结果是一样的。

    1.png-3.1kB


    2.5 while与else,选择性退出循环

    number = 100
    count = 0
    while count<3:
        guess_number = int(input('guess number:'))
        if guess_number == number:
            print ('Bingo')
            break
        elif guess_number > number:
            print ('think smaller!')
        else:
            print ('think bigger!')
        count += 1
        if count ==3:
            confirm = input('time limited,continue or not...please choose y or n:')
            if confirm != 'n':
                count = 0
    else:
        print ('time out!')

    当while的条件成立时,就运行while下面的子代码;
    如果while的条件不成立,就运行最下面else的代码。
    如果break就不会执行下面任何代码了,包括else。
    同时代码中还设立了选择性退出的语句,如果if count ==3,就使用y和n来进行选择是否继续循环,只要输入的不是n,就继续循环; 继续的话就将count清0,这样while循环条件继续成立就可以继续循环。
    如果选择n的话,因为count已经等于3了,不满足while条件,就不会再循环了,就会执行下面的else代码。

    image_1c088nq6v9a95vo9mh86k7e55t.png-23.4kB
    可以看到选择y后,还能继续去guess,选择了n就执行了下面的else代码;


    2.6 For循环

    • 循环数字范围
    for i in range(10):
        print ('loop:',i)
    

    image_1c088puug8v1lrj3q917rdkoa6n.png-3.6kB
    For循环,每循环一次就将当前循环的值赋值给i。
    Range就是范围的意思,根据括号中的10,就是0到9,从0开始,一共10个数字。
    i是一个名称,in会将0到9循环的赋值给i
    print会将每一个轮询的内容打印出来,直到轮询结束。


    • for替代while
    number = 100
    count = 0
    for i in range(3):
        guess_number = int(input('guess number:'))
        if guess_number == number:
            print ('Bingo')
            break
        elif guess_number > number:
            print ('think smaller!')
        else:
            print ('think bigger!')
    else:
        print ('time out!')
    

    最多能for循环3次,如果for循环完成就会执行else代码;
    如果没有执行完成for循环,就break,下面就不会执行else代码了。


    • 步长
    for i in range(0,10,2):
        print ('loop:',i)
    

    0,10表示定义从0到10这个范围数字,然后对这个范围进行循环;
    2表示步长,也就是每隔2个数字循环一次。

    image_1c088une4ac619791ovn1sfdhnr8e.png-2.3kB
    执行结果为每隔2个循环一次,没有循环到10,是因为最后一个数字不进行循环,也就是说实际数字范围是到9,不满足步长2的循环,所以最终只循环到了8。


    • pycharm的断点测试

    image_1c088vr291i6ucanuoi8dtjoh8r.png-9.9kB
    从图中可以看到行数的右边,代码的左边默认是空的,没有任何标记。

    image_1c08904mn6gfs981n681sru15qe98.png-11.7kB
    通过使用鼠标左键在每一行标的右边一次进行点击,点击后就会出现红点。

    image_1c0890hba1gah1beg1h4e1fq21dms9l.png-21.6kB
    在工具栏中找到debug图标,然后点击(在当前file文件右键中也可以找到debug)

    image_1c0891ff91ci8mdv1uotcsk1plda2.png-13.9kB
    点击debug后,被标记断点的地方,颜色就会改变,可以看到除了121行,其他行都是红色,121行之所以颜色不同,是表示当前代码卡在121行,该行代码还没有执行。

    image_1c0891sjlg5f1jgsiej18qt1uliaf.png-27.3kB
    点击debug以后,在pycharm工具下方会弹出该窗口
    注意图中圈起来的部分,一个是箭头,一个是Debugger,当前我们处于Debugger窗口
    点击一下箭头表示执行当前代码行(121行)

    image_1c0892hnc1giio10gpm1ft51juhas.png-14.2kB
    点击箭头后可以看到121行,代码右边多处来一个信息,i:0表示当前i等于0的意思。
    然后第122行代码颜色又变了,表示当前代码卡在第二行,还没有执行。
    所以debug功能是非常强大的,可以通过该方式一步一步的去查看我们的代码每步是如何执行的,来判断我们的代码是否正确执行; debug是一个非常好用的排错功能。

    image_1c08931tk5jv10ohgvb1mrn1qegb9.png-25.4kB
    从pycharm下面的Debugger窗口也可以看到执行第一步后的一些信息,可以看到i={int}0,表示当前的i等于0,i属于int格式。

    image_1c0893iab3n16sf1tc9h706udbm.png-29.2kB
    切换到Console窗口,然后不断的去点击箭头来观察代码执行的每一步的结果,这样就可以判断执行代码的每一步是否正确。


    • continue
    for i in range(0,10):
        if i <3:
            print ('loop:',i)
        else:
            continue
        print ('test')
    

    continue用来跳出本次循环,执行下一次循环;也就是说执行continue后,下面的代码就不会再执行,根据循环执行下一次循环。

    image_1c0895aqm1d5mt8lfls1grb14d9cg.png-2.2kB
    设立if条件<3时,打印一次 i 和test,所以当 i 等于3时,if条件就不满足了,就会执行else中的continue,接下来的循环就不会不会打印 i 对应的值,也不会打印test了。


    • 嵌套循环
    for i in range(0,10):
        if i <3:
            print ('外循环---',i)
        for m in range(10):
            print ('--',m)
    

    image_1c0896jfu18ka48o588fh414a0da.png-8.7kB
    每一个大循环中会有10个小循环
    10*10,一共循环了100次

    for i in range(0,10):
        if i <3:
            print ('外循环---',i)
        for m in range(10):
            print ('--',m)
            if m >= 3:
                break
    

    设立内循环停止循环的条件,当大于等于3时,就停止循环。
    image_1c0899je519m3bdb13qr11t91rjrfr.png-5.6kB

    image_1c089aa7l17p6d409n17gkp7dg8.png-4.6kB


    debug的箭头的含义:
    step into:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数);
    step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。有一点,经过我们简单的调试,在不存在子函数的情况下是和step into效果一样的(简而言之,越过子函数,但子函数会执行)。
    step out:当单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数。

    下面以 pycharm IDE 为示例作简要说明:
    image_1c089avcok9o1509a1mcverqkgl.png-434.4kB
    点击 pycharm 右上部爬虫按钮进入调试状态,程序在第14行断点处停止,按 F5(step into)进入 add() 函数,按 F7(step out) 执行完add()函数余下部分,返回入口函数 debug_test() 继续执行,按 F6(step over) 直接将 divide() 函数执行完。最后单步执行至入口函数结束。

关键字