Python 流程控制与循环体

Python 流程控制与循环体,第1张

概述IF 条件判断语句 单分支结构: 单分支结构的判断是最简单的一种形式,如果满足条件则执行,否则跳过IF语句. import sys num = 0 if num == 0: print("数 IF 条件判断语句

单分支结构: 单分支结构的判断是最简单的一种形式,如果满足条件则执行,否则跳过IF语句.

import sysnum = 0if num == 0:    print("数值确实等于零!")

双分支结构: 双分支用来判断两种不同的情况,比如要么为真要么为假.

import sysnum=0if num == 0:    print("数值确实等于零!")else:    print("你在逗我吗,这不是零,皮一下很开心!")

多分支结构: 多分枝结构用来判断大多数情况,其给予每个结果一个返回值.

import sysscore = 88.8level = int(score % 10)if level >= 10:    print('Level A+')elif level == 9:    print('Level A')elif level == 8:    print('Level B')elif level == 7:    print('Level C')elif level == 6:    print('Level D')else:    print('Level E')

模拟登陆(1): 模拟用户登录小实验,输入密码必须不显示.

import sysimport getpassname=input("输入用户名:")pwd=getpass.getpass("请输入密码:")if name == "lyshark" and pwd=="123123":    print("欢迎,lyshark,登陆!")else:    print("用户名或密码错误!")

猜数字游戏(2): 猜数字小游戏,输入参数返回指定结果.

# -*- Coding: utf-8 -*-import sysmy_num = 38user_input = int(input("输入一个数字:"))if user_input == my_num:    print("你猜对了!")elif user_input < my_num:    print("猜小了!")else:    print("猜大了!")

## WHILE 循环语句

死循环: 演示一个死循环的小例子.

import oscount = 0while True:    print("这是一个死循环...",count)    count +=1

循环打印: 循环打印0-9这几个数字,且结果不要换行,在一行中输出.

import oscount = 0while count <= 9:    print(count,end=' ')    count += 1

中断循环: 演示一个while循环被中断的情况.

import oscount = 0while count <=9:    print(count,end=' ')    if count == 5:        break    count += 1else:    print('end')

实例1: 打印指定字符串,循环打印其中的每一个元素,并每次递减.

import osurl="www.baIDu.com"while url:    print(url)    url=url[1:]#--输出结果-------------------------www.baIDu.comww.baIDu.comw.baIDu.com.baIDu.combaIDu.comaIDu.comIDu.comdu.comu.com.comcomomm

实例2: 循环打印一些数据,这里打印0-9并每次递增.

import osx=0;y=10while x<y:    print(x)    x+=1#--输出结果-------------------------0123456789

实例3: 打印一个字符串,循环打印,打印完成后输出game over.

import osurl="www.baIDu.com"while url:    print(url)    url=url[:-1]else:    print("game over")#--输出结果-------------------------www.baIDu.comwww.baIDu.cowww.baIDu.cwww.baIDu.www.baIDuwww.baIDwww.baiwww.bawww.bwww.wwwwwwgame over

实例4: 逐一显示指定列表中的所有元素,这里有三种方法.

>>> List=[1,2,3,4,5,6]>>> count =0>>>>>> while List:...     print(List[0])...     List.pop(0)...>>> List=[1,6]>>> while List:...     print(List[-1])...     List.pop()...>>> List=[1,6]>>> while count < len(List):...     print(List[count])...     count+=1...

实例5: 求100以内所有偶数之和,使用嵌套判断.

>>> num=0>>> sum=0>>> while num <=100:...     if num %2 ==0:...             sum=sum+num...     else:...             pass...  num=num+1

实例6: 逐一显示指定字典的所有键,并于显示结束后说明总键数.

>>> d1 = {'x':1,'y':23,'z':78}>>> keyLists = d1.keys()>>> while keyLists:        print(keyLists[0])        keyLists.pop[0]    else:        print(len(d1))

实例7: 创建一个包含了100以内所有奇数的列表.

>>> l1 = []>>> x = 1>>> while x < 100:        l1.append(x)        x += 2

实例8: 列表l1 = [0,1,6],列表l2 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],以第一个列表中的元素为键,以第二个列表中的元素为值生成新字典d1.

>>> l1 = [0,6]>>> l2 = ['Sun','Sat']>>> d1 = {}>>> count = 0>>> if len(l1) == len(l2):    while count < len(l1):        d1[l1[count]] = l2[count]        count += 1>>> print(d1)

实例9: 循环并打印相关文字,当到达100次的时候退出.

count = 0while True:    print("hello lyshark:",count)    count +=1    if count == 100:        print("break")        break

实例10: 模拟登陆小程序,程序启动要求输入密码,并判断如果次数小于3次则登陆成功,否则禁止登陆.

