☰
【AI产品经理实战】Day 26|Python 学习记录:位运算收尾 + 三元运算符 + 优先级实战 + 列表字典学完# (小白笔记版)
2026/10/1 3:01:40 网站建设 项目流程

| 进度条:学习第 27 天(27/191)|当前完成度:23% |

📎今日速览:位运算和三元运算符收尾,优先级实战4题全对,系统复习列表并开坑字典。


一、今日任务(完成+收获)

任务原文:学完位运算符和三元运算符,做运算符优先级实战,系统过一遍列表,并开坑字典。

任务项实际完成状态
位运算与三元运算符位运算符(&、、^、<<、>>),5 大分类正式集齐
优先级实战4道题全对,理清(10+3)*2**2等计算顺序✅ 完成
列表复习列表:索引、切片、增删改、操作符、函数&方法,并完成自测小练习⚠️ 部分完成
字典基础知识学完结构、访问、增改、删除、键的特性,外加内置函数 & 12 个常用方法,还做了"字典合并"小测试⚠️ 部分完成
列表与字典练习 10 题用"列表 + 字典"写了一个购物价格小项目(能跑通)⚠️ 部分完成

🖼️【图1:今日产出截图 —— 敲的列表代码】


二、位运算符(第 5 类,正式收尾)

基础:计算机只认二进制,1 byte(字节)= 8 个 bit(位),满 2 进 1。bin(3) 可以看数字的二进制长相。

运算符名称规则(每一位对比)示例
&按位与都为 1 才是 13 & 5 = 001 = 1
按位或有 1 就是 1(全 0 才是 0)
^按位异或不同才是 1,相同为 03 ^ 5 = 110 =6
<<左移向左移 n 位,右边补 0a << n 等于 a * 2^n
>>右移向右移 n 位,左边补符号位(正补 0、负补 1)a >> n 等于 a // 2^n

记忆口诀(笔记红字版,很准):& 都为 1 = 1;| 都为 0 = 0;^ 不同 = 1。

大白话:把两个数字并排看成两串灯泡,一位一位地比。& 是"两个都亮才算亮",| 是"有一个亮就算亮",^ 是"俩灯不一样才算亮"。

⚠️ 移位是"乘除 2 的快捷键":5 << 1 = 10(乘 2),10 >> 1 = 5(整除 2)。


三、三元运算符 if else

  • 作用:把简单的 if-else 缩成一行,根据条件从两个值里挑一个。
  • Python没有? :写法(那是 C/Java 的),直接用 if else 关键词。
# max = a if 条件 else b:条件成立取 a,不成立取 bmax1=aifa>belseb# 三数求最大值:先比 a、b,赢家再和 c 比max2=(aifa>belseb)if(aifa>belseb)>celsec

四、运算符优先级(从高到低)

() 圆括号 → ** 乘方 → * / % // 乘除 → + - 加减 → >> << 位运算 → & → ^ → | → 比较运算(>= <= < > == !=)→ not → and → or → 赋值(= += -= %=…)

大白话:先算括号,再乘方,再乘除,再加减;逻辑里 not 最急、and 次之、or 最后;赋值永远是最后一步"装回去"。

4 道练习题(全对 ✅):

  1. (10+3) * 2 ** 2→ (10+3)=13 → 2²=4 → 13*4 =52
  2. 10 + 3 * 2 ** 2→ 2²=4 → 3*4=12 → 10+12 =22
  3. x=5, y=10:x*2 < y and y+5 > x*3→ 10<10=False,15>15=False → False and False =False
  4. x=10, y=5:not x > y and y < x or x >= 10→ x>y=True → not→False → and 短路得 False → or True =True

五、列表(已学完)

1. 序列是什么

序列是 Python 最基本的数据结构,每个值都有对应的位置编号,这就是索引:第 1 个索引是 0,第 2 个是 1,依次类推。Python 内置 7 种序列类型(列表、元组、字符串、字节串、字节数组、范围),最常见的是列表和元组。

列表 4 个特性:①最常用的数据类型;②数据项不需要相同类型;③方括号 + 逗号隔开就能创建;④索引从 0 开始,可截取、组合。

2. 索引访问

L[2]取第 3 个(正数从 0 数),L[-2]取倒数第 2 个(负数从 -1 数)。

3. 切片 [start🔚step](返回新列表,不动原列表)

  • start 起始索引(包含),默认 0
  • end 结束索引(不包含),默认列表长度
  • step 步长,默认 1,可为负数(从后往前取)

切片的 4 个好处(笔记总结):①操作返回新列表,原列表不受影响;②索引越界自动调整范围不报错;③参数灵活,可省略用默认值;④支持负索引倒数着取。

L=['Google','Runoob','Taobao']L[2]# 'Taobao'L[-2]# 'Runoob'L[1:]# ['Runoob', 'Taobao']

⚠️ "越界安全"只对切片成立:L[1:100]自动截断不报错;直接索引L[100]会报 IndexError,别混。

4. 增、删、改

