zoukankan      html  css  js  c++  java
  • what's the python之if判断、while循环以及for循环

    Python缩进原则

    • 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进
    • 同一级别的代码,缩进必须一致
    • 官方建议缩进用4个空格

    Python程序语言指定任何非0和非空的布尔值为true,0 或者空的布尔值为false。

    if判断

    Python 编程中的 if判断语句用于控制程序的执行,基本形式为:

    if 条件:

        子代码1

        子代码2

        子代码3

        …………

    else:

        子代码4

        子代码5

        子代码6

    其中"判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围。

    else 为可选语句,当需要在条件不成立时执行内容则可以执行相关语句

    具体举栗说明

    score=input('>>: ')
    score=int(score)
    if score >= 90:
        print('A')#用户输入的数大于等于90时走这里
    elif score >=80:
        print('B')#用户输入的数大于等于80时走这里
    elif score >=70:
        print('C')#用户输入的数大于等于70时走这里
    elif score >=60:
      print('D')#用户输入的数大于等于60时走这里
    else:#用户输入的数不符合以上规范时走这里
        print('E')

      python 的多个条件判断,用 elif 来实现,如果需要对多个条件进行同时判断时,可以使用or和and, or (或)表示两个条件有一个成立时判断条件成功;and (与)表示只有两个条件同时成立的情况下,判断条件才成功。

    num1=6
    num2=10
    if num1>3 and num2<20:
        print('num1>3并且num2<20同时成立时走这里')
    else:
        print('有一个条件不满足')
    
    
    
    if num1>3 or num2<5:
        print(' 只要num1>3和num2<5两者中走一个成立就走这里')
    else:
        print('两个条件都没有被满足')

    while循环

    what's the while 循环?

      当程序需要循环使用某段代码时,对这段代码进行复制粘贴就可以,可是这是极其low的方法。我们可以使用while循环。

       while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空的值均为true。当判断条件假false时,循环结束。

    基本形式为:

    while 条件:

      循环体的代码1
      循环体的代码2
      循环体的代码3
    count=0
    while count < 10:
        print(count)
        count+=1
    
    while True: #死循环
        print('ok')
    
    while 1: #死循环
        print('ok')

      当while的条件始终为True或1(1就代表True,0代表False)时,循环就进入了死循环,即循环永远不会结束。死循环是有应用场景的,不过最后肯定需要某个机制帮助我们跳出死循环,这里就用到了break功能。

    break:跳出本层循环

      break的功能就是时循环结束,无论原来的代码进行到何种程度,只要碰到break,这层缩进的代码就结束,接下来运行上一层缩进的内容。下面用代码举个栗子

    count=0#初始的count值为0
    while count < 10:#当count<10时执行缩进的语句
        if count == 5:#当count的值等于5时执行缩进语句
            break#当count的值等于5时停止循环
        print(count)#当count的值不等于5时执行
        count+=1#即count=count+1  
    print('循环结束')#停止循环后执行
    
    

    continue:跳出本次循环

      continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。它与break不同的地方是break一执行本层的循环就终止了然后执行while循环之后的同级代码,而continue只是使continue以后的代码被跳过,循环继续执行,即碰到continue后本次循环结束进入下一次循环。下面用代码举个栗子

    #输出0123789
    count=0#初始的count值为0
    while count < 10:#当count<10时执行缩进语句
        if count >=4 and count <=6:#当count大于等于4并且小于等于6时执行缩进语句
            count += 1#count=count + 1
            continue#本次循环结束,以下代码不执行,返回while位置
        print(count)
        count+=1

    while循环也可以和else连用,并且在最后执行,而且只能在while循环没有break打断的情况下才执行。

    嵌套的定义:在循环中又套用了循环,具体实例会在下面的习题中出现

     

    for循环

    what's the for 循环?

       与while类似也是循环语句,for循环可以遍历任何序列的项目,可循环取出字符串、列表、元祖、字典中的各元素。

    基本的语法格式为

    for iterating_var in sequence:
       statements(s)

    用代码举栗说明

    msg1='hello'
    msg2=['a','b','c','d','e']
    msg3=('a','b','c','d','e')
    for i in range(len(msg1)):#range是范围,即当i在msg1的长度范围以内时执行以下代码
        print(i,msg1[i])#输出的是元素的位置序数和元素
    #结果为1 h
    #     2 e
    #     3 l
    #     4 l
    #     5 o
    
    
    #range顾头不顾尾,默认从0开始
    for i in range(1,10,1):#最后一个1的意思是步距为1
        print(i)
    
    
    #for循环也可与break、continue、else连用,方法与while相似

    用for循环对字典进行遍历

    #循环取字典的key
    for k in info_dic:
        print(k)
    #循环取字典的value
    for val in info_dic.values():
        print(val)
    #循环取字典的items
    for k,v in info_dic.items(): #k,v=('name', 'egon')
        print(k,v)

    这里利用for循环顺便补充几个小知识点

    albums = ('Poe', 'Gaudi', 'Freud', 'Poe2')
    years = (1976, 1987, 1990, 2003)
    
    #sorted:排序
    for album in sorted(albums):
        print(album)#字符串按长度排序
    
    #reversed:翻转
    for album in reversed(albums):
        print(album)
    
    #enumerate:返回项和
    for i in enumerate(albums,100):#默认从0开始
        print(i)
    '''(100, 'Poe')
    (101, 'Gaudi')
    (102, 'Freud')
    (103, 'Poe2')'''
    
    #zip:组合,一一对应并以元祖的形式返回
    for i in zip(albums,years):
        print(i)
    '''('Poe', 1976)
    ('Gaudi', 1987)
    ('Freud', 1990)
    ('Poe2', 2003)'''

    for循环和while循环一样都可以进行嵌套,下面用一个九九乘法表作为举例。

    for line in range(1,10):
        for row in range(1,line+1):
            print('%s*%s=%s'%(line,row,line*row),end=' ')
        print()
    #print默认end='
    ',即会自动回车,这里设置end=' '就不会自动换行了

    这里插一个小知识点

    占位符:%s(可以为字符串占也可以为数字),%d(只能作为数字的占位符)。

    占位符即实现占位用的,之后可以进行传值。传值方式如上面的九九乘法表中所示,每个占位符只能传一个值

     

     习题

    最后引入几道习题,帮助更好的了解while循环

     

    习题一:输出1到100所有的数字

    #使用while循环
    count=0
    while count<=100:#只要比100小就不断执行以下代码
        print('number',count)
        count+=1#即每执行一次就把count+1
    #当count>100时,判断就为false,自动跳出循环
    
    #使用for循环
    for i in range(101):#顾头不顾尾
        print(i)

    习题二:输出1到100内的所有偶数,包括100

    #使用while循环
    count = 0
    while count <= 100 :
        if count % 2 == 0:#是偶数
            print('number',count)
        count+=1
    
    #使用for循环
    for i in range(1,101):
        if i%2==0:
            print(i)

    习题三:输出1到100内的所有奇数,包括100

    #使用while循环
    count = 0
    while count <= 100 :
        if count % 2 == 1:#是奇数
            print('loop',count)
        count+=1
    
    #使用for循环
    for i in range (1,100):
        if i%2==1:
            print(i)

    习题四:输出1-2+3-4+5-6+7-8....+99的和

    sum=0
    for i in range(1,100):
        if i%2==1:
            sum+=i
        elif i%2==0:
            sum+=-i
    print(sum)

    习题五:输出1-9,并在最后输出一段话

    count=0
    while count < 10:
        if count == 3:
            count+=1
            continue
        print(count)
        count+=1
    else: #最后执行
        print('在最后执行,并且只有在while循环没有被break打断的情况下才执行')
    
    #0
    #1
    #2
    #4
    #5
    #6
    #7
    #8
    #9
    #在最后执行,并且只有在while循环没有被break打断的情况下才执行

    习题六:用户登录程序交互小习题

    while True:#死循环
        name=input('please input your name: ')#让用户自行输入名字
        password=input('please input your password: ')#让用户自行输入密码
    
        if name == 'jack' and password == '123':#如果输入的名字为jack并且密码是123
            print('login successfull')#输出登陆成功
            while True:#死循环
                cmd=input('>>: ')#让用户输入命令
                if cmd == 'quit':#如果输入的命令是quit的话
                    break#本层死循环结束,即内层死循环结束
                print('====>',cmd)#如果输入的命令不是quit的话,打印输入的命令
            break#本层死循环结束,即外层死循环结束
        else:#如果输入的名字不为jack或者密码不是123
            print('name or password wrong') #输出错误,并重新输入名字和密码

    习题七:猜年龄的游戏

    #允许猜3次乔布斯的年龄
    JOBS_AGE=55#定义一个常量,乔布斯55岁
    count=1#次数为1
    while True:#死循环
        if count>3:#当次数超过3时
            break#循环结束
        age=input('猜猜年龄:')#用户交互,让用户输入他猜的年龄
        age=int(age)#输入的内容是字符串的格式,需强转成数字格式才可与数字进行比较
        if age>JOBS_AGE:
            print("你猜的太大啦")
        elif age<JOBS_AGE:
            print("你猜的太小啦")
        else:
            print("恭喜你猜对了")
            break#猜对了以后执行,即循环结束
        count+=1#没猜对的情况下count会加1,当count>3的时候就不让猜咯

    进阶大作业一:实现简易购物清单

      要求如下:给出以下购物列表,用户输入想要购买的物品,之后让用户输入想要购买该物品的数量,打印物品名、价格即数量。用户可循环输入

    msg_dic={
    'iPhone':4000,
    'apple':10,
    'mac':8000,
    'lenovo':3000,
    'chicken':28
    }

    msg_dic={
        'iPhone':4000,
        'apple':10,
        'mac':8000,
        'lenovo':3000,
        'chicken':28
    }
    goods_l=[]
    while True:
        for k in msg_dic:
            print('NAME:<{name}> PRICE:<{price}>'.format(name=k,price=msg_dic[k]))
        name=input('please input your goods name:').strip()
        if len(name)==0 or name not in msg_dic:continue
        while True:
            count=input('please input your count:').strip()
            if count.isdigit():break
        goods_l.append((name,msg_dic[name],int(count)))
        print(goods_l)
    简易购物清单

    进阶大作业二:实现简易工资条

      要求如下:给出一个系统让用户输入自己的名字、密码、工资和工作时长,系统中可供用户查询自己的总工资和用户身份,查询结束后可退出程序。(jobs是顶级用户(super user),cook和cue是普通用户(normal user),其他皆为不知名用户(unknown user)

    tag = True
    while tag:
        user = input("请输入用户名:")
        if user == "":
            print("用户名不能为空,请重新输入:")
            continue
        password = input("请输入密码:")
        if password == "":
            print("密码不能为空,请重新输入:")
            continue
        work = input("请输入工作了几个月")
        if work == "" or work.isdigit() == False:
            print("工龄不能为空且必须为整数,请重新输入:")
            continue
        money = input("请输入工资:")
        if money == "" or money.isdigit() == False:
            print("工资不能为空且必须为整数,请重新输入:")
            continue
        print(
            '''
            1查询总工资
            2查询用户身份
            3退出程序
            '''
        )
        while tag:
            choose = input('>>')
            if choose == "" or choose.isdigit() == False:
                print("输入有误,请重新输入")
                continue
            if choose == '1':
                print('''
                总工资为:%s
                1查询总工资
                2查询用户身份
                3退出程序
    
                ''' % (int(work)*int(money)))
            elif choose == '2':
                if user == 'jobs':
                    print('''
                    super user
                    1查询总工资
                    2查询用户身份
                    3退出程序
                    ''')
                elif user == 'cook' or 'cue':
                    print('''
                    normal user
                    1查询总工资
                    2查询用户身份
                    3退出程序
                    ''')
                else:
                    print('''
                    unknow user
                    1查询总工资
                    2查询用户身份
                    3退出程序
                    ''')
            elif choose == '3':
                tag = False
                continue
            else:
                print('没有这个选项')
                continue
    简易工资条

    进阶大作业三:实现省市县三级菜单

      要求如下:给出一个三级菜单,要求能循环输出省、市、县

    menu = {
        '浙江省':{
            '杭州市':{
                '西湖区':{
                    '西湖':{},
                    '雷峰塔':{},
                    '宋城':{}
                },
                '临安区':{
                    '天目山':{},
                    '大明山':{},
                    '白水涧':{},
                },
                '萧山区':{
                    '机场':{},
                },
            },
            '余杭区':{
                '西溪湿地':{},
    
                '良渚遗址':{},
                '塘栖古镇':{},
            },
            '上城区':{},
            '下城区':{},
        },
        '上海':{
            '闵行':{
                "人民广场":{
                    '炸鸡店':{}
                }
            },
            '闸北':{
                '火车战':{
                    '携程':{}
                }
            },
            '浦东':{},
        },
        '山东':{},
    }
    三级菜单格式
    menu = {
        '浙江省':{
            '杭州市':{
                '西湖区':{
                    '西湖':{},
                    '雷峰塔':{},
                    '宋城':{}
                },
                '临安区':{
                    '天目山':{},
                    '大明山':{},
                    '白水涧':{},
                },
                '萧山区':{
                    '机场':{},
                },
            },
            '余杭区':{
                '西溪湿地':{},
    
                '良渚遗址':{},
                '塘栖古镇':{},
            },
            '上城区':{},
            '下城区':{},
        },
        '上海':{
            '闵行':{
                "人民广场":{
                    '炸鸡店':{}
                }
            },
            '闸北':{
                '火车战':{
                    '携程':{}
                }
            },
            '浦东':{},
        },
        '山东':{},
    }
    
    exit_flag = False
    current_layer = menu
    
    layers = [menu]
    print(layers)
    while not  exit_flag:
        for k in current_layer:
            print(k)
        choice = input(">>:").strip()
        if choice == "b":
            current_layer = layers[-1]
            #print("change to laster", current_layer)
            layers.pop()
        elif choice not  in current_layer:continue
        else:
            layers.append(current_layer)
            current_layer = current_layer[choice]
    省市县三级菜单
  • 相关阅读:
    Nodejs的下载和安装以及环境配置
    java的JDK的安装和环境变量配置
    CSS3与页面布局——概要、选择器、特殊性与刻度单位
    angular2.x 多选框事件
    NiceFish的ERROR in AppModule is not an NgModule问题
    angularjs分页组件
    获取当前日期
    angularjs实现星星评分
    angularjs1 自定义轮播图(汉字导航)
    获取未来几天的日期以及是星期几
  • 原文地址:https://www.cnblogs.com/zhuminghui/p/7419188.html
Copyright © 2011-2022 走看看