ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

03 变量与数据类型:给数据贴标签(数字 · 字符串 · 布尔 · type())

03 变量与数据类型:给数据贴标签(数字 · 字符串 · 布尔 · type()) 点击查看本专栏介绍上一篇02 你的第一行代码让电脑听你的print · 三种运行方式 · 读懂报错上篇练习参考答案练习 3故意制造报错的三段式参考把第 4 行的print改成prnt后运行按三段式读错误类型最后一行NameError: name prnt is not defined——“prnt 这个名字不存在”位置报错上半段File d:/Desktop/python学习/我的名片.py, line 4——第 4 行修改prnt→print重新运行通过。练习 4七层星星树参考代码print( *)print( ***)print( *****)print( *******)print( *********)print( ***********)print( *************)规律每往下多一层前面少一个空格、多两个星号。一、场景引入程序的世界里全是数据前两篇我们让电脑说话但说的是我们亲手敲进去的死内容。从这一篇开始电脑要开始算账了。程序的世界里只有一样东西数据。你的名字是数据时薪是数据是否超过 300 元也是数据。而程序做的事本质就是存下数据 → 加工数据 → 输出结果。今天解决第一步数据怎么存。答案就是变量——本篇结尾你会做出上面那张加班费小票改几个数字小票自动重算。二、本篇目标会定义变量、给变量起合法且专业的名字分得清 Python 四大基础数据类型整数、浮点数、字符串、布尔值会用type()查看类型、会做类型转换。三、知识点讲解3.1 变量给数据贴标签的盒子第 2 篇我们直接print(星宇Py)数据用完即弃。现在把数据存起来想用几次用几次name星宇Py这一行叫赋值。读法是把右边的星宇Py存进一个盒子盒子上贴的标签是name。等号不是相等是把右边的东西放进左边的盒子。之后提到标签就能取出盒里的东西name星宇Py# 等号不是相等是把右边的东西放进左边的盒子这存一次之后用多少次都行print(name)# 星宇Py第一次使用print(name)# 星宇Py第二次使用name小王# name盒子还是那个name盒子只是把里面的东西替换了从装 星宇Py 换为装 小王print(name)# 小王更换盒子的内容后我们再次取出就是新内容变量命名四条规则前三条违反直接报错第四条是职业素养只能含字母、数字、下划线且不能以数字开头hour_1合法1_hour报错区分大小写name和Name是两个不同的变量分别赋予name和Name不同值互不影响不能用 Python 保留字print、if、for这类有特殊含义的词会导致官方方法变为你指定的内容而失效 见名知义a 50三天后你自己都忘了是什么 50hourly_pay 50一眼看懂是时薪。多个单词用下划线连接全小写——这是 Python 社区的通用风格。3.2 数字int整数与 float浮点数Python 里数字分两种整数 int50、0、-3——没有小数点浮点数 float1.5、3.14——带小数点。七种运算符一次学全print(103)# 13 加print(10-3)# 7 减print(10*3)# 30 乘print(10/3)# 3.3333333333333335 除结果永远是浮点数print(10//3)# 3 整除丢掉小数部分print(10%3)# 1 取余数10 除以 3 余 1print(10**2)# 100 乘方10 的 2 次方后三个现在看着冷门以后遍地是用途%取余可以判断这个数是不是偶数n % 2 0、可以算每 7 天一个周期//整除可以把分钟换算成小时。算钱的人必须知道的浮点数陷阱print(0.10.2)输出不是0.3而是0.30000000000000004。这不是 bug是所有编程语言共有的浮点数精度问题电脑用二进制表示小数天然存不准。日常影响不大但算钱展示结果时用round()四舍五入一下print(round(0.10.2,2))# 0.3保留 2 位小数补充这明明说是保留 2 位小数但为什么结果为0.3呢因为直接 print 一个浮点数时Python 默认输出最简洁的表示形式会自动省略末尾多余的零0.3 和 0.30 在数值上完全相等round 只负责四舍五入到指定小数位不负责显示格式如果你希望强制保留两位小数即输出 “0.30”需要使用字符串格式化print(f{0.1 0.2:.2f})记住凡是要打印给老板看的金额先 round 再 print。3.3 字符串 str装文字的盒子第 2 篇的老朋友。凡是用引号单双都行包起来的无论里面是字、是数字还是空都是字符串a18# 这是字符串不是数字b18# 这才是数字18和18长得一样、类型不同——这是新手埋坑榜第一名3.5 节和第六节报错区会反复收拾它。3.4 布尔值 bool程序的是非观只有两个值True真和False假首字母必须大写。它来自比较print(10060)# Trueprint(10060)# False本篇最重要的一个提醒是赋值把右边放进左边是比较左右两边是否相等。现在看不出大区别第 7 篇学条件判断后写错这两个符号会导致完全不同的后果。从今天养成手指记忆一个等号是给两个等号是问。3.5 type() 与类型转换验明正身按需变身type()——查看任何数据的类型print(type(18))# class intprint(type(1.5))# class floatprint(type(18))# class strprint(type(True))# class bool电脑不告诉我们类型时比如以后从 Excel 读数据type()是唯一可靠的鉴定手段。类型转换——让数据变身int()、float()、str()是三台变身机age18# 字符串不能直接参与算术print(int(age)1)# 19先变成整数再运算print(str(18)岁)# 18岁数字变字符串才能和文字拼接print(float(3.5)*2)# 7.0什么时候需要变身记住一条数字和字符串天生语言不通——算数学用数字做拼接用字符串跨界前必须变身。四、完整实战加班费小算盘场景公司加班有倍率平时 1.5 倍、周末 2 倍想算算这个月加班费多少。新建加班费小算盘.py也可直接点击此链接下载加班费小算盘.py# 加班费小算盘 # 基础数据改成你自己的name星宇Py# 姓名字符串hourly_pay50# 基本时薪整数weekday_hours3# 平时加班小时数整数weekend_hours4# 周末加班小时数整数weekday_rate1.5# 平时加班倍数浮点数weekend_rate2.0# 周末加班倍数浮点数# 计算weekday_payhourly_pay*weekday_hours*weekday_rate weekend_payhourly_pay*weekend_hours*weekend_rate totalweekday_payweekend_pay# 打印小票print(*40)print(f{name}的加班费小票)print(-*40)print(f基本时薪{hourly_pay}元/小时)print(f平时加班{weekday_hours}小时 x{weekday_rate}倍 {weekday_pay}元)print(f周末加班{weekend_hours}小时 x{weekend_rate}倍 {weekend_pay}元)print(-*40)print(f合计加班费{total}元)print(f四舍五入到角{round(total,1)}元)print(*40)# 顺手体检各数据的类型print()print(各数据的类型)print(fname 的类型{type(name)})print(fhourly_pay 的类型{type(hourly_pay)})print(fweekday_rate 的类型{type(weekday_rate)})print(ftotal 超过 300 元吗{total300})注意print(f...)里那个f它让引号里的{name}变成取出 name 盒子里的内容。这叫 f-string第 4 篇正式拆解今天照用即可——你已经不是第一次见它了01 篇体检报告里就有。体会一下变量的威力把weekend_hours从 4 改成 8重跑整张小票自动重算。数据和处理逻辑分离——这就是程序和手工计算的分水岭。五、运行效果 星宇Py 的加班费小票 ---------------------------------------- 基本时薪50 元/小时 平时加班3 小时 x 1.5 倍 225.0 元 周末加班4 小时 x 2.0 倍 400.0 元 ---------------------------------------- 合计加班费625.0 元 四舍五入到角625.0 元 各数据的类型 name 的类型class str hourly_pay 的类型class int weekday_rate 的类型class float total 超过 300 元吗True四种类型在这张输出里聚齐了名字是 str、时薪是 int、倍率是 float、最后那问是 bool。六、常见报错与排查报错 1TypeError: can only concatenate str (not int) to str本篇头号坑print(年龄 18) TypeError: can only concatenate str (not int) to str原因两边类型不同——字符串只会和字符串拼接不会和数字相加。解决把数字变身成字符串print(年龄 str(18))或用 f-stringprint(f年龄{18})后者是本专栏推荐写法。报错 2SyntaxError: invalid decimal literal变量名以数字开头1_hour 50 SyntaxError: invalid decimal literal解决数字挪到后面hour_1 50。同理my-name 50也不行——横线在 Python 里有减号含义要连接单词用下划线my_name。报错 3NameError: name Name is not defined大小写 / 先用后定义原因一定义的是name使用时写了Name原因二变量还没赋值就先用Python 必须先贴标签再取东西。解决核对大小写确认赋值语句在使用之前、且没有被写在别的文件里。报错 4ValueError: invalid literal for int() with base 10: 三十八变身失败print(int(三十八)) ValueError: invalid literal for int() with base 10: 三十八原因int()只认长得像整数的字符串三十八、1.5、18岁都变不成整数注意1.5要先经float()。解决确认字符串内容干净程序防身写法第 11 篇异常处理篇会教。报错 5NameError: name true is not defined布尔值没大写解决Python 布尔值只有True/False两个写法首字母大写。true、TRUE、Ture都是错的。七、练习作业5 分钟三行自我介绍定义name、age、hourly_pay三个变量类型分别是 str、int、int用一个 print 打印成一句话预测再验证先不运行写下你认为type(3.14)、type(3.14)、type(3 3)的输出然后进交互模式验证错了的写在评论区小票改造把加班费小算盘改成你自己的真实时薪和加班时长运行后把小票贴在评论区顺手回答你的total是 int 还是 float为什么选做把weekday_rate改成1.5改成1.5加引号运行看报什么错按三段式写出错误类型、位置、修法——这道题就是为模块二从 Excel 读出来的数字不能直接算提前打的疫苗。下一篇预告《04 字符串详解办公场景的第一刚需》——拼接、切片、f-string 格式化、去空格切分。学完那篇你就能处理从表格里读出来的乱糟糟名单了。
返回列表