#!/usr/bin/env python# -*- Coding:utf-8 -*-import getpassimport osname = "lyshark"pwd = "123123"count = 0while True:    if count < 3:        print("请输入用户名和密码:")        username = input("用户名:")        password = getpass.getpass("密码:")        if username == name and password == pwd:            print("恭喜你登陆成功!")            break        else:            print("登陆失败!用户名或者密码错误")    else:        print("你已经输错3次,正在退出....")        break    count += 1

## FOR 循环遍历语句

列表遍历: 通过使用for循环打印一个List列表中的元素.

import osnames = ["tom","admin","lyshark","jack"]for x in names:    print(x)

列表迭代: 对于一个序列来说,也可以通过索引进行迭代.

import osnames = ["tom","jack"]for x in range(len(names)):    print(names[x])

打印序列: 通过for循环,遍历并打印一个序列.

import osT = [(1,2),(3,4),(5,6),(7,8)]for (a,b) in T:    print(a,b)

循环遍历: 遍历0-9范围内的所有数字,并通过循环控制语句打印出其中的奇数.

import osfor i in range(10):    if i % 2 == 0:        continue    print(i,end=' ')

循环遍历: 通过循环控制语句打印一个列表中的前3个元素.

import osnames = ['Tom','Peter','Jerry','Jack','lilly']for i in range(len(names)):    if i >= 3:        break    print(names[i])

循环遍历: 通过for循环打印99乘法表.

import osfor j in range(1,10):    for i in range(1,j+1):        print('%d*%d=%d' % (i,j,i*j),end='\t')        i += 1    print()    j += 1

range()函数: 通过使用range函数,每隔一定的个数元素挑选一个元素.

>>> string="hello world my name lyshark">>> for i in range(0,len(string),2):...     print(string[i])

range()函数: 通过range遍历,修改列表元素,在原来元素的基础上修改元素.

>>> List=[1,5]>>> for i in range(len(List)):...     List[i]+=1...>>> List[2,6]

zip()函数: zip函数常用于动态的构造字典.

>>> L1 = [1,5]>>> L2 = ['a','b','c','d','e',]>>> zip(L1,L2)>>> >>> keys = [1,6,7]>>> vaules = ['Sun','Sat']>>> D = {}>>> for (k,v) in zip(keys,values)       D[k] = v>>> D

实例1: 逐一分开显示指定字典d1中的所有元素,也就是字典遍历打印.

>>> d1 = {'x':123,'y':321,'z':734}>>> for (k,v) in d1.items():    print(k,v)    y 321x 123z 734

实例2: 逐一显示列表中l1=['Sun','Sat']中索引为奇数的元素.

>>> l1=['Sun','Sat']>>> >>> for i in range(1,len(l1),2):    print(l1[i])

