python介绍,变量,if,while1时光若止~~~

Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等

目前Python主要应用领域:

cpu:

相当于人的大脑,运算与控制中心。速度飞机内存:暂

时存储,供给CPU数据。速度高铁。成本高,断电即消失。硬盘:

相当于电脑的数据库,存储着大量的数据,文件,音频文件。速度走。成本低操作系统:

执行者,支配所有关系。windows,linux,mac...

python流行的原因1.大量第三方库2.Diango

Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。python2x和3x在同一年诞生,2x是10月,3是12月python2x:源码混乱,重复代码较多,冗余。python3x:源码规范,崇尚优美、清晰,简单

1.print方法有区别python3xprint('内容')python2xprint()或者print'内容'

2.编码方式不一样python3x默认编码:utf-8python2x默认编码:ascii只包含英文字母和特殊字符以及数字不支持中文解决方式:在头部增加

#-*-coding:utf-8-*-3.input不同python2x:raw_input()python3x:input()

编程语言主要从以下几个角度进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语,我们先看编译型语言和解释型语言.稍后再说强类型和弱类型

解释型:当程序运行时,将代码一行一行的解释成二进制,再运行。优点:排错快,开发效率高,可以跨平台.有良好的平台兼容性,在任何环境中都可以运行,前提是安装了了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:执行效率相对低,每次运行的时候都要解释一遍,性能上不如编译性语言典型:python,javascrip,php编译型:将代码一次性全部编译成二进制,然后运行。所以执行效率高,可以脱离语言环境独立运行。缺点:排错慢,开发效率低,不能跨平台(操作系统)。编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运环境成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执件。

优点:执行效率高典型:C,c++,go

这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语(是二进制的形式)

python的种类

CPython默认解释器,转换为字节码,再转换为c语言010101...IPythonPyPy一次性全部转化成二进制,执行效率高。Jython把Python代码编译成Java字节码执行IronPython

虽然解释器不同,但是写python代码的规则还是统一的。

如果想要windows电脑同时有2个python环境,Python2.7和Python3.5

先安装python2.7

勾选添加环境变量

再安装python3.5

选择自定义安装,勾选添加环境变量

安装路径设置为C:\Python35

进入目录C:\Python27

将python.exe更改为python2.exe

打开windows命令行模式

输入python2就是2.7版本

输入python就是3.5版本

新建一个test.py文件,内容如下

print('你好,世界')使用命令行方式

我的代码路径在E:\python_script\day1

进入目录,执行代码

使用python2执行

执行报错

因为默认python2x编码是ascii,不支持中文

在第一行添加

#-*-coding:utf-8-*-

再次执行,就可以了

如果python安装完成之后,发现执行python有问题时可以把所有python版本卸载,重新安装一次,确保环境变量已经删除,文件后缀是可以显示的。

变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用。

变量定义的规则:

1,变量必须由数字,字母,下划线任意组合。2,变量不能以数字开头。3,变量不能是python中的关键字。(不用背)['and','as','assert','break','class','continue','def','del','elif','else','except','exec','finally','for','from','global','if','import','in','is','lambda','not','or','pass','print','raise','return','try','while','with','yield']4,变量要具有可描述性。5,变量不能是中文。6,变量不能太长。7,官方推荐:

#驼峰体AgeOfOldboy=56NumberOfStudents=100#下划线age_of_oldboy=56number_of_students=80

一般推荐使用第2种,也就是下划线的方式。

下面几个例子,判断变量名是否合法

w__=22e_a_='太白'e$='fdsa'-_='15'2g=33__='老村长'3,4,5行的变量,是不合法的,其他的都是合法的。

赋值计算先计算等号右边的,把计算的值赋值给左边的

python是解释型语言,代码是一行一行执行后面的变量会覆盖前面的。

age1=12age2=age1age3=age2age2=6print(age1,age2,age3)执行输出

12612

看一个图

age1~3的值,存储在内存中。当age2等于6时,age2值的指向就发生了变化,值为6

