python基础,字典,集合,控制语句

一,字典
1,定义:字典为键值对的无序可变序列,分为键对象与值对象。其中,键对象为不可变数据(整数,浮点数,字符串,元组),键不可重复。
提醒:在列表中,我们根据下标数字来找对应的对象,在字典中我们通过键寻找值

2,字典的创建
(1),{}或者dict()创建。如下:

a={'name':'lhy','age':18}
>>> a
{'name': 'lhy', 'age': 18}
>>> b=dict(name='lhy',age=18)
>>> b
{'name': 'lhy', 'age': 18}
>>> c=dict([('name','lhy'),('age',18)])
>>> c
{'name': 'lhy', 'age': 18}

注意:第二种方法中,键不需要交双引号。
(2)zip()函数建立
如下:

 d=[1,2,3]
>>> e=[4,5,6]
>>> f=dict(zip(d,e))
>>> f
{1: 4, 2: 5, 3: 6}
>>> 

注:zip方法用来生成元组,这里是将元组转化为字典,类似于上面的第三种方法
(3)通过fromkeys()创建值为空的字典

q=dict.fromkeys([1,2,3])
>>> q
{1: None, 2: None, 3: None}

3,字典的访问
(1)直接访问:a[键]
(2)get()
(3)列出所有的键值对:a.items()
列出所有的键:a.keys()
列出所有的值:a.values()
(4)len()键值对个数
(5) 检测一个键是否存在。in
代码 如下:

 a
{'name': 'lhy', 'age': 18}
>>> a['name']
'lhy'
>>> a.get('name')
'lhy'
>>> a.get('1')
>>> print(a.get('1'))
None
>>> a.items()
dict_items([('name', 'lhy'), ('age', 18)])
>>> a.keys()
dict_keys(['name', 'age'])
>>> a.values()
dict_values(['lhy', 18])
>>> len(a)
2
>>> 'name'in a
True
>>> '1'in a
False
>>> 

4,字典元素的增加修改和删除
(1)直接添加,若键已存在则覆盖旧的键
(2)用update()将两个字典合并为一个
(3)del()删除指定键值对
(4)clear()删除所有键值对
(5)pop()删除指定键值对,并返回对应值对象
(6)popitem()随机删除键值对并返回(因为字典无序,所以随机删除)
代码如下:

> a
{'name': 'lhy', 'age': 18}
>>> b
{'name': 'lll', 'x': '2'}
>>> a.update(b)
>>> a
{'name': 'lll', 'age': 18, 'x': '2'}
>>> a['c']='3'
>>> a
{'name': 'lll', 'age': 18, 'x': '2', 'c': '3'}
>>> del(a['c'])
>>> a
{'name': 'lll', 'age': 18, 'x': '2'}
>>> a.pop('x')
'2'
>>> a.popitem()
('age', 18)
>>> a
{'name': 'lll'}

5,序列解包
代码如下:

c
{'name': 'lhy', 'age': 18}
>>> a,b=c
>>> a
'name'
>>> b
'age'
>>> a,b=c.items()
>>> a
('name', 'lhy')
>>> b
('age', 18)
>>> a,b=c.values()
>>> a
'lhy'
>>> b
18
>>> 

6,字典的核心底层原理
注意:键必须可散列(数字,字符串,元组)
自定义对象需要支持(1)hash()函数
(2)通过__eq__()检测相等性
(3)若a==b为真,则hash(a)==hash(b)为真
不要边遍历字典边修改字典,因为往字典中添加新键可能导致扩容,从而改变键值对次序。

二 ,集合
1,集合为无序可变序列,元素不可重复。集合底层是字典实现的,集合中的元素即为键对象。
2 ,创建与删除
(1)用{}创建
(2)用add()添加
(3)用set()将其他可迭代对象转化为集合
(4)remove()删除指定元素
(5)clear()清空整个集合
代码如下:

 a={1,2,3}
>>> a.add(4)
>>> a
{1, 2, 3, 4}
>>> a.remove(4)
>>> a
{1, 2, 3}
>>> a.clear()
>>> a
set()
>>> 

3,集合相关操作
(1)并集:a|b 或a.union(b)
(2)交集:a&b 或a.intersection(b)
(3)差集:a-b 或a.difference(b)

三,选择结构
1,单分支结构:if 条件表达式:
语句/语句块
注意:input()输出为字符串。可加以int()转化为整数
条件表达式中视为False的情况:0,0.0,none,False,空序列对象,空range对象,空迭代对象。其他情况均视为True。并且其中不能有赋值=。

2,双分支结构: if 条件表达式:
语句/语句块
else:
语句块2
三元条件运算符:条件为真返回值 if 条件表达式 else 条件为假返回值
注意,都用空格隔开。不加:

3,多分支选择结构: if 条件表达式:
语句/语句块
elif:
语句块2

4,while循环要注意:内部语句中要可以改变条件表达式的 条件 ,不然构成死循环。

四,练习
1,输入点的座标(x,y),判断点在第几象限。

x=int(input('请输入x:'))
y=int(input('请输入y:'))
if x==0 and y==0 :
    print('这个点为原点')
else :
    if x==0 or y==0:
        print('这个点在座标轴')
    elif x>0 and y>0:
        print('这个点在第一象限')
    elif x>0 and y<0 :
        print('这个点在第四象限')
    elif x<0 and y>0 :
        print('这个点在第二象限')
    else:
        print('这个点在第三象限')

2,计算0到10数字的和

i=0
sum=0
while i<=10 :
    sum+=i
    i+=1
print(sum)

3,输入一个成绩,要求当小于60分为E,60到70为D,70到80为C
80到90为B,90到100为A

score=int(input('请输入一个0到100的成绩:'))
while score<0 or score >100 :
    score = int(input(',输入错误,请重新输入一个0到100的成绩:'))
degree=['A','B','C','D','E']
i=0
if (score//10)<6 :
    i=5
else :
    i=score//10
print('成绩为{0},等级为{1}'.format(score,degree[9-i]))

该方法比较简便,第二种用if选择来实现

score=int(input('请输入一个0到100的成绩:'))
while score<0 or score >100 :
    score = int(input(',输入错误,请重新输入一个0到100的成绩:'))
grade=''
if score>89 :
    grade='A'
elif score>79 :
    grade='B'
elif score>69:
    grade='C'
elif score>59 :
    grade='D'
else :
    grade='E'
print('成绩为{0},等级为{1}'.format(score,grade))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章