• python第二课--分支结构与循环结构


    if语句---分支结构

    在Python中,要构造分支结构可以使用ifelifelse关键字。所谓关键字就是有特殊含义的单词,像ifelse就是专门用于构造分支结构的关键字,很显然你不能够使用它作为变量名(事实上,用作其他的标识符也是不可以)。下面的例子中演示了如何构造一个分支结构。

    #用户身份验证
    username = input("username:")
    password = input("password:")
    
    if username == "admin" and password == "123":
        print("Login")
    else:
        print("Error!") 

    Python中没有用花括号来构造代码块而是使用了缩进的方式来设置代码的层次结构,如果if条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了,换句话说连续的代码如果又保持了相同的缩进那么它们属于同一个代码块,相当于是一个执行的整体。

    当然如果要构造出更多的分支,可以使用if…elif…else…结构,例如下面的分段函数求值。

    x = float(input("请输入变量:"))
    fx = 0.0
    if ( x > 1):
        fx = 3 * x - 5
    elif ( x >= -1) and ( x <= 1):
        fx = x + 2
    elif ( x < -1 ):
        fx = 5 * x + 3
    print(fx)

     当然根据实际开发的需要,分支结构是可以嵌套的,例如判断是否通关以后还要根据你获得的宝物或者道具的数量对你的表现给出等级(比如点亮两颗或三颗星星),那么我们就需要在if的内部构造出一个新的分支结构,同理elifelse中也可以再构造新的分支,我们称之为嵌套的分支结构,也就是说上面的代码也可以写成下面的样子。

    x = float(input('x = '))
    if x > 1:
        y = 3 * x - 5
    else:
        if x >= -1:
            y = x + 2
        else:
            y = 5 * x + 3
    print('f(%.2f) = %.2f' % (x, y))

    if语句练习

    练习1

    必须含有大写,数字,小写的注册
    username = input("username:")
    password = input("password:")
    A = 'QWERTYUIOPASDFGHJKLZXCVBNM'
    B = 'zxcvbnmasdfghjklqwertyuiop'
    C = '1234567890'
    count1,count2,count3 = False,False,False
    for i in password:
        if i in A:
            count1 = True
        if i in B:
            count2 = True
        if i in C:
            count3 = True
    if count1 and count2 and count3:
        print("ok")
    else:
        print("error")

    练习2计算器

    num1,num2 = map(input("请输入两个数字,例如[1,2]:").split(","))
    char_ = input("选择运算,[+,-,*,/]:")
    if char_ in "+-*/":
        if char_ == "+":
            print("%.2f + %.2f = %.2f"%(num1,num2,num1+num2))
        if char_ == "-":
            print("%.2f + %.2f = %.2f"%(num1,num2,num1-num2))
        if char_ == "*":
            print("%.2f + %.2f = %.2f"%(num1,num2,num1*num2))
        else:
            print("%.2f + %.2f = %.2f"%(num1,num2,num1/num2))
    else:
        raise KeyError ('Only choose [+,-,*,/]')

    for语句----循环结构

    如果明确的知道循环执行的次数或者是要对一个容器进行迭代(后面会讲到),那么我们推荐使用for-in循环,例如下面代码中计算1~100求和

    sum = 0
    for x in range(101):
        sum += x
    print(sum)

    需要说明的是上面代码中的range类型,range可以用来产生一个不变的数值序列,而且这个序列通常都是用在循环中的,例如:

    • range(101)可以产生一个0到100的整数序列。

    • range(1, 100)可以产生一个1到99的整数序列。

    • range(1, 100, 2)可以产生一个1到99的奇数序列,其中的2是步长,即数值序列的增量。

    知道了这一点,我们可以用下面的代码来实现1~100之间的偶数求和。

    sum = 0
    for x in range(2, 101, 2):
        sum += x
    print(sum)

    练习:随机生成验证码

    import random
    count = 0
    for j in range(3):
        res=''
        ma=''
        for i in range(6):
            n=random.randint(1,2)
            if (n==1):
                res =  chr(random.randrange(ord("a"),ord("z")))
                ma += res
            else:
                 res = str(random.randrange(0,9))
                 ma += res
        print(ma)
        if(count >0):
            print("请重试")
        password = input("请输入验证码:")
        if (ma == password):
            print("ok")
            break
        else:
            count += 1
            continue
    if(count >= 3):
        raise KeyError("error,获取次数过多")

    while语句---循环结构

    如果要构造不知道具体循环次数的循环结构,我们推荐使用while循环,while循环通过一个能够产生或转换出bool值的表达式来控制循环,表达式的值为True循环继续,表达式的值为False循环结束。下面我们通过一个“猜数字”的小游戏(计算机出一个1~100之间的随机数,人输入自己猜的数字,计算机给出对应的提示信息,直到人猜出计算机出的数字)来看看如何使用while循环。

    import random
    
    answer = random.randint(1, 100)
    counter = 0
    while True:
        counter += 1
        number = int(input('请输入: '))
        if number < answer:
            print('大一点')
        elif number > answer:
            print('小一点')
        else:
            print('恭喜你猜对了!')
            break
    print('你总共猜了%d次' % counter)
    if counter > 7:
        print('你的智商余额明显不足')

    说明:上面的代码中使用了break关键字来提前终止循环,需要注意的是break只能终止它所在的那个循环,这一点在使用嵌套的循环结构(下面会讲到)需要引起注意。除了break之外,还有另一个关键字是continue,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。

     

     

     

     

     

     

  • 相关阅读:
    Codeforces 1093D(染色+组合数学)
    Codeforces 1093C (思维+贪心)
    Codeforces 1082D (贪心)
    Codeforces 433A (背包)
    BZOJ 3262(Treap+树状数组)
    BZOJ 1588 (treap)
    Codeforces 1061C (DP+滚动数组)
    Codeforces 1080C 题解(思维+二维前缀和)
    周记 2015.07.12
    周记 2015.07.04
  • 原文地址:https://www.cnblogs.com/gxnihao/p/11275732.html
Copyright © 2020-2023  润新知