lst=[]lst.append('Google')# 末尾加单个lst.extend(['orange','grape'])# 末尾加多个lst.insert(1,'blueberry')# 指定位置插入dellst[2]# 按索引删lst.pop()# 删最后一个并返回该值(也可传索引)lst.remove('grape')# 删第一个匹配的值lst.clear()# 清空

记忆:append 单个、extend 一串、insert 插队;删人三兄弟del 按位置、pop 带回执、remove 按名字。

5. 列表操作符

[1,2,3] + [4,5,6]组合;['Hi!'] * 4重复;3 in [1,2,3]判断成员 → True;for x in [1,2,3]迭代。

6. 常用函数(len / max / min / list)

  • len(list)元素个数;max(list)最大值;min(list)最小值;list(seq)把元组转列表。
  • ⚠️cmp(list1, list2)是Python 2 的函数,Python 3 已经删了,别学它,比较大小直接用比较运算符。

7. 常用方法 9 个

append 加、count 数次数、extend 扩一串、index 找位置、insert 插、pop 删+返回、remove 删第一个匹配、reverse 反转、sort 排序(默认从小到大,reverse=True 降序)。

8. 自测小练习(附答案)

nums=[1,4,5,2,3,8,9,10,6,7]print(nums)# 打印列表print(sum(nums))# 总和 55print(max(nums),min(nums))# 最大 10 最小 1print(sorted(nums))# 升序print(sorted(nums,reverse=True))# 降序nums.reverse()# 反转

六、字典(今天学完)

1. 结构与规矩

  • 结构:dict = {key1: value1, key2: value2},键值对用冒号分隔、对与对之间用逗号、整体包在花括号里。
  • 规矩:键一般唯一(重复时后面的键值对会替换前面的),值不需要唯一;值可以随便类型,键必须不可变(字符串、数字、元组)。
  • ⚠️ 变量名别叫dict——那是 Python 内置类型名,变量名不建议占用。
  • 比喻:列表像"带编号的排队队伍",字典像"带标签的调料架"——不看位置,报名字直接拿。

2. 访问、增改、删除

tinydict={'Name':'Zara','Age':7,'Class':'First'}print(tinydict['Name'])# Zara(键放进方括号)tinydict['Age']=8# 更新已有的键tinydict['School']='RUNOOB'# 键不存在 → 新增deltinydict['Name']# 删单条tinydict.clear()# 清空所有条目deltinydict# 整个字典删掉

3. 内置函数(4 个能用的)

函数描述
len(dict)计算字典键的总数
str(dict)输出字典可打印的字符串表示
type(variable)返回变量类型,是字典就返回 dict
cmp(d1, d2)⚠️ Python 2 的函数,Python 3 已移除,别学

4. 常用方法 12 个

clear 清空、copy 浅复制、fromkeys(seq[,value]) 用序列建新字典、get(key, default=None)取值(键不存在不报错)、has_key(key)(Python 3 已移除,改用key in dict)、items() 返回可遍历的(键,值)对、keys() 取所有键、setdefault(key, default)和 get 类似但键不存在时会新增、update(dict2) 把另一个字典的键值对更新进来、values() 取所有值、pop(key[,default])删掉指定键并返回它的值、popitem()返回并删除最后一对键值。

⭐ 重点记 3 个:

  • get是"安全取值":d['不存在的键']直接报 KeyError,d.get('不存在的键')只返回 None——想避免报错中断,用 get。
  • setdefault vs get:get 只取不改;setdefault 键不存在时会把键和默认值写进字典。
  • update就是"字典合并"的工具。

5. 小测试:合并两个学生字典(重复成绩相加)

dict_student={"Alice":90,"Bob":85,"Charlie":78}dict_student_other={"Bob":15,"Charlie":92,"David":88}merged=dict(dict_student)# 先复制一份,不动原字典forname,scoreindict_student_other.items():merged[name]=merged.get(name,0)+score# 重复的学生成绩相加print(merged)# {'Alice': 90, 'Bob': 100, 'Charlie': 170, 'David': 88}

这里merged.get(name, 0)的妙处:名字没出现过就从 0 开始加,出现过就在原成绩上续——get 的 default 参数刚好派上用场。

七、综合小项目:购物价格单(列表 + 字典合体)

列表负责"排队"(顺序),字典负责"贴标签"(名称→价格),两个合起来就能干实事了:

# 1. 用列表遍历水果,带编号打印fruits=["苹果","香蕉","橘子"]i=1forfruitinfruits:print("第"+str(i)+"个: "+fruit)i=i+1# 2. 用字典管价格:改、增、删price={"牛奶":5,"面包":3,"鸡蛋":2}price["鸡蛋"]=2.5# 改price["橙子"]=4# 增delprice["牛奶"]# 删print(price)# {'面包': 3, '鸡蛋': 2.5, '橙子': 4}# 3. 遍历字典打印价格(迭代字典默认拿到的是键)price2={"牛奶":5,"面包":3,"鸡蛋":2}fornameinprice2:print(name+"的价格是 "+str(price2[name])+" 元")# 4. 列表套字典:一张"省钱订单表",列表排顺序,字典存明细records=[{"名称":"牛奶","原价":6,"实际":5},{"名称":"鸡蛋","原价":3,"实际":2.5},]foriteminrecords:saved=item["原价"]-item["实际"]print(item["名称"]+" 省了 "+str(saved)+" 元")

