字典是没有顺序的可变序列,他通常都是成对储存,每个元素都有键值对,通过键对象可以找到值对象,键对象是任意不可变对象且不能重复,例如元组,字符串,而值对象可以是任意对象而且可以重复。例:a={'name':'txy','age':'23'}中,name和age就是键对象而txy和123则是值对象
既可以用于列表也可以用于字典,用途是对多个变量进行赋值。在对字典进行序列解包时,默认是对键进行操作,对键值对操作需要用代码items(),对值进行操作需要用代码values().
r1={"品牌":"大众","车型":"SUV","价位":400000,"颜色":"黑色"}
r2={"品牌":"奔驰","车型":"轿车","价位":500000,"颜色":"银色"}
r3={"品牌":"保时捷","车型":"跑车","价位":1200000,"颜色":"红色"}
tb=[r1,r2,r3]
#获得第二行车的颜色
print(tb[1].get("颜色"))
#打印所有价位
for i in range(len(tb)): #i-->0,1,2
print(tb[i].get("价位"))
#打印所有的数据
for i in range (len(tb)):
print(tb[i].get("品牌"),tb[i].get("车型"),tb[i].get("价位"),tb[i].get("颜色"))
字典中存在许多空白的元素数组,数组的单元叫做bucket,bucket有两个部分,一个是键对象的引用,一个是值对象的引用,可以使用偏移量来访问bucket。
将键值对放入字典的核心过程就是将键放入字典中的索引数字。
先将键变成一个hash值通过hash("name"),在用过bin可以查看其二进制数。如果目标字典的数组值为8,则可以使用最右边三位来找到其对应的索引数字,若是空的则降值放进去,若不是空的则再向左平移三位来确定索引值,直到值被放入,若三分之二的位置满了,则数组会进行扩容。
第一步还是和放入的流程一样先将需要的值的键进行hash再通过bin()得到其索引值,若数组对应的索引值为空,则返回None,若不为空则去除这个数组的键,计算其数列值,若相同则说明找到了,若不相同则项佐平移三个继续计算比较。
总结:
集合是元素可变,元素不能重复,集合的底层结构和字典相同,只包含字典的键对象
集合可以通过使用交集(a&b),并集(a|b),差集(a-b)来获得新的集合
选择结构:选择结构分为单分支结构,双分支结构,多分支结构
单分支结构:通常是if语句,条件表达式可以是逻辑,算术和关系。语句块注意要缩进
条件表达式的值为False的情况有一下几种:False,0,空序列,空迭代,空range对象 除以上情况其他都是True
其外条件表达式中不能有赋值操作
双分支结构:采用if,else语句。
三元条件运算符:条件为真时的值 if(条件表达式) else 条件为假时的值 Print "s小于10"if int (s) <10 else “s大于10”
多分支选择结构:由多个条件表达式组成, 表达式之间必须要有逻辑关系。elif=else if
测试平面象限中点的位置代码:
#测试点在坐标轴的位置
x= int(input("请输出横轴坐标:"))
y= int(input("请输出纵轴坐标:"))
if(x==0 and y==0):
print("这个点是在原点上")
elif (x==0):
print("这个点在x轴上")
elif(y==0):
print("这个点在y轴上")
elif(x>0 and y>0):
print("这个点在第一象限")
elif(x>0 and y<0):
print("这个点在第四象限")
elif(x<0 and y<0):
print("这个点在第三象限")
else:
print("这个点在第二象限")
选择结构的嵌套:在一个选择结构中再加入一个选择结构,需要注意缩进量来区别不同的选择结构
#选择结构嵌套
score=int(input("请输入一个0-100的数字:"))
num=0
degree="ABCDE"
if score>100 or score<0:
score = int(input("请输入一个0-100的数字:"))
else:
num=score//10
if num<6:
num=5
print("分数是{0},成绩是{1}".format(score,degree[9-num]))
while循环结构:循环体中一定需要改变条件表达式的语句
#计算1-100之间的数字的累加和
num=0
sum=0
while num<=100:
sum=sum+num
num+=1
print("1-100之间的累加和为:",sum)