Python基础学习(五)--短路逻辑,三元表达式,嵌套循环,字典,集合

一、昨天的补充内容

(一)逻辑运算符

and or not

stu=True
if not stu:
    print('你不是学生')
else:
    print('是学生,可以进学校')

结果:
是学生,可以进学校
这里需要特别注意的是and 和 or都有短路效应
a=5
b=a>7 or 4
print(b)    # 4
a=5
b=a>3 or 7
print(b)    # True

根据上述代码的结果可总结出’or’的短路效应:
x or y
如果x不成立,返回y的值
如果x成立,返回x的值

a=6
b=a>7 and 5
print(b)    # False

根据上述代码的结果可总结出’and’的短路效应:
x and y
如果x不成立,返回x的值
如果x成立,返回y的值

(二)三元表达式

形如a=…if…else…
满足if条件,值为前面的值
不满足则为后面的值

b=11
a=7 if b>10 else 8
print(a)    #7
b=11
a=7 if b>10 else 8
print(a)    #8

(三)嵌套循环

1.输出一个’5*5’的由’*'组成的矩阵
j=1
while j<=5:
    i=1
    while i<=5:
        print('*',end='')
        i+=1
    print()
    j+=1
2.输出一个由’*'组成的正三角
for i in range(1,6):
    for j in range(1,i+1):
        print('*',end='')
    print()
3.输出一个由’*'组成的倒三角
for i in range(1,6):
    for j in range(i):
        print('',end=' ')
    for j in range(1,6-i+1):
        print('*',end='')
    print()
4. '9*9’乘法表
for j in range(1,10):
    for i in range(1,j+1):
        print(i,'*',j,'=',i*j,end='\t')
    print()
5. 输出一个由’*'组成的5*5的边框
for i in range(1,6):
    for j in range(1,6):
        if i==1 or i==5 or j==1 or j==5:
            print('*',end='')
        else:
            print(' ',end='')
    print()

二、字典

字典是以键值对形式存在的,无序,可修改

(一)添加操作

1.以a[‘score’]=99的形式添加,会根据key判断。若不存在,添加;若存在,覆盖。
a={'name':'张三','age':19,'sex':'男'}
a['score']=99
print(a)    # {'name': '张三', 'age': 19, 'sex': '男', 'score': 99}
a['age']=18
print(a)    # {'name': '张三', 'age': 18, 'sex': '男', 'score': 99}
2.setdefault()方法–添加。若存在,将不进行任何操作;若不存在,添加。
a={'name':'张三','age':19,'sex':'男'}
a.setdefault('age',20)
print(a)    # {'name': '张三', 'age': 19, 'sex': '男'}
a.setdefault('score',90)
print(a)    # {'name': '张三', 'age': 19, 'sex': '男', 'score': 90}

(二)删除操作

1.pop()方法–弹出指定键对应的值
注意:这里的pop()方法不同于前面介绍的,它在字典中使用时,要求必须有参数。它的返回值为字典中的value
a={'name':'张三','age':19,'sex':'男'}
b=a.pop('name')
print(b)    # 张三
print(a)    # {'age': 19, 'sex': '男'}
2.popitem()方法–随机弹出一个键值元组,随机是因为字典是无序的
注意:随机!!键值!!元组!!
a={'name':'张三','age':19,'sex':'男'}
b=a.popitem()
print(b)    # ('sex', '男')
print(a)    # {'name': '张三', 'age': 19}
3.clear()–清空
a={'name':'张三','age':19,'sex':'男'}
a.clear()
print(a)    # {}
4.del–可删除字典中一个键值对,也可删除整个字典
a={'name':'张三','age':19,'sex':'男'}
del a['name']
print(a)    # {'age': 19, 'sex': '男'}
del a
print(a)    # 报错 字典a不存在

(三)查找操作

1.keys()–返回所有key,列表类型
a={'name':'张三','age':19,'sex':'男'}
print(a.keys())    # dict_keys(['name', 'age', 'sex'])
for i in a.keys():
    print(i)
2.values()–返回所有value,列表类型
a={'name':'张三','age':19,'sex':'男'}
print(a.values())    # dict_values(['张三', 19, '男'])
for v in a.values():
    print(v)
3.items()–返回所有键值对,元组类型
a={'name':'张三','age':19,'sex':'男'}
print(a.items())    # dict_items([('name', '张三'), ('age', 19), ('sex', '男')])
for kv in a.items():
    print(kv)
    “““
	('name', '张三')
	('age', 19)
	('sex', '男')
    ”””
for k,v in a.items():
    print(k,v)
    “““
    name 张三
	age 19
	sex 男
    ”””
4.len()–返回键值对个数
a={'name':'张三','age':19,'sex':'男'}
print(len(a))    # 3
5.get()–以键取值。若指定键不存在,默认返回None,可指定返回值。
info={'name':'张三','age':19,'sex':'男'}
name=info.get('name')
print(name)    # 张三
a=info.get('a')
print(a)    # None
a=info.get('a','不存在')
print(a)   # 不存在

(四)修改操作

update()–以字典形式更新指定字典的内容

如果键不存在,创建;如果不存在,覆盖。

a={'name':'张三','age':19,'sex':'男'}
b={'name':'李四','score':89}
a.update(b)
print(a)    # {'name': '李四', 'age': 19, 'sex': '男', 'score': 89}