小升级(学完字典方法后可以换的写法):

# 迭代字典更优雅的写法:items() 同时拿键和值forname,pinprice2.items():print(name,"的价格是",p,"元")# 拼字符串也可以用 f-string,不用到处 str()print(f"第1个:{fruits[0]}")

八、纠错清单

昨天笔记的 6 处(已改):位运算 | 和 ^ 例子写反、print “xxx” 是 Python 2 语法、变量名叫 list 且前后不一致、cmp 已被 Python 3 移除、"异域运算"→异或运算、三元 print(max) 变量名对不上。

今天新笔记的 4 处(发布前注意):

  1. cmp(dict1, dict2) 又出现了:字典内置函数表里第一条就是它,Python 3 已移除,直接删掉。
  2. [dict.dear()] 是拼写错误:应为dict.clear()(清空),dear 是"亲爱的"😄。
  3. print “tinydict[‘Name’]” 还是 Python 2 语法:字典访问示例里再次出现,Python 3 必须加括号print("tinydict['Name']:", tinydict['Name'])。
  4. for x in [1,2,3]: print x 同理:列表操作符示例里的 print x 也是 Python 2 写法,要加括号。

✅ 今天笔记里对的地方:has_key 你自己红笔标了"Python3 不支持"(完全正确);键不可变(字符串/数字/元组)、重复键后面覆盖前面、pop(key, default) 和 popitem() 的描述都准确。

九、可运行练习代码(可直接复制)

# 1. 位运算a,c=5,10print(a<<1,bin(a<<1))# 10 0b1010(左移=乘2)print(c>>1,bin(c>>1))# 5 0b101(右移=整除2)print(3&5)# 1print(3|5)# 7(或:有1就是1)print(3^5)# 6(异或:不同才是1)# 2. 三元运算符a,b,c=100,20,50max1=aifa>belseb max2=cifc>max1elsemax1print("最大值:",max2)# 100# 3. 优先级验证print((10+3)*2**2)# 52print(10+3*2**2)# 22# 4. 列表完整操作lst=['physics','chemistry',1997,2000]print(lst[0])# physicsprint(lst[-2])# 1997print(lst[1:3])# ['chemistry', 1997]lst.append('Google')lst.extend(['orange','grape'])lst.insert(1,'blueberry')print(lst)dellst[2]print(lst)print(len(lst),max([1,4,5,2,3]),min([1,4,5,2,3]))# 5. 字典基本操作tinydict={'Name':'Zara','Age':7,'Class':'First'}print(tinydict['Name'])# Zaraprint(tinydict.get('Phone'))# None(键不存在也不报错)tinydict['Age']=8# 更新tinydict['School']='RUNOOB'# 新增print(tinydict)print(len(tinydict),tinydict.keys(),tinydict.values())# 6. 字典方法:pop / popitem / update / setdefaultd={'x':1,'y':2,'z':3}print(d.pop('x'))# 1(删掉并返回)print(d.setdefault('w',0))# 0(不存在则新增)d.update({'y':99})# 更新print(d,d.popitem())# popitem 弹出最后一对# 7. 字典合并小测试(重复成绩相加)dict_student={"Alice":90,"Bob":85,"Charlie":78}dict_student_other={"Bob":15,"Charlie":92,"David":88}merged=dict(dict_student)forname,scoreindict_student_other.items():merged[name]=merged.get(name,0)+scoreprint(merged)# {'Alice': 90, 'Bob': 100, 'Charlie': 170, 'David': 88}# 8. 购物小项目(列表 + 字典合体)records=[{"名称":"牛奶","原价":6,"实际":5},{"名称":"鸡蛋","原价":3,"实际":2.5},]foriteminrecords:saved=item["原价"]-item["实际"]print(item["名称"]+" 省了 "+str(saved)+" 元")

四、小结和下一步计划

小结:

  • 两天一句话:位运算按位比(& 全 1、| 有 1、^ 不同),三元一行挑一个,优先级括号最大;列表排队编号拿,字典贴标签按名取——列表套字典,就能记账省钱。

  • 下一步:不急着看懂更深的代码,先补编程思维(怎么把问题拆成步骤)、Markdown 语法(就是你现在写博客用的这套排版语言)和技能名称(把工具叫对名字),地基打牢再往上盖。


📌 3 行速记

  • 做了:位运算收官,优先级实战,列表+字典学完,10 题练习 + 购物小项目。
  • 学会:位运算口诀,切片越界不报错,三元运算符,列表套字典记账。
  • 记住:get(key, 0) 防 KeyError,字典键必须不可变,0/空值算"假"。

我是卿卿,一个正在自学 AI 知识的小白,一个转行学 AI 的小白。这是「AI产品经理191天通关计划」的 Day 26,目标很简单:每天留下一份能回头看懂的笔记。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询