7.常量常量即指不变的量,如pai3.141592653...,或在程序运行过程中不会改变的量默认全部大写的变量,称之为常量。

CITY_LIST='beijing'

11.注释为什么有注释?帮助你记起之前的代码,或者帮助别人看懂你的代码不宜多,精就行

单行注释:#被注释内容多行注释:'''被注释内容'''或者"""被注释内容"""

#定义一个变量name1="taibai"'''虞美人·碧苔深锁长门路清代:王国维碧苔深锁长门路。总为蛾眉误。自来积毁骨能销。何况真红一点臂砂娇。妾身但使分明在。肯把朱颜悔。从今不复梦承恩。且自簪花坐赏镜中人。'''

int(整型)

在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647

在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(长整型)

跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。注意:在Python3里不再有long类型了,全都是int长整型

字符串类型(str)

在Python中,加了引号的字符都被认为是字符串!

msg="Mynameisxiao,I'm22yearsold!"num='12'这种会出错

msg="Mynameisxiao,I"m22"yearsold!"双引号,只看2头的,从左到右

一般3个引号的,用到多行的场景,有行号符的。一行很少用3个引号的

shi='''马汗踏成泥,朝驰几万蹄。雪中行地角,火处宿天倪。塞迥心常怯,乡遥梦亦迷。那知故园月,也到铁关西。'''print(shi)执行输出

马汗踏成泥,朝驰几万蹄。雪中行地角,火处宿天倪。塞迥心常怯,乡遥梦亦迷。那知故园月,也到铁关西。

3个单引号,没有赋值,是用来注释的

比如上面的唐诗《虞美人·碧苔深锁长门路》

字符串只能相加和相乘

相加

n1='她的名字是'n2='南宫紫菱'n3=n1+n2print(n3)执行输出

她的名字是南宫紫菱

相乘

n1='我好爱你!'print(n1*3)执行输出

我好爱你!我好爱你!我好爱你!

布尔类型很简单,就两个值,一个True(真),一个False(假),主要用记逻辑判断

print(1>2)执行输出

False

返回false布尔值是不带引号的

print(1>2and3<4or4>5)执行输出

布尔值判断时,如果出现false,结果返回false

使用type()方法

n1='nan'n2=Falsen3='False'print(type(n1))print(type(n2))print(type(n3))执行输出

input出来的数据类型,都是字符串

name=input('请输入你的名字:')age=input('请输入你的年龄:')hobby=input('请输入你的爱好:')s='我的名字是'+name+'\n我的年龄是'+age+'\n我的爱好是'+hobbyprint(s)执行效果

第一种结构

if条件:结果举例

if3>2:print(666)执行输出

666

第二种结构

if条件:结果else:结果举例

if3>2:print(666)else:print(333)执行输出

第三种结构

if条件1:结果1elif条件2:结果2elif条件3:结果3举例

choice=input('请输入你猜的数字:')ifchoice=='2':print('我请你吃饭')elifchoice=='6':print('免一周作业')elifchoice=='3':print('一起去玩耍')执行输出

第4种结构

if条件1:结果1elif条件2:结果2elif条件3:结果3else:结果4举例

choice=input('请输入你猜的数字:')ifchoice=='2':print('我请你吃饭')elifchoice=='6':print('免一周作业')elifchoice=='3':print('一起去玩耍')else:print('输入错误')执行输出

==表示做比较=表示赋值

第5种结构

if条件:if条件:结果else:结果else:结果只要需求存在,就可以一直嵌套if

举例

age=int(input('请猜我的年龄:'))ifTrue:ifage==18:print('恭喜你猜对了')else:print('这都看不出来...')else:print('输入错误')执行输出

字符串之间不能比较大小,只能比较相等

int--->strstr(12)转换成字符串,使用str()str--->intint(12)全部由数字组成的字符串才能转化为数字

用来执行重复的代码

whileTrue:print('痒')print('凉凉')print('体面')print('社会摇')执行输出

