算数运算符:


Py2中精确除法需要导入:from __future__ import division, py3不需要导入

赋值运算符:


比较运算符:


成员运算符:


逻辑运算符(布尔运算符):


身份运算符:


内存的读写速度比硬盘要快,3.0里面二进制和字符型必须严格区分

python一行最多输80个字符

多线程可以并行运算

单线程串行执行

位运算符: 


 

六个标准的数据类型:


一般字符串执行一个功能,生成一个新的内容,原来内容不变,只要是被修改那就相当于再创建一个
list,tuple,dict,执行一个功能,自身进行变化

  • Number(数字)


    • Python3 支持 int、float、bool、complex   在python2中没有布尔类型,   0表示False,  1表示True

空(None):一个特殊的值,用None表示。None不能理解为0,因为0是有意义的

布尔类型(Boolean):一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了__nonzero__()或__len__()方法且方法返回0或False,则其实例也被当作False,其他对象均为True

布尔值还可以用and、or和not运算。

1)and运算是与运算,只有所有都为True,and运算结果才是True:

2)or运算是或运算,只要其中有一个为True,or运算结果就是True:

3)not运算是非运算,它是一个单目运算符,把True变成False,False变成True:

整型(Int):分为普通整数和长整数,普通整数长度为机器位长,32位系统是31位,64位系统是63位,py3中全是长整数。超过这个范围的整数就自动当长整数处理,而长整数的范围几乎完全没限制

浮点型(Float):在运算中,整数与浮点数运算的结果是浮点数,整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

> a, b, c, d = 20, 5.5, True, 4+3j >>> print(type(a), type(b), type(c), type(d)) <class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

>>> 5 + 4 # 加法 9 >>> 4.3 - 2 # 减法 2.3 >>> 3 * 7 # 乘法 21 >>> 2 / 4 # 除法,得到一个浮点数 0.5 >>> 2 // 4 # 除法,得到一个整数 0 >>> 17 % 3 # 取余 2 >>> 2 ** 5 # 乘方 32

  • str(字符串)


用单引号(')或双引号(")括起来,反斜杠可以用来转义特殊字符,使用r可以让反斜杠不发生转义。

索引值从左往右以0开始,从右往左以-1开始。

加号 (+) 是字符串的连接符, 星号 (*) 表示复制当前字符串,紧跟的数字为 复制的次数

字符串是不可以修改的,修改了等于生成了一个新的内存数据

字符串(String):字符串是以''或""括起来的任意文本,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\。换多行用'''...'''的格式表示多行内容

str = 'Runoob' print (str) # 输出字符串 print (str[0:-1]) # 输出第一个个到倒数第二个的所有字符 print (str[0]) # 输出字符串第一个字符 print (str[2:5]) # 输出从第三个开始到第五个的字符 print (str[2:]) # 输出从第三个开始的后的所有字符 print (str * 2) # 输出字符串两次 print (str + "TEST") # 连接字符串

print('Ru\noob') # 反斜杠(\)可以作为续行符,表示下一行是上一行的延续 Ru oob print(r'Ru\noob') # 加r表示原始字符串 Ru\noob

  • List(列表)


List写在方括号之间,元素用逗号隔开,列表:可变元素的数据集合

列表(List):用符号[]表示列表,中间的元素可以是任何类型,用逗号分隔

list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]

tinylist = [123, 'runoob'] print (list) # 输出完整列表 print (list[0]) # 输出列表第一个元素 print (list[1:3]) # 从第二个开始输出到第三个元素 print (list[2:]) # 输出从第三个元素开始的所有元素 print (tinylist * 2) # 输出两次列表 print (list + tinylist) # 连接列表 以上实例输出结果: ['abcd', 786, 2.23, 'runoob', 70.2] abcd [786, 2.23] [2.23, 'runoob', 70.2] [123, 'runoob', 123, 'runoob'] ['abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob'] 与Python字符串不一样的是,列表中的元素是可以改变的: a = [1, 2, 3, 4, 5, 6] a[0] = 9 a[2:5] = [13, 14, 15] a [9, 2, 13, 14, 15, 6] a[2:5] = [] # 删除 a [9, 2, 6]

  • Tuple(元组)


元组(tuple)与列表类似,不同之处在于元组的元素不能增删改只能切片查,所以也叫只读列表。元组写在小括号(())里,元素之间用逗号隔开

tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2 )

tinytuple = (123, 'runoob') print (tuple) # 输出完整元组 print (tuple[0]) # 输出元组的第一个元素 print (tuple[1:3]) # 输出从第二个元素开始到第三个元素 print (tuple[2:]) # 输出从第三个元素开始的所有元素 print (tinytuple * 2) # 输出两次元组 print (tuple + tinytuple) # 连接元组 以上实例输出结果: ('abcd', 786, 2.23, 'runoob', 70.2) abcd (786, 2.23) (2.23, 'runoob', 70.2) (123, 'runoob', 123, 'runoob') ('abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob')

  • Sets(集合)


集合(set)是一个无序不重复元素的序列。

基本功能是进行成员关系测试和删除重复元素。

可以使用大括号({})或者 set()函数创建集合,注意:创建一个空集合必须 用 set() 而不是 { },因为 { } 是用来创建一个空字典。也可以使用列表,元祖做为参数

  1. 去重,把一个列表变成集合,就自动去重
  2. 关系测试,测试两组数据之间的交集,差集,并集等关系

student = set("Tom")

print(student) # 输出集合,重复的元素被自动去掉

# 成员测试

if('T' in student) :

print('T 在集合中')

else :

print('T 不在集合中')

# set可以进行集合运算

a = set('abc')

b = set('abcd')

print(a)

print(a - b) # a和b的差集

print(a | b) # a和b的并集

print(a & b) # a和b的交集

print(a ^ b) # a和b中不同时存在的元素

  • Dictionary(字典)


字典(dictionary)内置数据类型,"{ }"标识

列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

它是一个无序的键(key) : 值(value)对集合,键(key)必须使用不可变类型。

在同一个字典中,键(key)必须是唯一的。

dict = {} dict['one'] = "1 - 菜鸟教程" dict[2] = "2 - 菜鸟工具" tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'} print (dict['one']) # 输出键为 'one' 的值 print (dict[2]) # 输出键为 2 的值 print (tinydict) # 输出完整的字典 print (tinydict.keys()) # 输出所有键 print (tinydict.values()) # 输出所有值

Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠(\)来实现多行语句,在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(\)例如:

aaa='1231231' \

'3131'

print (aaa)

print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=""

# 不换行输出 print( x, end=" " ) print( y, end=" " ) print()

