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() 函数执行完。最后单步执行至入口函数结束。