(五)其他常见操作

a={‘name’:‘张三’,‘age’:19,‘sex’:‘男’}
in a/not in a–判断指定的键是否存在字典当中,与值无关。
要判断值是否存在可用in a.values()
in a功能与in a.keys()相同,但不可完全划等号
a={'name':'张三','age':19,'sex':'男'}
if 'name' in a:
    print('有姓名')
if 'score' not in a:
    print('没有成绩')
if '张三' in a:    # 不成立
    print('张三在里面')
键重复时,后面的会覆盖前面的
a={'name':'张三','age':19,'sex':'男','age':99}
print(a)    # {'name': '张三', 'age': 99, 'sex': '男'}

扩展

1.类型转换
字典–>内含元组的列表
内含元组的列表–>字典

a={'name':'张三','age':19,'sex':'男'}
b=[]
c={}
for k,v in a.items():
    b.append((k,v))
print(b)    # [('name', '张三'), ('age', 19), ('sex', '男')]

for x in b:
    y,z=x
    c[y]=z
print(c)    # {'name': '张三', 'age': 19, 'sex': '男'}

2.以’num:001,name=张三,age:18,sex:男’的格式打印

a={
    '001':{'name':'张三','age':18,'sex':'男'},
    '002':{'name':'李四','age':28,'sex':'男'},
    '003':{'name':'王五','age':38,'sex':'女'},
    '004':{'name':'赵四','age':48,'sex':'男'},
}
# 1
for x,y in a.items():
    print('num:%s'%x,end=' ')
    for k,v in y.items():
        print('%s:%s'%(k,v),end=' ')
    print()
    
# 2
for k1 in a.keys():
    print('num:%s'%k1,end=' ')
    for k2 in a[k1].keys():
        print('%s:%s' % (k2, a[k1][k2]), end=' ')
    print()

结果:
num:001 name:张三 age:18 sex:男 
num:002 name:李四 age:28 sex:男 
num:003 name:王五 age:38 sex:女 
num:004 name:赵四 age:48 sex:

3.给所有性别为男的添加1000元工资

for k,v in a.items():
    if v['sex']=='男':
        v['salary']=1000
    print(k,':',v)
    
结果:
001 : {'name': '张三', 'age': 18, 'sex': '男', 'salary': 1000}
002 : {'name': '李四', 'age': 28, 'sex': '男', 'salary': 1000}
003 : {'name': '王五', 'age': 38, 'sex': '女'}
004 : {'name': '赵四', 'age': 48, 'sex': '男', 'salary': 1000}

三、集合

特点:唯一,无序,可修改
值唯一:
a={1,2,3,3,3,3,3}
print(a)    # 自动去重,{1, 2, 3
无序:
a={1,2,3,3,3,3,3}
print(a[1])    # 报错,不支持索引,无序

(一)定义空集合只能用set()

b={}    # 空字典
print(type(b))    # <class 'dict'>
b=set()
print(type(b))    # <class 'set'>

(二)添加操作

1.add()–添加
注:重复时不进行任何操作
a={1,2,3,3,3,3,3}
print(a)    # {1, 2, 3}
a.add(9)
print(a)    # {1, 2, 3, 9}
a.add(9)
print(a)    # {1, 2, 3, 9}
2.set()
a=[1,2,3]
b=set(a)
print(b)    # 转换为集合 {1, 2, 3}
a='1234'
b=set(a)
print(b)    # {'2', '1', '4', '3'},顺序不定,同样是因为集合无序

b={'name':'张三','age':19}
a=set(b)
print(a)    # {'age', 'name'},只有键没有值
3.update()–添加,不重复
a={1,2,3,4}
a.update([1,2,5,6])
print(a)    # {1, 2, 3, 4, 5, 6}
4.顺序遍历
a={1,2,3,4}
for x in a:
    print(x)
    
结果:
1
2
3
4

(三)删除操作

1.pop()–随机弹出一个
a={1,2,3,4}
b=a.pop()
print(b)
print(a)
2.remove()–移除指定值
a={10,20,30,40}
a.remove(20)
print(a)    # {40, 10, 30}
3.clear()–清空
a={10,20,30,40}
a.clear()
print(a)    # set(),空集合
4.del–删除整个集合
a={1,2,3,4}
del a
print(a)    # 报错,a不存在

(四)集合数学运算

1.交集–’&'或intersection(),取公共部分
a={1,2,3,4}
b={3,4,5,6}
c=a.intersection(b)
print(c)    # {3, 4}
d=a&b
print(d)    # {3, 4}
2.差集–’-'或different
a={1,2,3,4}
b={3,4,5,6}
c=a-b
print(c)    # {1, 2}
c=b-a
print(c)    # {5, 6}
3.反交集–’^'或symmetric_difference()
a={1,2,3,4}
b={3,4,5,6}
c=a^b
print(c)    # {1, 2, 5, 6}
c=a.symmetric_difference(b)
print(c)    # {1, 2, 5, 6}

扩展

求出a中每个元素的个数:

a=[1,2,3,1,2,3,1,1,3,3,3,3]
b=set()
for i in set(a):
    b.add(i)
for n in b:
    print(n,'出现的次数为:',a.count(n))

结果:
1 出现的次数为: 4
2 出现的次数为: 2
3 出现的次数为: 6
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值