zoukankan      html  css  js  c++  java
  • 洗礼灵魂,修炼python(10)--有趣的判断分支+从实例中掌握循环语句

    所有的编程语言里都有判断语句和循环语句。

    判断语句则是用来分支程序流程的

    循环语句则是为了实现一个效果,让程序的规律性的重复操作

    不用说,分支和循环自然在python里也是有的

    一,条件判断:if,if……else

    1.在python里if可以单独出现,也可以和else配套出现,但是else不能单独出现

    这里则要提到一个在编程里一个共有的特性:

    悬挂else即出现多余或者不和if匹配的else,就叫悬挂else,当出现悬挂else是会导致程序报错的。但在python里强制限制else属于哪一个循环里,对缩进严格要求,所以不会出现悬挂else,也就是前面提到的【else不能单独出现】。

    2.if格式:

    a:

    • if   XX:
    •   suite(语句体套件)

    b:

    • if   XX:
    •   suite
    • else:
    •   suite

    3.使用条件判断案列:

    代码:

    # -*- coding:utf-8 -*-
    print("猜一个幸运数字,游戏开始!")#提示游戏开始
    temp=input("请输入你觉得对的数字:")#这一句是和用户交互得到一个值,并赋值给temp
    guess=int(temp)#这一句将temp变量转换成整形,方便下面的条件判断
    if guess>8:
        print("大了")#如果guess变量大于8,则运行print
    else:#否则的话
        if guess == 8:
            print("哇,猜对了")#如果guess等于8,运行print
        else:
            print ("小了")#如果不等于8也不大于8,运行print
    print("游戏结束")#提示游戏结

    运行结果:

    因为没有猜对,再运行两次:

     

    第三次终于对了,判断语句就是这样使用的

    不过这个小程序看起来还不够完善,可以优化一下:

    # -*- coding:utf-8 -*-
    print
    ("猜一个幸运数字,游戏开始!") guess=int(input("请输入你觉得对的数字:")) if guess>8: print("大了") elif guess == 8: #注意elif print("哇,猜对了") else: print ("小了") print("游戏结束")

    这里elif等同于else+if

    但是还是不够完善,因为每次运行代码只有一次猜的机会,觉得有点少了,可以猜多次吗?当然可以,所以得用上下面要说的循环

    二,循环

    在python里有两种循环,while循环和for循环,并注意在python里没有when语句和switch语句

    1.while循环

    1)格式:

    a:

    • while  XX:
    •   suite

    b:

    • while  XX:
    •   suite
    • else:
    •   suite

    是的,while语句可以和else配套使用

    2)从实例中剖析while循环:

    代码:

    # -*- coding:utf-8 -*-
    print
    ("猜一个幸运数字,游戏开始!") guess=int(input("请输入你觉得对的数字:")) while guess!=8: guess=int(input("请重新输入你觉得对的数字:")) if guess>8: print("大了") else: print ("小了") print("猜对了")

     运行结果:

    效果是实现了,但是又有个两个小问题:

    问题1.为什么我要在while语句里还要在再一次为guess赋值

     因为在当while运行时,首先判定的就是当第一次用户输入时能不能满足条件,满足条件则循环,而这里的不等于8,第一次输入是5,5确实不等于8,所以满足条件运行,但是,如果不重新赋值,guess则会在整个程序里一直指向5这个值,永远满足条件,永远循环,就成了一个死循环,直到耗尽你的计算机资源让计算机崩溃宕机为止:

    不给guess再一次赋值的效果:

    这里我把程序终止了,所以有个keyboardInterrupt键盘异常出现,关于异常的后面会讲解,暂时可以忽略

    所以,在while里的那一句重新赋值很重要,防止发生死循环,并且切记,在使用循环时如果产生了死循环是编程的大忌

    问题2.在第一次输入5的时候,并没有给出提示是大了还是小了,这个需要改善的

    所以稍微改动一下代码:

    # -*- coding:utf-8 -*-
    print
    ("猜一个幸运数字,游戏开始!") while True: guess=int(input("请输入你觉得对的数字:")) if guess>8: print("大了") elif guess<8: print ("小了") else: print("猜对了")

     运行结果:

    这样就可以在第一次输入值时给出提示,但是你应该发现了,我已经输入了正确答案,程序还是没有退出,还在运行,这个情况要怎么解决呢?此时又需要一点新的知识——break和continue语句

    break:用于满足条件时跳出本层循环,且只能跳过一层循环

    continue:用于满足条件时跳过本层循环内的某一次循环,如果在本次循环内下面条件满足则运行完再进入下一次循环

    上面的代码,我加入break后:

    # -*- coding:utf-8 -*-
    print("猜一个幸运数字,游戏开始!")
    while True:
        guess=int(input("请输入你觉得对的数字:"))
        if guess>8:
            print("大了")
        elif guess<8:
            print ("小了")
        else:
            print("猜对了")
            break

     运行结果:

    这样的话,就完美的解决一个问题,并且前面那个死循环问题如果使用break也可以避免,但是代码还是有问题的,我只是给下解决了死循环这个问题的效果,所以不给出代码,只是做下演示:

    继续看看break和continue的用法:

     代码:

    # -*- coding:utf-8 -*-
    i=1
    while True:
        while i!=8:
            i+=1      #姑且认为同i=i+1,但其实不等价于,自己可以用id函数查看
            if i<5:
                continue
                print('i的值目前小于5')          
            
            if i==5:
                print('i的值为%d'%i)
                break
        print('跳出了内层循环')
        break
    print('跳出了外层循环')

     运行结果:

    感觉不大明显对吧,break应该很好理解,但是continue还是有点不大懂,对吧?这样,我去掉continue看看效果:

    图解:

    只能搞成这个样子了,还不懂的话,自己复制代码拿来运行,多体会

    3)练习:用while循环打印斐波那契数列

    代码:

    # -*- coding:utf-8 -*-
    list1=[0,1]
    n1=list1[0]
    n3=n2=list1[1]
    n=int(input('请输入一个你希望打印出多少项斐波那契数列里的数:'))
    if n<1:
        print("输入有误!")
    while (n-2)>0:
        n3=n2+n1
        n1=n2
        n2=n3
        n-=1
        list1.append(n3)
    print('斐波那契数列的前%d项:'%len(list1))
    print(list1)

    结果:

    2.for循环

    1)说到for循环,就得说说迭代这个词

    迭代:指的是按照某种顺序逐个访问列表中的每一项,for语句就是迭代最好的体现和解释

    for循环和while循环差不多,不过for来得更简洁

    2)格式:

    a:

    for XX in 表达式:

      suite

    b:

    for XX  in 表达式:

      suite

    else:

      suite

    3)实例:

    是不是很好的解释了迭代这个词

    for和while没什么差别,while能用的for都能用,if条件判断和break,continue语句都可以使用,所以不再练习举例了,不过你可以自己尝试用for循环输出一个斐波那契数列

    但是for在有些方面优于while循环:

    用for可以迭代的优势

    比如用for可以很快的生成一个列表,这种方法叫列表生成器和列表解析,后面的章节会讲解

  • 相关阅读:
    声音走样
    Terrain
    输出循环小数
    解决代码中多余的空行
    与二进制有关的几道面试题
    反转一个整数
    DirectX常见编译错误及解决办法
    STLset
    Visual Studio Autoexpand Information for DirectX 9
    素数环谈代码优化
  • 原文地址:https://www.cnblogs.com/Eeyhan/p/7620206.html
Copyright © 2011-2022 走看看