痒凉凉体面社会摇

...

whileTrue代表死循环

另外一个例子

print(222)whileTrue:print(111)print(333)print(444)执行输出

222

111333

....

444永远不会执行

跳出循环的条件:1.改变条件2.breck

标志位flag

从1打印到100

#标志位flag=True#初始值count=1whileflag:#第一次,打印初始值。之后打印自增值print(count)#循环一次,自增1count=count+1#当等于100时,循环终止ifcount==100:#打印100print(count)flag=False执行输出

1

2

3

100

第2种写法

#初始值count=1whilecount<101:#第一次,打印初始值。之后打印自增值print(count)#循环一次,自增1count=count+1执行输出,效果同上

breck:结束循环

whileTrue:print(111)print(222)breakprint(333)执行输出

111

遇到breck,终止循环,下面的代码不执行

continue:结束本次循环,继续下一次循环。continue相当于见底了

whileTrue:print(111)print(222)continueprint(333)执行输出

333永远不会执行,为什么呢?遇到continue时,下面代码不执行,继续执行下一次循环,由于循环无法终止,所以最后一行代码,始终不会执行。

使用breck方式,打印1到100

#初始值count=1whileTrue:#第一次,打印初始值。之后打印自增值print(count)#循环一次,自增1count=count+1ifcount==101:break执行输出1到100执行输出1到100

1、使用while循环输入1234568910

2、求1-100的所有数的和

3、输出1-100内的所有奇数

4、输出1-100内的所有偶数

5、求1-2+3-4+5...99的所有数的和

6、用户登陆(三次机会重试)

习题分析:

观察题目,发现1~10,少了一个数字7

思路如下:

1.先输出1~10

#初始值count=0whilecount<10:count=count+1print(count)执行输出1~10

2.遇到7的时候,不执行print()就可以了

如果直接用breck,那么循环就终止了。这个时候,需要用到continue了

最终代码如下:

#初始值count=0whilecount<10:#自增1count=count+1#判断为7时,终止此次循环,继续下一次循环ifcount==7:continueprint(count)执行输出

1234568910

思路如下:

1.先输出1~100

#初始值count=0whilecount<100:#自增1count=count+1print(count)2.需要定义一个总和变量the_sum,每次要向前推进加数字,就比如吃豆游戏一样

#初始值count=0#总和的初始值the_sum=0whilecount<100:#自增1count=count+1the_sum=the_sum+countprint(the_sum)print(the_sum)执行输出

136

5050

上面的代码,我把每次相加的结果给打印出来了。

0+1+2+3+....+100

计算过程是从左至右的,0+1=1,再计算1+2=3,再计算3+3=6....

解释一下代码执行过程

第一次count=0,the_sum=0执行到第7行时,count=1,那么the_sum结果1,所以输出1

第二次count=1(因为whlie循环会迭代),执行到第7行时,count=2(1+1=2),那么the_sum的结果为3。因为第一次the_sum的值为1,所以这里为1+2=3

第三次,count=2,执行到第7行时,count=3,那么the_sum的结果为6(3+3=6)

所以最终结果为4950+100=5050

先来介绍求奇数和偶数的方法

用数字和2整除,取余%等于1为奇数等于0为偶数

思路和第2题类似

#初始值count=0whilecount<100:#自增1count=count+1print(count)执行输出1~100

2.用count和2整除取余,如果为1,输出数字,否则不输出

#初始值count=0whilecount<100:#自增1count=count+1#取余,和2整除yushu=count%2#为1表示奇数ifyushu==1:print(count)执行输出

135

99

方法和第3题类似,把取余部分修改一下

#初始值count=0whilecount<100:#自增1count=count+1#取余,和2整除yushu=count%2#为0表示偶数ifyushu==0:print(count)执行输出

246

从这个公式可以发现出规律

为偶数的是做减法

为奇数的是做加法

思路:

在第二个题目基础上来做,第二个是1到100的求和