实例3: 将属于列表l1=['Sun',但不属于列表l2=['Sun','Sat']的所有元素定义为一个新列表l3,并加入到其中.

>>> l1=['Sun','Sat'] >>> l2=['Sun','Sat']>>> l3 = []>>> for i in l1:>>>     if i not in l2:>>>         l3.append(i)

实例4: 将属于列表nameList=['stu1','stu2','stu3','stu4','stu5','stu6','stu7'],删除列表removeList=['stu3','stu7','stu9'],请将属于removeList列表中的每个元素从nameList中移除(属于removeList,但不属于nameList的忽略即可).

>>> nameList=['stu1','stu7']>>> removeList=['stu3','stu9']>>> for i in removeList:>>>     if i in nameList:>>>         nameList.remove(i)>>> print(nameList)

实例5: 给指定的一个列表加编号,使用enumerate加编号.

>>> temp=["手机","电脑","玩具"]>>> for (x,y) in enumerate(temp):    print(x,y)    0 手机1 电脑2 玩具

小总结: 实现让用户不断的猜年龄,但只给最多3次机会,再猜不对就退出程序.

#!/usr/bin/env python# -*- Coding:utf-8 -*-age = 22count = 0for i in range(10):    if count < 3:        a = int(input("请输入一个猜测的数:"))        if a == age:            print("恭喜你,答对了")            break        elif a > age:            print("你猜的数字大了")        else:            print("你猜的数字小了")    else:        b = input("这都猜不对,你继续玩吗?(yes or not):")        if b == 'yes':            count = 0            continue        else:            print("Bye!下次再玩")    count += 1

## 跳过执行与跳出语句

pass语句: pass是为了保持程序结构的完整性,该语句不做任何事情,一般用做占位语句.

>>> for ch in "LyShark":...     if ch == "h":...             pass...             print("这里执行了pass语句")...     print("字符:",ch)...#--输出结果-------------------------字符: L字符: y字符: S这里执行了pass语句字符: h字符: a字符: r字符: k

break语句: break语句用来终止循环语句,即使循环没有结束任然要执行.

>>> for ch in "LyShark":...     if ch == "a":...             break...     print("字符:",ch)...#--输出结果-------------------------字符: L字符: y字符: S字符: h

continue语句: 该语句语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环.

>>> for ch in "LyShark":...     if ch == "a":...             continue...     print("字符:",ch)...#--输出结果-------------------------字符: L字符: y字符: S字符: h字符: r字符: k

## 本章小总结(课后练习)

实现元素分类: 有如下值集合[11,22,33,44,55,66,77,88,99],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中,即:{'k1': 大于66的所有值,'k2': 小于66的所有值},代码如下:

List= [11,99]bignum=[]smallnum=[]dir={}for num in List:    if num>66:        bignum.append(num)    if num<66:        smallnum.append(num)    else:        passdir['k1']=bignumdir['k2']=smallnumprint(dir)

实现元素查找: 查找元素,移动空格,并查找以a或A开头,并且以c结尾的所有元素.

li = ["alec"," aric","Alex","Tony","rain"]tu = ("alec","rain")dic = {'k1': "alex",'k2': ' aric',"k3": "Alex","k4": "Tony"} for i in li:    if i.strip().cAPItalize().startswith('A') and i.strip().endswith('c'):        print(i)for i in tu:    if i.strip().cAPItalize().startswith('A') and i.strip().endswith('c'):        print(i)for i in dic.values():    if i.strip().cAPItalize().startswith('A') and i.strip().endswith('c'):        print (i)

实现商品输出: 输出商品列表,用户输入序号,显示用户选中的商品.

#方法一l1=[1,4]l2=["手机",'鼠标垫','游艇']d=dict(zip(l1,l2))print(d)num=input("请输入商品编号:")print("你选择的商品为 %s" %d[int(num)]) #方法二li = ["手机",'游艇']for k,i in enumerate(li):    print(k,i)k=input("请输入商品编号:")print("你选择的商品为 %s" % li[int(k)])

实现命令行: 实现一个简单的命令行小工具框架,可自行添加扩展功能.

import sysimport osimport platformdef help():    print("By:LyShark www.mkdirs.com")def clear():    temp=platform.system()    if(temp == "windows"):        os.system("cls")    elif(temp == "linux"):        os.system("clear")def main():    while True:        try:            shell=str(input("[Shell] # "))            if(shell == ""):                continue            elif(shell == "exit"):                exit()            elif(shell == "help"):                help()            elif(shell == "clear"):                clear()            else:                print("未知命令行")        except Exception:            continue# 程序的开头,模拟C语言写法.if __name__ == '__main__':    main()

实现三级菜单: 实现用户交互,显示省市县三级联动的选择.

dic = {    "河北": {        "石家庄": ["鹿泉","藁城","元氏"],"邯郸": ["永年","涉县","磁县"],},"湖南": {        "长沙":['a','c'],"株洲":['d','f']    },"湖北": {        "武汉":['g','h','i'],"黄石":['j','k','l']    }}for k in dic.keys():    print(k)flag=Truewhile flag:    n=input("请输入你所在省:")    for k in dic.keys():        if n in dic.keys():            if k == n:                for i in dic[n].keys():                    print(i)                w = input("请输入你所在的城市:")                for i in dic[n].keys():                    if w in dic[n].keys():                        if i == w:                            for k in dic[n][w]:                                print(k)                            s=input("请输入你所在的县:")                            for j in dic[n][w]:                                if s in dic[n][w]:                                    if j==s:                                        print("你所在的位置是:%s省%s市%s县" % (n,w,s))                                        flag = False                                        break                                else:                                    print('不存在,请重新输入')                                    break                    else:                        print('不存在,请重新输入')                        break        else:            print('不存在,请重新输入')            break

实现一个购物车: 实现一个购物车小程序,并符合以下要求.

1.要求用户输入总资产,例如:20000
2.显示商品列表,让用户根据序号选择商品,加入购物车
3.购买,如果商品总额大于总资产,提示账户余额不足,否则购买成功

product = [    ("iphone",5800),("watch",380),("bike",800),("book",120),("computer",4000)] shopPing_car = [] salary = input("请输入你的金钱: ")if salary.isdigit():    salary = int(salary)    while True:        for i in enumerate(product):            print(i)         user_choice = input(">>>或者q:")         if user_choice.isdigit():            user_choice = int(user_choice)            if user_choice >= 0 and user_choice < len(product):                p_item = product[user_choice]                if salary >= p_item[1]:                    shopPing_car.append(p_item[0])                    salary -= p_item[1]                    print("你购买了3[32m%s3[0m,你的余额剩余3[31m%s3[0m" % (p_item[0],salary))                else:                    print("3[31m你的余额不足3[0m")            else:                print("你输入的项目[%s]不存在,请重新输入" % user_choice)        elif user_choice == 'q':            print("你购买了这些商品:".center(30,"-"))            for i in shopPing_car:                print("3[32m%s3[0m" %i)            print("3[31m余额%s3[0m" %salary)            exit()        else:            print("你输入的[%s]不存在" % user_choice)else:    print("你输入的金额不正确!请重新输入金额!")

## 实例小总结(提高技巧)

题目(1): 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

程序分析:可填在百位、十位、个位的数字都是1、2、3、4,组成所有的排列后再去掉不满足条件的排列.

>>> for i in range(1,5):...     for j in range(1,5):...             for k in range(1,5):...                     if(i!=k) and (i!=j) and(j!=k):...                             print(i,k)...#--输出结果-------------------------1 2 31 2 41 3 21 3 41 4 21 4 32 1 32 1 4

题目(2): 输入某年某月某日,程序自动判断这一天是这一年的第几天?

程序分析:以10月1日为例,应该先把前9个月的加起来,然后再加上1天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天.

# -*- Coding: UTF-8 -*- year = int(input('year:\n'))month = int(input('month:\n'))day = int(input('day:\n')) months = (0,31,59,90,120,151,181,212,243,273,304,334)if 0 < month <= 12:    sum = months[month - 1]else:    print ('data error')sum += dayleap = 0if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):    leap = 1if (leap == 1) and (month > 2):    sum += 1print ('it is the %dth day.' % sum)#--输出结果-------------------------year:2018month:10day:1it is the 274th day.

题目(3): 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、….在数学上,费波那契数列是以递归的方法来定义.

F0 = 0    (n=0)F1 = 1    (n=1)Fn = F[n-1]+ F[n-2](n=>2)# -*- Coding: UTF-8 -*- def fib(n):    a,b = 1,1    for i in range(n-1):        a,b = b,a+b    return a # 输出了第10个斐波那契数列print (fib(10))

题目(4): 输出9*9乘法口诀表,分行与列考虑,共9行9列,i控制行,j控制列.

import osimport sysfor x in range(1,10):        print()        for y in range(1,x+1):                print("%d*%d=%d "%(y,x,x*y),end="")

题目(5): 写一个字符串遍历查找工具,代码如下.

import osimport sysls="Type help() for interactive help,or help(object) for help about object"find="help"for x in range(len(ls)):        temp=len(find)        if str(ls[x:x+temp]) == str(find):                print(ls[x:x+temp],x)                break

题目(6): 通过使用time模块中的sleep函数,让程序每隔1秒执行一次循环.

import osimport timedic={1:"admin",2:"guest"}for key,value in dict.items(dic):        print(key,value)        time.sleep(1)

题目(7): 通过使用time模块,对指定的时间格式进行一定的格式化 *** 作.

import osimport timeprint(time.strftime("%Y-%m-%d %H:%M:%s",time.localtime(time.time())))   #2019-01-18 15:16:28time.sleep(2)print(time.strftime("%Y-%m-%d %H:%M:%s",time.localtime(time.time())))

题目(8): 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

程序分析:兔子的规律为数列 1,8,13,21....

import osf1 = 1f2 = 1for i in range(1,22):    print('%12ld %12ld'%(f1,f2))    if (i % 3) == 0:        print("")    f1 = f1 + f2    f2 = f1 + f2

题目(9): 判断101-200之间有多少个素数,并输出所有素数.

程序分析:判断素数的方法,用一个数分别去除2,如果能被整除,则表明此数不是素数,反之是素数. 

import osfrom math import sqrtfrom sys import stdouth=0leap=1for m in range(101,201):    k = int(sqrt(m + 1))    for i in range(2,k + 1):        if m % i == 0:            leap = 0            break    if leap == 1:        print("%-4d"%m)        h += 1        if h % 10 == 0:            print("")    leap = 1print('The total is %d' %h)

题目(10): 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数.

import osimport stringstrs=input("请输入一个字符串:")letters=0space=0digit=0others=0for x in range(len(strs)):        ch=strs[x]        if ch.isAlpha():                letters+=1        elif ch.isspace():                space+=1        elif ch.isdigit():                digit+=1        else:                others+=1print("char=%d,space=%d,digit=%d,others=%d"%(letters,space,digit,others))

题目(11): 读取db配置文件,并按照文件中的账号密码判断是否允许登陆.

import osimport sysdef login(x,y):    fp=open("db","r",enCoding="utf-8")    data=fp.readline().split(":")    count=len(open("db","r").readlines())    username=data[0]    password=data[1]    for i in range(3):        if x==username.strip() and y==password.strip():            print("登陆成功")            break        else:            data=fp.readline().split(":")            username=data[0]            password=data[1]            continue    fp.close()login("admin","admin")login("lyshark","lyshark")
总结

以上是内存溢出为你收集整理的Python 流程控制与循环体全部内容,希望文章能够帮你解决Python 流程控制与循环体所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1158002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)