字符串操作
name='my \tname is {name} and i am {year} old' print(name.capitalize())#首字母大写,
print(name.count('a'))#统计a的数量
print(name.center(50,'-'))#打印50个字符不够使用-
print(name.encode)#转换二进制
print(name.endswith('chao'))#以什么结尾,
print(name.expandtabs(tabsize=30))#转换多少个空格,字符串上必须加 ‘\t’
print(name[name.find('name'):9])#切片9之前的所有字符
print(name.format(name='zhangchao',year=29))#格式化,与下语句输出一致,原字符串必须增加name,year
print(name.format_map({'name':'zhangchao','year':''}))#格式化,与上语句输出一致
print('ab123'.isalnum())#包含字母数字,
print('aB'.isalpha())#包含大小写英文,
print(''.isdecimal())#10进制
print(''.isdigit())#是否整数,
print('A'.isidentifier())#判断是否为合法的变量名,
print('a'.islower())#判断是否小写 ,
print('A'.isupper())#判断是否大写,
print(''.isnumeric())#判断是否是数字,必须整数 ,
print(' '.isspace())#判断是否是空格 ,
print('My Name Is '.istitle())#判断每个首字母大写
print('My Name Is' .isprintable())#判断打印字符串,tty设备 file,drive file 无法打印
print('+'.join(['','','','']))#可以使用+号逗号隔开字符串, 连接 参加
print(name.ljust(50,'*'))#长度50不够用*号补充,字符串在左边 ,
print(name.rjust(50,'-'))#长度50不够用-号补充,字符串在右边
print('Alex'.lower())#所有改为小写,
print('Alex'.upper())#所有改为大写,
print('\nAlex'.lstrip())# 去掉左边的空格和回车,
print('Alex\n'.rstrip())# 去掉右边的空格和回车,
print(' Alex\n'.strip())# 去掉空格和回车,
print('---')
p = str.maketrans('abcdef','')#转换的意思
print("xiaaaaa".translate(p))#将对应的字母翻译成数字,
print('alex li'.replace('a','A',1))#将第一个小写a改成大写A,
print('alex li'.rfind('l'))#返回最右边的值下标
print('alex lil'.split())#以空格分割为字符串,
print('1+2+3+4'.split('+'))#以+号分割字符串
print('1+2\n+3+4'.splitlines())#以\n为分隔符
print('Alex Li'.swapcase())#大写转小写,小写转大写,
print('alex li'.title())#首字母大写
print('lex li'.zfill(50))#50字符不够用0填充左边
字符串无参数创建空字符串,一个参数创建普通字符串,两个参数,int(字节,编码)
字符串格式化
name='''
name='zhangchao'
name2=name
print('my name is',name , name2)
name='wangchao'
print (name)
'''
print (name) Name=input('name:')
Age=int(input('age:'))
print(type(Age), type(str(Age)))
Job=input('job:')
Salary=input('salary:')
# %s(字符串的占位符,全部类型都可以接收),字符串里面有占位符时必须使用两个%%才能表示一个%号.
# .format(字符串格式化方法,使格式化的意思)
# 3个引号连接打印的意思
# %d只能接收整数数字
# %f 接收小数,如不是小数也不会报错,会自动在末尾加小数
info='''
----------info of %s------
Name:%s
Age:%s
Job:%s
Salary:%s
'''%(Name,Name,Age,Job,Salary)
print(info) name = "Tom"
print ("Hello %s" % name)#打印格式化字符串,把name变量的内容替换到%s处 info2='''
----------info of {_Name}------
Name:{_Name}
Age:{_Age}
Job:{_Job}
Salary:{_Salary}
'''.format(_Name=Name,
_Age=Age,
_Job=Job,
_Salary=Salary)
print(info2) info3='''
----------info of {0}------
Name:{0}
Age:{1}
Job:{2}
Salary:{3}
'''.format(Name,Age,Job,Salary)
print(info3) s = 'i am %(n1)s age %(n2)d '% {'n1':'zc','n2':19}#给位置设置名字
print(s) s = 'i am %.3f sfsasas' % 1.2
print(s)#保留小数,打印1.200 class foo(object):#面向对象里面的自动调用
def __str__(self):
return 'aaa'
def __repr__(self):
return 'bbb'
s = 'i am %s, age %d' % (foo(),18)
s = 'i am %r, age %d' % (foo(),18)
print(s)#输出aaa,输出bbb s = 'i am %c' % (6)
print(s)#输出i am ,转化为uncode码 s = 'i am %o %x' % (6,15)#整数转为8进制,16进制
print(s) s = 'i am %e ' % (6)#转为科学计数法
print(s) format格式化:
tpl = "i am {}, age {}, {}".format("seven", 18, 'alex')
print(tpl)#输出i am seven, age 18, alex
tpl = "i am {}, age {}, {}".format(*["seven", 18, 'alex'])
print(tpl)#输出i am seven, age 18, alex
tpl = "i am {0}, age {1}, really {0}".format("seven", 18)
print(tpl)#输出i am seven, age 18, really seven
tpl = "i am {0}, age {1}, really {0}".format(*["seven", 18])
print(tpl)#输出i am seven, age 18, really seven
tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18)
print(tpl)#输出i am seven, age 18, really seven
tpl = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18})
print(tpl)#输出i am seven, age 18, really seven
tpl = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33])
print(tpl)#输出i am 1, age 2, really 3
tpl = "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1)
print(tpl)#输出i am seven, age 18, money 88888.100000
tpl = "i am {:s}, age {:d}".format(*["seven", 18])
print(tpl)#输出i am seven, age 18
tpl = "i am {name:s}, age {age:d}".format(name="seven", age=18)
print(tpl)#输出i am seven, age 18
tpl = "i am {name:s}, age {age:d}".format(**{"name": "seven", "age": 18})
print(tpl)#输出i am seven, age 18
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
print(tpl)#输出numbers: 1111,17,15,f,F, 1587.623000%
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
print(tpl)#输出numbers: 1111,17,15,f,F, 1587.623000%
tpl = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)
print(tpl)#输出numbers: 1111,17,15,f,F, 1500.000000%
tpl = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15)
print(tpl)#输出numbers: 1111,17,15,f,F, 1500.000000%
字典操作
字典的的索引就是它的键,无法切片,循环默认输出为key
info={
'':'',
'':'',
'':'',
}
print(info)#打印字典
print(info.get(''))#建议安全的查找方法,有,返回,没有,为none
print(info.get('',''))#若1不存在将显示1111
print (info[''])#查找,有查找,没有报错
print(''in info)#python3查找有返回为真,意思与下相同
#print(info.has_key('1'))#Python2查找,意思与上相同
info['']='张超'#修改字典
info['']='张超'#修改,没有的话添加
#del #python内置通用删除方法,
del info ['']#删除
info.pop('')#删除
info.popitem()#随机删除 av_catlog = {
"欧美":{
"www.youporn.com": ["很多","一般"],
"www.pornhub.com": ["也很大","质量"],
"letmedothistoyou.com": ["多是自拍"],
"x-art.com":["很高,请绕过"]
},
"日韩":{
"tokyo-hot":["不清楚,"]
},
"大陆":{
"":["全部","慢"]
}
}
av_catlog['大陆'][''][1]='快'#修改字典的多级菜单
av_catlog.setdefault('大',{'www.1.com':[1,2]})#在整个字典中取‘大’能取到就返回,无法取到键就创建新的, print (av_catlog) dict = { 1 : 2, 'a' : 'b', 'hello' : 'world' }
print (dict.values())#返回所有值
print (dict.keys())##返回所有键
print (dict.items())#遍历整个字典列表并字典转换列表 info ={
1:2,
2:3,
'nihao':'buhao'
}
b={
'n':'Aluex',
1:2,
2:3
}
info.update(b)#合并两个字典,没有重复值就加进去,有重复就覆盖
print(info) c=dict.fromkeys([3,4,5],[1,{'name':1},1])#中括号是key,对应取所有同一值,初始化一个字典
print (c) c[3][1]['name']='张超'#修改字典,因三个key共享一个内存地址,如果有多层会全部更改
print(c) for i in a:
print (i,a[i])#字典循环使用这种更高效 for k,v in a.items():#字典循环,数据量大非常慢,会将字典转换为列表耗时
print(k,v)
#字典创建
a={'k1':'v1'}
a=dict(k2=123,k3=234)
print(a) li=[11,22,33]
new=dict(enumerate(li,10))
print(new)
列表操作(切片/增删改查)
m=['zc',['zc1','zc2',['zc3']]]#列表嵌套,解析
def printm(listin):
for i in listin:
if isinstance(i,list):#(判断某个对象是否是某个类创建的),例子
printm(i)
else:
print (i)
printm(m) names=['zhangchao','zhnagyang','zhangpan']#列表
names.append('lichao') #append 追加列表值
names.insert(1,'wangchao')#插入列表值,在哪个位置插入加位置序号
names[1]='liuchao'# 改列表中序号1的值
names.remove('liuchao')#删除列表中的值
del names[1]#删除列表中的值
names.pop()#删除列表中的最后一个值
del names[1]=names.pop(1)# 效果相等
print(names.index('huchao'))#查找到位置序号
print( names[names.index('huchao')])#查找到
print(names.count('huchao'))#计数
names.reverse()#反转,头尾反转,
names.clear()#清空列表
names.sort()#按照ASSIC码排序
names.extend(names2)#扩展,合并另一个列表 ,
print(names[:3])=print(names[0:3])#效果相等
print(names[-2:])#切片倒数1,2值
print(names[0:3])#切片0,1,2值,顾头不顾尾
print(names[-3:-1])#切片倒数2,3值

  

列表使用(浅深copy)


浅拷贝:没有拷贝子对象,所以原始数据改变,子对象会改变,只拷贝最外层,用处:创建联合账号,A改动B也跟着

深拷贝:包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变,独立的copy一份,在内存中将所有数据重新创建一份最后一层除了字符串和数字。,

深浅拷贝都是对源对象的复制,占用不同的内存空间。

1,    切片可以应用于:列表、元组、字符串,但不能应用于字典。

2,    深浅拷贝,既可应用序列(列表、元组、字符串),也可应用字典。

3,    Str,int深浅拷贝都一样

import copy #导入深copy模块
names=['zhang1','zhang2','zhang3',['nihao','nihao2'],'zhang4','zhang5']
names2 = copy.deepcopy(names) #将names列表复制一份赋值names2 ,深copy,(深copy需要导入copy模块deepcopy函数)
names2=names.copy() # 将names列表复制一份赋值names2 ,是浅copy(浅copy不用导模块)
names[3][0] = 'NIHAO' #修改列表中嵌套列表的值
print (names[0:-1:2]) #打印列表全部,步长值2(偶数执行全部),
print (names[::2]) #打印列表全部,步长值2
print (names[:]) #打印列表全部
for i in names:
print (i) # 列表for循环 person=['names',['a',100],'张超']
p1=copy.copy(person)#第一种浅copy
p2=person[:]#第二种浅copy
p3=list(person)#第三种浅copy,格式工厂

元祖操作:


#创建元祖
t=(1,2,3,'zc')
t=tuple((1,2,3,'zc'))
t=tuple([])#嵌套字符串,列表,字典 #元祖嵌套(内在元素不可修改,但元素的元素可能可以修改,如嵌套的是其它类型就可修改)
t=('zc',11,['张超',{'k1':11}])
t[2][1]['k2']=22#第一种追加方法
print(t) t[2][1].update({'k3':111})#第二种追加方法
print(t)

enumerate:


range:


py2中是:xrange,

除能被自身和1整除外不能被其他数整除的数,比如13,只能被1和13整除,其他数都不能整除它,所以13就是一个质数(素数), .质数只外的数称为合数。
集合操作set
无序且不重复的集合, 基本功能包括关系测试和消除重复元素
创建空集合两种方式:S=set() , s={11,222,11,222} s={} 默认类型为字典
集合转换:l=[11,11,22], l=(11,44,44),l='',print(set(l))
list_1=[1,2,3,45,3]
list_1=set(list_1) list_2=set([1,2,3,45,54,66])
print (list_1,list_2,type(list_1)) print(list_1.intersection(list_2))#交集,(交接,),两个都存在的取出来
print(list_1.intersection_update(list_2))#取交集把自己也更新成交集
print(list_1.union(list_2))#并集,(结合),两个表合并去重
print(list_1.difference(list_2))#差集,(差异)1里面有2里面没有的取出来,以1为主
print(list_2.difference(list_1))#差集,(差异)2里面有1里面没有的取出来,以2为主
print(list_1.difference_update(list_2))# 1里面有2里面没有的取出来,以1为主
更新自己,为None
list_3 = set([1,2,3])
list_4 = set([4,5,6,2])
print(list_1.issubset(list_2))#子集(一部分,)
print(list_1.issuperset(list_2))#父集(超集)
print(list_3.issubset(list_1))#子集
print(list_1.issuperset(list_3))#父集
print(list_1.symmetric_difference(list_2))#对称差集,(相称的,)取出两个列表中互相都没有的,放在一起
print(list_1.symmetric_difference_update(list_2))# 取出两个列表中互相都没有的,更新给自己
print('-------')
print (list_3.isdisjoint(list_4))# 没有交集(不相交的,)两个列表没有交集返回True,有交集返回False #关系测试符号
print (list_1 & list_2)#交集
print (list_1 | list_2)#并集
print (list_1 - list_2)#差集
print (list_1 ^ list_2)#对称差集 list_1.add(999)#增加单个集合
list_1.update([1,12,223,34]#多个集合,给list_1增加
#list_1.remove(1)#删除list_1中的1,如果不存在将报错
#print (list_1.pop())#随机删除
#print (list_1.discard(2222))#删除,(抛弃,)不存在也不会报错,执行完不返回
print (list_1)
练习:
old_dict={
'#1':11,
'#2':22,
'#3':100,}
new_dict={'#1':33,
'#4':22,
'#7':100,}
old_keys=old_dict.keys()
new_keys=new_dict.keys()
old_set=set(old_keys)
new_set=set(new_keys)
del_set=old_set.difference(new_set)
print(del_set)
add_set=new_set.difference(old_set)
print(add_set)
update_set=old_set.intersection(new_set)
print(update_set)

三目运算,三元运算/进制:


name='zc' if 1==1 else 'zc0'
print(name)

作业:


assert_all=0 #(资产)
li=input('请输入总资产:')
assert_all=int(li)
goods=[
{'name':'电脑','price':1999},
{'name':'鼠标','price':10},
{'name':'游艇','price':20},
{'name':'美女','price':998},]
for i in goods:
print(i['name'],i['price'])
car_dict={}
while True:
i2=input('请选择商品(Y/y结算):')
if i2.lower()=='y':
break
for item in goods:
if item['name']==i2:
name=item['name']
if name in car_dict.keys():
car_dict[name]['number']=car_dict[name]['number']+1
else:
car_dict[name]={'number':1,'single_price':item['price']}
print(car_dict)
all_price=0#总价
for k,v in car_dict.items():
n=v['single_price']
m=v['number']
all_sum=m*n
all_price=all_price+all_sum
if all_price>assert_all:
print('你个穷逼这点钱毛的买不到')
else:
print('你是大款购买成功了') product_list = [ #产品
('iphone',6000),
('mac pro',10000),
('bike',800),
('watch',12000),
('coffee',30),
('zhangchao',29),
]
shopping_list = []#定义空列表,存取商品
salary = input('input your salary:')#输入工资
if salary.isdigit():#判断工资是不是十进制数字,计算机用二进制,生活中用十进制
salary = int(salary)#如果是数字,给成整型
while True:#进入死循环
for index, item in enumerate(product_list):#取出下标,列举,
#print(product_list.index(item),item)取下标
print(index,item)#打印商品列表
user_choice = input('选择要买什么:')#输入要买的东西,选择,
if user_choice.isdigit():#判断用户输入的是不是数字类型
user_choice =int(user_choice)#如果是数字,转成整型
if user_choice < len(product_list) and user_choice >=0:#判断用户选择商品序号长度小于列表长度并且大于等0
p_item = product_list[user_choice]#通过下标把商品取出来
if p_item[1] <=salary:#判断是否买的起,如果小于当前工资就买的起
shopping_list.append(p_item)#能买的起添加到商品列表中
salary -= p_item[1]#扣钱
print('Added %s into shopping cart,your current balance is \033[31;1m%s\033[0m' %(p_item,salary) )#买的起打印这句话,
else:
print('\33[41;1m你的余额只剩下[%s]啦,\33[0m'% salary)#买不起打印
else:
print ('product code [%s] is not exist'% user_choice)#输入的商品序号不存在
elif user_choice=='q':#如果是q就打印已经买的东西
print ('----shopping_list------')#打印已经输出的列表
for p in shopping_list:
print(p)
print ('you current balance',salary)#打印剩下的余额
exit()#退出
else:
print('invalid option')#如果不是q打印错误选项(invalid,无效,)(option,选项,)
else:
print ('invalid option')#开始输入的不是数字打印
data = {
'北京':{
'朝阳':{'群众':['大妈','大爷'],'群众1':['大妈1','大爷1']},
'天安门':{'国旗':{'旗杆','旗台'},'国旗1':{'旗杆1','旗台1'}},},
'山东':{'德州':{},},
'广东':{'东莞':{},}}
exit_flag = False #退出标识(flag标识. exit退出,)
while not exit_flag:#首先开始循环,not False 为True
for i in data:#打印第一级
print(i) choice = input('选择进入:')
if choice in data:#判断是不是在字典里
while not exit_flag:#在字典里面继续循环
for i2 in data[choice]:#打印第二层
print ('\t',i2)
choice2 = input('选择进入:')
if choice2 in data[choice]:#判断是不是在字典里
while not exit_flag:#在字典里面继续循环
for i3 in data[choice][choice2]: # 打印第三层
print('\t\t', i3)
choice3 = input('选择进入:')
if choice3 in data[choice][choice2]:##判断是不是在字典里
for i4 in data[choice][choice2][choice3]:# 打印第四层
print('\t\t',i4)
choice4 = input('最后一层,按b返回:')
if choice4 =='b':#返回上一层
pass#占位,代码不出错,会返回本层while循环
elif choice4 =='q':#判断是否退出
exit_flag = True#如果退出 exit_flag=True
if choice3 =='b':
break
elif choice3 == 'q':
exit_flag = True
if choice2 == 'b':
break
elif choice2 == 'q':
exit_flag = True
else:
print('输入不存在')
exit()
if choice == 'b':
break
elif choice == 'q':
exit_flag = True
 

python运算符,数据类型,数据类型操作,三目运算,深浅拷贝的更多相关文章

  1. Python【集合】、【函数】、【三目运算】、【lambda】、【文件操作】

    set集合: •集合的创建; set_1 = set() #方法一 set_1 = {''} #方法二 •set是无序,不重复的集合; set_1 = {'k1','k2','k3'} set_1.a ...

  2. python函数,lambda表达式,三目运算,列表解析,递归

    一.自定义函数 定义函数时,函数体不执行:只有在调用函数时,函数体才执行.函数的结构: 1. def 2. 函数名 3. 函数体 def func_name(): 函数体 4. 返回值 如果没有声明返 ...

  3. Python学习日记(五)——初识函数(set、深浅拷贝、三目运算、函数、全局变量和局部变量)

    基本数据类型补充 set set集合,是一个无序且不重复的元素集合 #创建 s = {11,22,33,44}#类似字典 s = set() #转换 l = (11,22,33,44) s1 = se ...

  4. 【Python全栈笔记】03 [模块二] 16-17 Oct Set 集合,三目运算

    Set 集合 set - unordered collections of unique elements 创建一个set/一个空set # create a new set set1 = {1,2, ...

  5. js switch判断 三目运算 while 及 属性操作

    三 目运算:如var a = 10: var b= 12: c = a>b ?a:b; 若成立执行a否则执行b var isHide = true; 若用if判断语句如下 if(isHide) ...

  6. python中实现三目运算

    python中没有其他语言中的三元表达式,不过有类似的实现方法 如: a = 1 b =2 k = 3 if a>b else 4 上面的代码就是python中实现三目运算的一个小demo, 如 ...

  7. python 三目运算

    python中的三目运算: result = a if condition else b #当满足condition返回a否则返回b 三目运算可以使你的代码看起来简洁,且运算高效

  8. Python—三目运算

    Python 可通过 if 语句来实现三目运算的功能,因此可以近似地把这种 if 语句当成三目运算符.作为三目运算符的 if 语句的语法格式如下: (True_statements) if (expr ...

  9. python自动化测试之函数(匿名函数lambda和三目运算等(高级用法))

    ''' 匿名函数: lambda ''' def Add(a,b): print(a+b) Add(2,3) per = lambda a,b:a+b print(per(2,3)) ''' 三目运算 ...