1.先把第2题的代码贴过来

2.在此基础上做一下稍微的改动,最终代码如下:

#初始值count=0#计算最终值的初始值final_value=0whilecount<99:#自增1count=count+1#取余,和2整除yushu=count%2#为1表示奇数ifyushu==1:#做加法运算final_value=final_value+countprint(final_value)#偶数else:#做减法运算final_value=final_value-countprint(final_value)print(final_value)执行输出

1-12

50

最终结果为50

注意:这里最后一个数字是99,而不是100,所以是whilecount<99

上面的代码,我把每次计算的结果给打印出来了。

0+1-2+3-4....+99

计算过程是从左至右的,0+1=1,再计算1-2=-1,再计算-1+3=2....

第一次count=0,final_value=0,执行到第7行时,count=1。做取余计算1/2,结果为1。

if判断等于1,结果成立,所以为奇数。计算等式final_value+count也就是0+1=1,输出1

第二次count=1,final_value=1,执行到第7行时,count=2。做取余计算2/2,结果为0。

if判断等于1,结果不成立,所以为偶数。计算等式final_value-count也就是1-2=-1,输出-1

第三次count=2,final_value=-1,执行到第7行时,count=3。做取余计算3/2,结果为1。

if判断等于1,结果成立,所以为奇数。计算等式final_value+count也就是-1+3=2,输出2

所以最终结果为-49+99=50

6、用户登陆(三次机会重试)思路

a=100b=100print(a==b)print(aisb)执行输出:

TrueTrue

#列表#li=[1,2,3]#li2=[1,2,3]#print(liisli2)#False#元组#tu=(1,2,3)#tu1=(1,2,3)#print(tuistu1)#False#字典#dic1={'name':'alex'}#dic={'name':'alex'}#print(dic1isdic)#False两个相同的字典{},列表[],元组()都是False

查看内存地址,使用id函数

print(id(a))print(id(b))执行输出:

24568395544802456839554480

#a='alex'#print(id(a))#36942544内存地址#n=10#print(id(n))#1408197120#li=[1,2,3]#print(id(li))#38922760内存地址,相当于门牌号

==比较的是数值

is比较的是内存地址内存地址用id()获取

只有数字和字符串类型

小数据池的作用:就是节省内存

数字小数据池:-5~256这个范围指向的是同一内存地址

n=-6n1=-6print(nisn1)#Falsen=-5n1=-5print(nisn1)#Truen=257n1=257print(nisn1)#True字符串,是没有范围的。

a='alex@'a1='alex@'print(aisa1)在pycharm上是True在cmd上是False

字符串:1.如果含有特殊字符,不存在小数据池

2.str(单个)*intint>20不存在小数据池(字符串中单个*20以内他们的内存地址一样,单个*21以上内存地址不一致)

#n=5//2#n1=2#print(nisn1)#True

#a='a'*21#b='a'*21#print(aisb)#False

a='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'b='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'print(aisb)#True

其它的数据类型,不存在小数据池。

asiic:字母,数字,特殊字符;8位1个字节表示1个字符。unicode:万国码:Q:00000001000000010000000100000001中:00000101000000010000000100000001utf-8:a:00000001欧:0000000100000001中:000000010000000100000001gbk:国标a:00000001中:0000000100000001

1.编码之间的二进制户部识别2,存储和传输101010,但是不能是unicode的1010101,因为资源浪费了

数据类型intbool

strbyte与str的方法相同

listdict

python3x中的编码:python3x中str在内存中的编码方式是unicode。python3x中的str不能直接存储,和发送。bytes他的编码方式是非unicode(utf-8,gbk,gb2012.....)。对于英文:str:表现形式:s='laonanhai'内部编码:unicodebytes:表现形式:s=b'laonanhai'内部编码:非unicode.对于中文:str:表现形式:s='中国'内部编码:unicodebytes:00000001表现形式:s1=b'\xe4\xb8\xad\xe5\x9b\xbd'内部编码:非unicode.

