【Python基础入门】超市收银系统实战
本文带你从零开始:认识Python → 安装Python 3.11.7 + PyCharm → 掌握部分基础Python知识 → 最终完成一个“超市收银系统”实战项目。全文包含50+代码示例,适合零基础入门。
模块 核心内容
🔧 环境搭建 Python 3.11.7安装(Windows/macOS/Linux)+ PyCharm配置
📖 基础语法 print输出、变量命名、数据类型、type检测、强制类型转换
⌨️ 输入处理 input函数、字符串转数值、多行字符串
🚦 条件判断 if/elif/else、布尔值、and/or逻辑运算符、三元运算符
🔁 循环语句 for循环、range函数、while循环、循环嵌套、break/continue
⚠️ 异常处理 try-except、捕获多种异常、友好的错误提示
🧪 综合实战 超市收银系统(融合循环+异常+条件判断)
一、认识Python
1. Python是什么?
Python是一门解释型、面向对象的高级编程语言,由Guido van Rossum于1991年创建。它的设计哲学是:
优雅、明确、简单
2. Python的优势
根据TIOBE、GitHub、IEEE Spectrum等权威排行榜,Python已稳居编程语言使用量第一。
· 超过70%的数据科学家使用Python
· PyPI拥有超过50万个第三方库
· 连续多年被评为“最想学习的语言”
Python能够成为全球最受欢迎的编程语言,得益于以下五大优势
📖 简洁易读 :语法接近自然语言(如英语),代码可读性高,降低学习和维护成本。
📦 丰富的生态库: 拥有超过20万个第三方库(如NumPy、Django、TensorFlow),覆盖几乎所有开发场景。
💻 跨平台兼容: 支持Windows、Linux、macOS等操作系统,代码无需修改即可跨平台运行。
🆓 开源免费 完全免费,社区活跃,持续迭代更新(由Python软件基金会维护)。
🎯 多领域适用: 既能写脚本自动化小任务,也能开发大型企业级应用。
3.Python的热门趋势
🤖 大模型与AI应用
ChatGPT等大模型底层均用Python训练,LangChain成为AI应用开发标配。AI岗位年增40%+,是最热方向。
📊 数据分析与商业智能
金融、电商、医疗行业急需,Pandas+Matplotlib是数据清洗与可视化首选。
🚀 AI后端服务
FastAPI成为部署AI模型的新宠,性能高、文档自动生成。
🔧 办公自动化
Excel批量处理、文件自动整理,Python是“打工人效率神器”。
🕷️ 数据采集与爬虫
大模型时代数据即燃料,爬虫是获取训练数据的重要手段。
AI是Python最热方向,数据分析是应用最广的领域,自动化是提升效率的利器。
二、Python 3.11.7 与 PyCharm 下载与环境搭建
1. Python 3.11.7 下载与安装
- 访问 Python 官方网站https://www.python.org/downloads/下载页面找要下载的Python版本

- 选择适用于操作系统的安装包(Windows/macOS/Linux)

- 运行安装程序并勾选“Add Python to PATH”选项,建议两个都勾选

- 验证安装是否成功 开始搜索IDLE查看是否有Python 3.11

