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]