str不能直接存储和传输

必须要转换为bytes类型,才可以。

s='laonanhai's1=b'laonanhai'print(s)print(s1)执行输出:

laonanhaib'laonanhai'

字符串前面的b表示bytes类型

字符串转换为bytes

s='中国's1=s.encode('utf-8')print(s1)执行输出:

b'\xe4\xb8\xad\xe5\x9b\xbd'

一个\表示一位,上面的输出,可以看出占用了6位。

s='alex's1=s.encode('utf-8')print(s1)执行输出:

b'alex'

转换为gbk

s='hellogirl's1=s.encode('gbk')print(s1)执行输出:

b'hellogirl'

bytes转换为str

s1=b'\xe4\xb8\xad\xe5\x9b\xbd's2=s1.decode(encoding='utf-8')print(s2)执行输出:

中国

只有将字符串写入文件或者发送数据时,才需要用到编码转换。

最low方法

list3=[{"name":"alex","hobby":"抽烟"},{"name":"alex","hobby":"喝酒"},{"name":"alex","hobby":"烫头"},{"name":"alex","hobby":"Massage"},{"name":"wusir","hobby":"喊麦"},{"name":"wusir","hobby":"街舞"},]list4=[{"name":"alex","hobby_list":[]},{"name":"wusir","hobby_list":[]},]foriinlist3:ifi['name']=='alex':list4[0]['hobby_list'].append(i['hobby'])else:list4[1]['hobby_list'].append(i['hobby'])print(list4)ViewCode第一种方法(推荐)

[{'hobby_list':['抽烟','喝酒','烫头','Massage'],'name':'alex'},{'hobby_list':['喊麦','街舞'],'name':'wusir'}]第二方法,使用setdeafult

dic={}#空字典li=[]#空列表forelinlist3:dic.setdefault(el["name"],[]).append(el['hobby'])#1.如果有当前name就返回对应列表并且追加新的hobby#2.如果没有,就返回空列表,追加hobby进去#字典的结果如下:#{'alex':['抽烟','喝酒','烫头','Massage'],'wusir':['喊麦','街舞']}fork,vindic.items():#遍历字典di={}#将新字典清空后追加到列表,防止每次循环k,v被更新替代di["name"]=k#设置姓名di["hobby_list"]=v#设置爱好li.append(di)#最加到列表中print(li)执行输出,效果同上!

第16题有一个bug,当输入1+ab还是会打印出总和,解决方法如下:

dic={'最终计算结果':None}whileTrue:#总和,必须要放到whlie循环里面,否则会和上次的计算结果相加the_sum=0#标志位,必须要放到whlie循环里面,否则无法重置flag=True#切割加号两边的数字content=input('请输入内容:').strip()foriincontent.split('+'):#去除加号2边数字的空格i=i.strip()#判断是否为数字ifi.isdigit():#自增加the_sum+=int(i)else:print("输入{}非法!".format(i))#如果包含了字母,标志为Falseflag=Falsecontinue#判断加号2边的,是否全是数字。ifflag:dic['最终计算结果']=the_sumprint(dic)执行效果如下:

购物车程序,达到的效果如下:

根据老师上次的代码

li=["手机","电脑",'鼠标垫','游艇']whileTrue:foriinli:print('{}\t{}'.format(li.index(i)+1,i))num=input('请输入商品序号:q/Q退出:').strip()ifnum.isdigit():num=int(num)ifnum>0andnum<=len(li):print(li[num-1])else:print('您输入的选项,超出范围,请重新输入')elifnum.upper()=='Q':breakelse:print('输入的有非数字,请重新输入')先修改一下执行的输出显示