随机推荐

  1. 【Java虚拟机】浅谈Java虚拟机

    跨平台 Java的一大特性是跨平台,而Java是如何做到跨平台的呢? 主要依赖Java虚拟机,具体来说,是Java虚拟机在各平台上的实现. Java虚拟机在不同的平台有不同的实现.同一份字节码,通过运 ...

  2. Java多线程系列——信号量:Semaphore

    简介 信号量为多线程协作提供了更为强大的控制方法.也可以说,信号量是对锁的扩展.无论是内部锁 synchronized 还是重入锁 ReentrantLock,一次都只允许一个线程访问一个资源,而信号 ...

  3. Java知多少(5) Java开发环境的搭建

    要进行Java开发,首先要安装JDK(Java Development Kit,Java开发工具箱). JDK 是一系列工具的集合,这些工具是编译Java源码.运行Java程序所必需的,例如JVM.基 ...

  4. Git 目录

    linux通过用户名.密码提交的方式搭建私有git服务端 centos 6.5 6.6 6.7安装gitlab教程(社区版) Git 初始化项目.创建合并分支.回滚等常用方法总结 Git 错误集锦

  5. 面向对象方法的重载(overloading)和覆盖(overriding)。

      在有些JAVA书籍中将overriding称为重载,overloading称为过载. Overloading在一个类中可以定义多个同名方法,各个方法的参数表一定不同.但修饰词可能相同,返回值也可能 ...

  6. 怎样从Javaproject师成长为架构师?

      工作1-5年.当我们向老板提出加薪的时候,或者跳槽去"捡"offer的时候.我们底气够吗? 敢不敢不给涨薪就"挥一挥衣袖.不带走一个bug"?是不是提出要求 ...

  7. Android实现电话录音功能

    需求分析 电话录音是在通话的时候进行录音,所以需要使用一个服务来完成功能. 需要监听电话的状态,分为三种状态:  空闲状态 TelephonyManager.CALL_STATE_IDLE 响铃状态 ...

  8. 转:【WebView的cookie机制 】轻松搞定WebView cookie同步问题

    原文链接:http://blog.csdn.net/fengyuzhengfan/article/details/51517622 在进行APP+H5混合开发的时候,一些功能是用native方法实现的 ...

  9. swoole web服务

    web.php <?php $http = ); $http->on('request', function ($request, $response) { var_dump($reque ...

  10. [Python] 00 - Books

    A.I. & Optimization Advanced Machine Learning, Data Mining, and Online Advertising Services Ref: ...