2. PyCharm 下载与安装(社区版免费)
- 访问 JetBrains 官网 Download PyCharm: The Python IDE for data science and web development by JetBrains下载 PyCharm(Community 版)
- 根据操作系统选择安装包(Windows/macOS/Linux)
- 运行安装程序并完成基本配置(如创建桌面快捷方式)
- 启动 PyCharm 并选择初始设置(主题、插件等)
3. 配置 Python 解释器
- 在 PyCharm 中创建或打开项目New Project
- 进入
File > Settings > Project: [项目名] > Python Interpreter - 点击齿轮图标选择
Add Interpreter - 选择已安装的 Python 3.11.9 路径并确认
4. 创建与运行 Python 项目
- 新建 Python 文件(如
main.py) - 编写简单测试代码(如
print("Hello, Python 3.11.9")) - 使用 PyCharm 运行功能(右键菜单或工具栏按钮)
- 检查输出结果是否正常
5. 常见问题与解决方案
当系统中存在多个python版本时,需要切换优先级,可以通过环境变量来进行修改
三、Python基础语法
1. 输出函数 print()
print("Hello") # 输出字符串
print(123) # 输出数字
print("a", "b", "c", sep="-") # a-b-c(修改分隔符)
print("不换行", end="") # 不换行输出
2. 变量命名规则
| 规则 | 正确示例 | 错误示例 |
|---|---|---|
| 只能包含字母、数字和下划线 | my_name | my-name |
| 不能以数字开头 | age2 | 2age |
| 不能使用关键字 | name | if(if为关键字) |
| 区分大小写 | Age和age不同 | — |
命名规范:变量用小写下划线分隔 student_name,常量全大写 MAX_SCORE
3. 基本数据类型
| 数据类型 | 示例 | type()返回值 |
|---|---|---|
| 整型(int) | age = 18 | <class 'int'> |
| 浮点型(float) | pi = 3.14 | <class 'float'> |
| 字符串(str) | name = "张三" | <class 'str'> |
| 布尔型(bool) | is_ok = True | <class 'bool'> |
# 数据类型检测示例
print(type(10)) # 输出: <class 'int'>
print(type(3.14)) # 输出: <class 'float'>
4. 类型转换
| 函数 | 功能描述 | 示例 |
|---|---|---|
| int() | 将输入转换为整数 | int("123") → 123 |
| float() | 将输入转换为浮点数 | float("3.14") → 3.14 |
| str() | 将输入转换为字符串 | str(100) → "100" |
| bool() | 将输入转换为布尔值 | bool(0) → False |
⚠️ 常见坑:带小数的字符串不能直接转int,因为int()函数不能直接处理带小数点的字符串,需要先转换为浮点数再取整
int("3.14") # 会抛出ValueError
# 正确方法:先转换为float再转为int
int(float("3.14")) # 结果为3
5. 输入函数 input()
重要:input() 返回值永远是字符串类型!
# 获取用户输入的姓名并显示其类型
name = input("请输入姓名:")
print(type(name)) # 输出类型为<class 'str'>
# 年龄输入需要转换为整型才能进行数学运算
age = int(input("请输入年龄:")) # 直接在输入时完成类型转换
print(f"明年你将年满{age + 1}岁") # 使用f-string格式化输出
6. 多行字符串
单引号或双引号无法跨行,使用三个引号:
# 春晓
poem = """春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。"""
print(poem)
四、程序控制语句
1. 条件判断(if/elif/else)
核心语法:条件后跟冒号 : 代码块缩进(4个空格)
"注意:Python中缩进错误会引发IndentationError"
score = 85
if score >= 90:
print("优秀")
elif score >= 70:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
布尔值规则:
· True / False(首字母大写)
· 非零数值 → True,零 → False
· 非空字符串 → True,空字符串 → False
逻辑运算符:
age = 18
score = 95
# 使用and运算符:两个条件都必须满足
if age >= 18 and score >= 90:
print("成年且成绩优秀")
# 使用or运算符:满足任一条件即可
if age < 18 or score >= 90:
print("未成年或成绩优秀")
单条件赋值场景下可替代简单if-else
status = "未成年" if age < 18 else "成年"
2. for 循环
适用场景:已知循环次数或遍历序列
# 遍历字符串中的每个字符
for char in "Python":
print(char)
# 使用range生成指定次数的循环
for num in range(5): # 输出0到4
print(num)
# 使用带步长的range控制循环
for num in range(2, 9, 2): # 输出2,4,6,8
print(num)
range() 函数参数说明:
| 调用方式 | 生成序列 |
|---|---|
| range(5) | 0, 1, 2, 3, 4 |
| range(1, 6) | 1, 2, 3, 4, 5 |
| range(1, 10, 2) | 1, 3, 5, 7, 9 |
3. while 循环
适用场景:循环次数不确定
# 循环计数器初始化
count = 0
# 执行3次循环
while count < 3:
# 打印当前循环次数
print(f"第{count+1}次循环")
# 计数器递增
count += 1
注意:一定要修改循环条件,否则会死循环!
4. 循环嵌套
内层循环完整执行一次,外层循环才进入下一次迭代。
# 生成九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i * j}", end="\t")
print() # 每行结束后换行
5. break 和 continue
| 语句 | 作用 |
|---|---|
| break | 立即终止整个循环 |
| continue | 跳过当前循环剩余代码,进入下一次迭代 |
# 使用break:当找到第一个偶数时终止循环
for i in range(1, 10):
if i % 2 == 0:
print(f"发现偶数{i},循环终止")
break
# 使用continue:跳过奇数,仅输出偶数
for i in range(1, 6):
if i % 2 != 0:
continue
print(i) # 输出结果为2和4
6. 异常处理(try-except)
问题:当需要确保用户必须输入数字时,用户输入 abc 而不是数字,程序会抛出ValueError异常。
解决:用 try-except 捕获异常,给出明确的错误提示信息。
while True:
try:
user_input = int(input("请输入数字:"))
break
except ValueError:
print("输入无效,请重新输入数字")
捕获多种异常:
try:
numerator = int(input("请输入分子:"))
denominator = int(input("请输入分母:"))
result = numerator / denominator
print(f"计算结果:{result}")
except ValueError:
print("错误:请输入有效的整数!")
except ZeroDivisionError:
print("错误:分母不能为零!")
五、综合实战:超市收银系统
需求分析
1. 可连续服务多位顾客
2. 输入商品单价和重量
3. 根据重量计算不同折扣:
· ≥10kg → 8折
· ≥5kg → 85折
· ≥2kg → 9折
· <2kg → 无折扣
4. 用户输入非数字时提示重试,不崩溃
5. 输入q退出系统,累计总营收
完整代码
# 一、界面初始化
print("=" * 35)
print(" 欢迎使用超市收银系统")
print("=" * 35)
# 二、总营收
total_income = 0.0
# 三、整体循环业务区域(外层大循环)
while True:
print("\n--- 新顾客 ---")
# 四、输入商品单价及容错校验
while True:
price_input = input("请输入商品单价(元),输入q退出:")
if price_input.lower() == 'q':
print(f"\n今日总营收:{total_income:.2f}元")
print("感谢使用,再见!")
exit()
try:
price = float(price_input)
if price <= 0:
print("单价必须大于0!")
continue
break
except ValueError:
print("请输入有效的数字!")
# 五、商品重量输入及容错校验
while True:
weight_input = input("请输入商品重量(千克):")
try:
weight = float(weight_input)
if weight <= 0:
print("重量必须大于0!")
continue
break
except ValueError:
print("请输入有效的数字!")
# 六、阶梯折扣判断区域
if weight >= 10:
discount = 0.8
discount_desc = "8折"
elif weight >= 5:
discount = 0.85
discount_desc = "85折"
elif weight >= 2:
discount = 0.9
discount_desc = "9折"
else:
discount = 1.0
discount_desc = "无折扣"
# 七、金额计算区域
subtotal = price * weight * discount
total_income += subtotal
# 八、消费小票打印区域
print("\n" + "-" * 35)
print(f"单价:{price:.2f}元")
print(f"重量:{weight:.2f}kg")
print(f"折扣:{discount_desc}")
print(f"本单金额:{subtotal:.2f}元")
print(f"累计营收:{total_income:.2f}元")
print("-" * 35)
# 九、结束营业判断区域
cont = input("\n是否继续服务下一位顾客?(y/n):").lower()
if cont != 'y':
print(f"\n今日总营收:{total_income:.2f}元")
print("感谢使用,再见!")
break
内容详细讲解
一、前三行是一个系统标题起到一个美化界面的作用
1. 打印35个等号,制作顶部装饰分割线,美化界面。
2. 居中打印系统标题,告知用户当前为超市收银系统。
3. 再次打印35个等号,闭合标题上下边框,界面整齐。
二、
4. 定义总营收变量,初始为浮点型0.0,用来全天累计所有订单收入。
三、这里是第一层:最外层大循环——每来一个顾客、结算一次,循环往复。
5. 开启无限循环,实现重复接待多位顾客,系统持续运行。
6. 打印换行与提示文字,标记开始接待新顾客。
四、这里是第二层:嵌套循环1——输错不让过,必须输入合法数字、正数才放行
7. 嵌套无限循环,锁定单价输入,强制保证输入合法才能下一步。
8. 接收用户输入,提示填写商品单价,输入q可直接退出程序。
9. 将输入转为小写,识别q/Q,作为程序退出入口。
10. 格式化输出当日总营收,保留两位小数,规范金额显示。(这里出现两个f)
第一个f用到一个f-string格式化字符串 把代码里面的变量,直接塞进字符串里的打印出来 f"字符串{变量名}字符串" 普通字符串,不能直接写变量,只会原样打印文字,只有加{}才会识别变量然后自动替换我们想要输出的内容
第二个f及.2f是用来强制保留两位小数 这里的f是表示浮点数float,.2表示保留两位小数
11. 打印结束礼貌提示语。
12. 强制终止并退出整个程序。exit=关机(直接结束整个程序)
13. 开启异常捕获,防止输入汉字、符号、字母导致程序崩溃。
14. 将输入的文本转为小数,用于金额计算。
15. 判断单价,禁止0或负数,符合现实售卖规则。
16. 弹出错误提示,提醒单价必须为正数。
17. 回到单价循环开头,重新输入。continue=重来一次(不跳出循环,直接回到当前这个循环的开头及嵌套循环1开头,重新再来一次)
18. 单价输入合法,跳出当前循环,进入下一步。break=跳出循环(逃出当前的循环也就是嵌套循环1,但程序继续)
五、这里是第二层:嵌套循环2——和单价一样,放错输入,保证数据合法。
19. 嵌套无限循环,专门用来严格校验重量输入。
20. 获取用户输入的商品重量内容。
21. 开启异常捕获,拦截非数字输入报错。
22. 把重量输入转为小数,用于运算。
23. 判断重量,禁止0和负数。
24. 提示重量必须输入正数。
25. 回到重量循环开头,重新填写。
26. 重量输入合法,跳出重量输入循环。
27. 捕获数字转换失败异常,处理乱输入情况。
28. 提示用户重量必须输入纯数字。
六、
29. 判断重量≥10kg,设定8折优惠。
30. 定义折扣数值0.8。
31. 记录折扣文字说明,用于小票打印。
32. 判断5kg≤重量<10kg,设定85折。
33. 定义折扣数值0.85。
34. 记录85折文字说明。
35. 判断2kg≤重量<5kg,设定9折。
36. 定义折扣数值0.9。
37. 记录9折文字说明。
38. 重量小于2kg时,进入无折扣分支。
39. 无折扣系数设为1.0,按原价结算。
40. 标注无折扣文案。
七、
41. 计算本单实付金额:单价 × 重量 × 折扣。
42. 把本次订单金额,累加进全局总营收。
八、
43. 打印分割线,分隔操作区与小票区。
44. 格式化打印商品单价,保留两位小数。
45. 格式化打印商品重量,保留两位小数。
46. 打印当前订单享受的折扣。
47. 打印本顾客最终应付金额。
48. 实时打印店铺累计总营收。
49. 打印底部分割线,结束小票展示。
九、
50. 询问操作员是否继续接待下一位顾客。
51. 统一转小写判断,输入非y则停止接单。
52. 营业结束,打印最终全天总营收。
53. 打印结束语。
54. 跳出外层大循环,程序正常结束。
运行效果展示

六、课后练习
完成以下任务(巩固知识点):
1. 猜数字游戏:程序随机生成1-100的数字,玩家输入猜测值,提示“大了/小了/猜中了”
2. 简易计算器:输入两个数字和一个运算符(+ - * /),输出结果,处理除零错误
3. 成绩等级转换器:输入分数,输出A/B/C/D/F等级,处理非数字输入
更多推荐





所有评论(0)