goods=[{"name":"电脑","price":1999},{"name":"鼠标","price":10},{"name":"游艇","price":20},{"name":"美女","price":998},]whileTrue:print('请选择以下商品'.center(16,'*'))foriingoods:print('{}\t{}{}'.format(goods.index(i)+1,i['name'],i['price']))num=input('请选择您输入的商品序号(输入Q或者q为退出):').strip()ifnum.isdigit():num=int(num)ifnum>0andnum<=len(goods):print('您已经成功购买{}'.format(goods[num-1]['name']))else:print('您输入的选项,超出范围,请重新输入')elifnum.upper()=='Q':breakelse:print('输入的有非数字,请重新输入')执行输出:

增加一个输入框,用来输入资产,在购买商品之前,判断余额是否足够,扣除资产

goods=[{"name":"电脑","price":1999},{"name":"鼠标","price":10},{"name":"游艇","price":20},{"name":"美女","price":998},]#总资产whileTrue:assets=input('请输入你的总资产:').strip()ifassets.isdigit():assets=int(assets)breakelse:print('您输入是非数字,请重新输入')whileTrue:print('请选择以下商品'.center(16,'*'))#打印商品列表foriingoods:print('{}\t{}{}'.format(goods.index(i)+1,i['name'],i['price']))num=input('请选择您输入的商品序号(输入Q或者q为退出):').strip()ifnum.isdigit():num=int(num)ifnum>0andnum<=len(goods):#判断当前余额是否大于商品价格ifassets>=goods[num-1]['price']:#扣除商品价格后为当前余额assets-=goods[num-1]['price']else:print('当前余额不足,无法购买此商品!')else:print('您输入的选项,超出范围,请重新输入')elifnum.upper()=='Q':breakelse:print('输入的有非数字,请重新输入')执行输出:

加入购物车列表,输入q之后,打印购物车列表

程序:三级菜单要求:1.打印省、市、县三级菜单2.可返回上一级3.可随时退出程序

先准备基础数据

zone={'山东':{'青岛':['四方','黄岛','崂山','李沧','城阳'],'济南':['历城','槐荫','高新','长青','章丘'],'烟台':['龙口','莱山','牟平','蓬莱','招远']},'江苏':{'苏州':['沧浪','相城','平江','吴中','昆山'],'南京':['白下','秦淮','浦口','栖霞','江宁'],'无锡':['崇安','南长','北塘','锡山','江阴']},'浙江':{'杭州':['西湖','江干','下城','上城','滨江'],'宁波':['海曙','江东','江北','镇海','余姚'],'温州':['鹿城','龙湾','乐清','瑞安','永嘉']}}

以下展示的代码,不包含zone,因为占用行数太多了。

获取省列表

print(zone.keys())执行输出:

dict_keys(['浙江','山东','江苏'])

输出的类型是一个特殊类型,没有索引。但是我需要获取索引,怎么办?

把数据转换为列表不就可以了吗?

#省列表province=list(zone.keys())print(province)执行输出:

['浙江','山东','江苏']

打印省列表,并格式化输出

#省列表province=list(zone.keys())#打印省列表print('省'.center(20,'*'))foriinprovince:print('{}\t{}'.format(province.index(i)+1,i))执行输出:

增加一个输入框,用来输入省编号,这里需要循环输出,用while循环

并且判断输入的内容是否合规

#省列表province=list(zone.keys())#打印省列表print('省'.center(20,'*'))whileTrue:foriinprovince:print('{}\t{}'.format(province.index(i)+1,i))province_input=input('请输入省编号,或输入q/Q退出:').strip()ifprovince_input.isdigit():province_input=int(province_input)ifprovince_input>0andprovince_input<=len(province):passelse:print('省编号{}不存在!'.format(province_input))elifprovince_input.upper()=='Q':breakelse:print('输入省编号非法!')执行输出:

进入市列表

