【零基础学AI】第 10 章——变量、数字和字符串
第 10 章 变量、数字和字符串文章目录第 10 章 变量、数字和字符串 关于《AI 零基础 36 讲》变量先回答“这个值叫什么”值还带着类型数字计算要看运算符和顺序字符串保存和整理文本input 得到的总是字符串完成学习时间计算器完成文本格式化程序三种常见错误怎样修自己动手时按这个顺序关键资料上一章运行的 hello_ai.py 只有三行代码里的文字和算式都已经写死。想让程序替不同的人计算学习时间它就得先接住用户输入再把这些输入保存下来。这一章会完成两个小程序。学习时间计算器读取主题、天数和每天的学习分钟数算出总时长。文本格式化程序清理多余空格统一英文标签的大小写再拼出一张学习卡片。两份程序都只使用 Python 标准功能可以直接复制运行。 关于《AI 零基础 36 讲》零基础也能开始学 AI《AI 零基础 36 讲》是一套面向初学者的 AI 入门教程。课程从认识和使用 AI 开始逐步学习Python、数据处理、机器学习与深度学习再进入大模型应用开发最后完成个人知识库助手的综合实践。本篇是正式讲解文章通过具体例子、原创图示和操作结果讲清概念。涉及编程的章节提供可运行代码方便你边读边试。读完以后动手检验建议按专栏顺序学习并完成对应的课后训练检查自己能否独立运用本章知识。博客专栏《AI 零基础 36 讲》变量先回答“这个值叫什么”看下面两行。topicPython 基础study_days7等号右边先产生值左边的名字随后指向这个值。topic 指向一段文本study_days 指向整数 7。以后写 study_daysPython 会取到当前保存的 7。等号在这里表示赋值。它和数学题里的相等关系不同。下面的代码先让 score 指向 60下一行重新计算并赋值最后得到 70。score60scorescore10print(score)变量名可以包含字母、数字和下划线但不能以数字开头。Python 区分大小写study_days 和 Study_Days 是两个名字。入门阶段使用小写单词与下划线名字尽量说清用途。study_days7minutes_per_day45total_minutesstudy_days*minutes_per_daytotal_minutes 比 x 更容易读懂。程序变长以后清楚的变量名能减少很多来回查找。值还带着类型Python 会记录每个值的类型。type 可以把类型显示出来。topicPython 基础study_days7decimal_hours5.25finishedFalseprint(type(topic))print(type(study_days))print(type(decimal_hours))print(type(finished))输出如下。class str class int class float class boolstr 表示字符串int 表示整数float 表示浮点数bool 表示布尔值。布尔值只有 True 和 False下一章写判断条件时会频繁使用。类型决定一个值可以参加什么运算。数字 7 能做加法字符串 “7” 可以和另一段字符串拼接。它们看起来接近Python 仍然把它们当成两种值。print(73)print(73)结果分别是 10 和 73。引号会把数字字符变成文本。数字计算要看运算符和顺序Python 常用的数字运算符如下。写法含义示例结果加法7 3得到10-减法7 - 3得到4*乘法7 * 3得到21/普通除法7 / 2得到3.5//向下取整除法7 // 2得到3%取余7 % 2得到1**幂运算2 ** 3得到8乘除会先于加减执行括号可以明确改变顺序。print(23*4)print((23)*4)第一行得到 14第二行得到 20。式子稍微复杂以后宁可多写一对括号也别让读者重新背一遍优先级。学习时间换算会同时用到普通除法、整除和取余。315 分钟除以 60 得到 5.25 小时。315 // 60 得到 5 个整小时315 % 60 得到剩余的 15 分钟。total_minutes315decimal_hourstotal_minutes/60full_hourstotal_minutes//60remaining_minutestotal_minutes%60print(decimal_hours)print(full_hours)print(remaining_minutes)普通除法总会返回 float。显示给读者时可以用 f-string 控制小数位数{decimal_hours:.2f}会得到两位小数。浮点数适合许多普通测量与展示但部分十进制小数不能被二进制浮点数精确表示本章的学习时长只保留两位小数float 已经够用。字符串保存和整理文本单引号与双引号都能创建字符串。titlePython 入门author小林加号可以连接字符串星号可以重复字符串。print(title | 作者 author)print(*20)字符串还有很多方法。下面四个已经足够完成本章程序。raw_title Python 入门 raw_tag ai titleraw_title.strip()tagraw_tag.strip().upper()print(title)print(tag)print(title.replace(入门,基础))print(len(title))strip 去掉字符串两端的空白upper 把英文转成大写replace 替换指定内容len 返回字符数量。对中文字符串使用 len 时一个常见汉字通常计作一个字符。本章用 f-string 拼接最终结果。字符串开头加字母 f花括号中写变量或表达式。tagAItitlePython 入门author小林cardf[{tag}]{title}| 作者{author}print(card)输出如下。[AI] Python 入门 | 作者 小林f-string 会把数字转换成适合显示的文本也能使用格式说明控制小数位。它比手动在多个字符串之间反复写加号更容易读。input 得到的总是字符串input 会显示提示文字读取一行输入然后返回 str。即使用户输入 7程序收到的起点仍然是字符串 “7”。study_days_textinput(计划学习几天)print(study_days_text)print(type(study_days_text))要让 7 参加乘法与除法可以使用 int 转换。需要小数时使用 float。study_daysint(input(计划学习几天))minutes_per_dayint(input(每天学习多少分钟))total_minutesstudy_days*minutes_per_dayprint(total_minutes)int 只能接收符合整数写法的文本。输入 90.5 会产生 ValueError输入汉字也会失败。本章先要求按提示输入整数第 12 章会用 try 和 except 处理无效输入。完成学习时间计算器完整程序保存在 study_time_calculator.py。核心计算单独放在 calculate_study_time 中main 负责读取和显示。defcalculate_study_time(study_days,minutes_per_day):total_minutesstudy_days*minutes_per_day full_hourstotal_minutes//60remaining_minutestotal_minutes%60decimal_hourstotal_minutes/60returntotal_minutes,full_hours,remaining_minutes,decimal_hoursdefmain():topicinput(学习主题).strip()study_daysint(input(计划学习几天))minutes_per_dayint(input(每天学习多少分钟))total_minutes,full_hours,remaining_minutes,decimal_hours(calculate_study_time(study_days,minutes_per_day))print()print(f主题{topic})print(f总时长{total_minutes}分钟)print(f换算结果{full_hours}小时{remaining_minutes}分钟)print(f小数形式{decimal_hours:.2f}小时)if__name____main__:main()在 examples 目录运行下面的命令。python study_time_calculator.py一次交互可以输入 Python 基础、7 和 45结果如下。学习主题Python 基础 计划学习几天7 每天学习多少分钟45 主题Python 基础 总时长315 分钟 换算结果5 小时 15 分钟 小数形式5.25 小时项目中的自动测试用相同输入启动程序三项结果均与上面一致进程退出码为 0。完成文本格式化程序第二份程序保存在 text_formatter.py。它保留原始输入再生成清理后的 title、author 和 tag。defbuild_learning_card(raw_title,raw_author,raw_tag):titleraw_title.strip()authorraw_author.strip()tagraw_tag.strip().upper()cardf[{tag}]{title}| 作者{author}returncard,len(title)main 读取三项文本打印单行卡片、标题长度和换行版本。defmain():raw_titleinput(文章标题)raw_authorinput(作者名称)raw_taginput(英文标签)card,title_lengthbuild_learning_card(raw_title,raw_author,raw_tag)print()print(card)print(f标题长度{title_length}个字符)print(card.replace( | ,\n))输入标题 Python 入门、作者小林和标签 ai 后程序输出如下。[AI] Python 入门 | 作者 小林 标题长度9 个字符 [AI] Python 入门 作者 小林strip 清掉输入两端的空格upper 把 ai 变成 AIreplace 把分隔符换成换行。len 计算的是清理后标题的长度。三种常见错误怎样修第一种错误发生在字符串和整数直接相加时。total_minutes90print(总分钟数 total_minutes)实际运行产生 TypeError。加号两边的类型不兼容。可以改用 f-string。total_minutes90print(f总分钟数{total_minutes})修复后输出总分钟数 90退出码为 0。第二种错误来自转换规则。minutesint(90.5)字符串包含小数点int 无法按十进制整数解析它程序产生 ValueError。希望保留小数时应使用 float。minutesfloat(90.5)print(f学习分钟数{minutes:.1f})修复后输出学习分钟数 90.5。第三种错误来自变量名不一致。study_days7print(study_day)程序定义了 study_days下一行却少写了字母 s因此产生 NameError。把使用处改回 study_days 后程序输出学习天数 7。自己动手时按这个顺序先决定程序需要保存哪些值再给每个值取名。输入到达以后检查它当前是字符串还是数字需要计算就先转换。中间结果也用清楚的变量名保存最后再用 f-string 组织输出。本章的 练习代码框架 已经留下五处待完成位置。课后练习会让你补齐计算器再修改文本卡片。遇到错误时先看最后一行的异常类型然后回到对应代码检查变量名、值和类型。【零基础学AI】第 10 章课后练习与答案下一章会加入判断、循环、列表和字典。到那时程序可以根据不同输入选择处理方式也能一次保存多条学习记录。关键资料【零基础学AI】第 10 章课后练习与答案Python 官方入门教程中的数字与文本Python 官方输入输出教程Python 内置函数文档Python 内置类型文档