#省列表province=list(zone.keys())#打印省列表print('省'.center(20,'*'))whileTrue:foriinprovince:print('{}\t{}'.format(province.index(i)+1,i))province_input=input('请输入省编号,或输入q/Q退出:').strip()ifprovince_input.isdigit():province_input=int(province_input)ifprovince_input>0andprovince_input<=len(province):#省编号,由于显示加1,获取的时候,需要减1province_id=province_input-1#城市列表city=list(zone[province[province_id]].keys())#进入市区列表whileTrue:print('市'.center(20,'*'))forjincity:print('{}\t{}'.format(city.index(j)+1,j))city_input=input("请输入市编号,或输入b(back)返回上级菜单,或输入q(quit)退出:").strip()#退出省循环breakelse:print('省编号{}不存在!'.format(province_input))elifprovince_input.upper()=='Q':breakelse:print('输入省编号非法!')执行输出:

判断输入的市编号是否合规

#省列表province=list(zone.keys())#打印省列表print('省'.center(20,'*'))whileTrue:foriinprovince:print('{}\t{}'.format(province.index(i)+1,i))province_input=input('请输入省编号,或输入q/Q退出:').strip()ifprovince_input.isdigit():province_input=int(province_input)ifprovince_input>0andprovince_input<=len(province):#省编号,由于显示加1,获取的时候,需要减1province_id=province_input-1#城市列表city=list(zone[province[province_id]].keys())#进入市区列表whileTrue:print('市'.center(20,'*'))forjincity:print('{}\t{}'.format(city.index(j)+1,j))city_input=input("请输入市编号,或输入b(back)返回上级菜单,或输入q(quit)退出:").strip()ifcity_input.isdigit():city_input=int(city_input)ifcity_input>0andcity_input<=len(city):passelse:print('市编号{}不存在!'.format(city_input))else:print('输入市编号非法!')#退出省循环breakelse:print('省编号{}不存在!'.format(province_input))elifprovince_input.upper()=='Q':breakelse:print('输入省编号非法!')执行输出:

完成输入b返回上一级菜单功能

这里需要调整一下输出省列表的位置,删除多余的breck。还有输入q退出。

进入县级,打印县列表,并提示输入框。这里不能再输入数字了,直接提示返回或者退出

判断县输入的内容。这里直接判断是否输入的是b或者q。其他的直接提示,已经到底线了。

修改错误提示为红色字体,最终完整代码如下:

#小数据池#数字小数据池的范围-5~256#字符串中如果有特殊字符他们的内存地址就不一样#字符串中单个*20以内他们的内存地址一样,单个*21以上内存地址不一致#黑框框==终端#a='alex@'#a1='alex@'#print(aisa1)#Fales#n=5//2#n1=2#print(nisn1)#True#a='a'*21#b='a'*21#print(aisb)#a='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'#b='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'#print(aisb)#n=-6#n1=-6#print(nisn1)#False#n=-5#n1=-5#print(nisn1)#True#n=257#n1=257#print(nisn1)#True

THE END
1.于谦回应自己的三大爱好,抽烟喝酒烫头发!烫头是因为头发少于谦回应自己的三大爱好,抽烟 喝酒 烫头发!烫头是因为头发少花心老奶奶 山东 3 打开网易新闻 体验效果更佳德云社观众神级接话名场面 滑稽斑马呀 1014跟贴 打开APP 助眠相声:《我要当流氓》郭德纲 于谦 你今天快乐吗 8跟贴 打开APP 爆笑相声:《试卷有毒》郭德纲 于谦 你今天快乐吗 6跟贴 打开APP 德云搭茬https://m.163.com/v/video/VEVMUBK4E.html
2.毛不易抽烟喝酒纹身“三项全能”,就不配发歌?毛不易发文,不理解有人说他抽烟、喝酒、纹身,就不配唱歌、发歌。是的,我也不理解,因为这之间没什么逻辑。①抽烟、喝酒、纹身 这三个习惯是大家普遍定义的陋习,对于这些,有人能做到不排斥就很好了,毕竟谁也找不到任何有力的理由去鼓励任何人做这些事。很少有妹子喜欢抽烟的男生,不喝酒的也不理解好饮之人https://baijiahao.baidu.com/s?id=1656306070523965993&wfr=spider&for=pc
3.抽烟喝酒烫头是什么意思?梗的含义:抽烟喝酒烫头,该梗说的是于谦老师,这三点可谓时于谦老师的人生三大爱好。每次在于谦和郭德纲的相声中,这几个词几乎都是避免不https://henan.china.com/m/news/ms/2022/1223/2530332853.html
4.我抽烟喝酒烫头,但我知道我是个好女孩!对Flapper女郎来说,我开的不是车,而是寂寞。 “快乐至死”,这不正是Flapper女郎的精神吗? 其实说了这么多,Flapper女孩们追求的,也不过是“抽烟、喝酒、烫头”的自由生活。 当然,如果你想要更进一步:抽烟、喝酒、文身,我也相信你绝对还是个好女孩!https://www.douban.com/note/602002510/
5.抽烟喝酒烫头,到底有什么危害当然,大家都知道经常吸烟和喝酒对我们都有着很大的伤害,今天我们就聊一聊着烟和酒对我们到底有着多大的伤害。 据哈尔滨慈宁医院专家多年临床了解,吸一支烟后心率每分钟增加5-20次/分钟,收缩压增加10-20mmhg。因为烟叶中含有尼古丁会兴奋我们的中枢神经和交感神经,使心率加快,同时也会促进肾上腺释放大量儿茶酚胺,使小https://www.jianshu.com/p/a34918e79d78
6.抽烟喝酒烫头图片抽烟喝酒烫头动态图SOOGIF为您提供抽烟喝酒烫头动图大全,这里可以找到全部的抽烟喝酒烫头gif动态图片,以及抽烟喝酒烫头动图表情包供您下载使用,本次SOOGIF共为您找到108380张关于抽烟喝酒烫头的动图内容。https://www.soogif.com/gif/1056131-2737-0-0.html
7.谦儿大爷,赑屃是‘bixi’哦雍和宫的卷毛,抽烟烫头不喝酒 2023-09-27 19:15:0025:5126.8万 所属专辑:谦道3·人间松弛 | 于谦的“大谦世界” | 郭德纲&于谦 | 德云社“夫妻”档 6元开会员,免费听 购买| 199喜点 喜欢下载分享 下载手机APP 7天免费畅听10万本会员专辑 当前评论用户 https://www.ximalaya.com/sound/669430600/719656323
8.李现对自己评价最像“柴犬”!称不开心的时候会抽烟喝酒烫头称不开心的时候会抽烟喝酒烫头 首页 频道 搜索热搜榜 开通会员 客户端 看过 收藏 消息 您的Flash插件已过期或被禁止 升级或启用Flash 李现对自己评价最像“柴犬”!称不开心的时候会抽烟喝酒烫头 李现对自己评价最像“柴犬”!称不开心的时候会抽烟喝酒烫头https://v.pptv.com/show/aeEVnQVr2xl8ibmI.html
9.转:在年少的时候,人们会认为抽烟喝酒烫头纹身甚至退学是很酷转:在年少的时候,人们会认为抽烟、喝酒、烫头、纹身甚至退学是很酷的事情,其实那不过是相当平常的事情,只是浮于表面的叛逆。而真正的叛逆是需要勇气和独立人格的,远非炫酷可以实现的。年轻时的激进派是最容易转变为保守主义的,反倒是那些在年轻时温和沉稳的人会在之后的道路上更为坚持自我。 https://xueqiu.com/6410129477/131121059?page=1
10.不抽烟不喝酒也不烫头的鱼谦点了湄公鱼可爱又迷人的反派角色 2019年8月4日 关注 打分 ¥80/人 口味:4.0 环境:5.0 服务:4.0 食材:5.0 不抽烟不喝酒也不烫头的鱼谦 点了湄公鱼要了双拼口味 一边是不容易踩雷的麻辣 一边是怪味 说到底怪味其实就是菠萝麻辣口味 上面零星的一点菠萝 里面是酸辣的 湄公鱼是物美价廉的代表了 鱼肉很嫩 刺不多 两边鱼https://m.dianping.com/review/590516297