Python 轻松学会写程式笔记-第5节61-建立记账程序专案(+二维清单)

本文详细介绍了一个Python购物车程序的实现过程,包括如何通过while循环收集商品名称和价格,利用二维列表存储商品信息,以及如何在GitHub上创建项目并上传代码。此外,还讲解了如何使用for循环遍历二维列表并打印商品名称和价格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最终程序

products = []
while True:
	name = input('请输入商品名称:')
	if name == 'q':
		break
	price = input('请输入商品价格:')
	products.append([name, price])
print(products)

for p in products:
	print(p[0], '的价格是', p[1])

在这里插入图片描述

GitHub建立专案

现在来做一个记帐程式
先上github来建立我们的专案

然后我们的这个专案叫做products 商品
因为我们等一下这个记帐程式 会记录一些商品跟它的价格
好 建立
然后建立之后我们到桌面建立资料夹
到cmd中 我们cd进去
然后我们开始执行这些指令
那做到最后一行git push之后 它就上传了
上传这个readme档 程式的说明档
好 那重新整理我确定一下 那个readme有上传上来

基本程序

我们的记帐程式 这个程式我们让使用者重複的输入商品名称 就他购买过的东西

那既然要让它重複输入
我们就要用到迴圈
比较适合用While Loop

比起For Loop【固定次数】
因为While Loop
通常比较适合用在
我们不知道会执行几次的情况下使用

那使用者有可能买3个东西 有可能买5个东西 他有可能买100个东西
所以既然那个次数是不一定的 我们就比较适合用While Loop

先写一个While True的迴圈
我先存档
我存进去桌面的这个products资料夹
这个档名我就一样 叫products

While True之后空4格 我才进来While回圈的内容
那我们要让使用者输入商品名称 我就用一个input 请输入商品名称

while True:
	name = input('请输入商品名称:')

那既然我们问的是名称 我就把它存成name
再来如果使用者输入q的话 就离开迴圈就不用再输入了 所以我现在就把q当作是一个quit quit就是离开的意思 quit 让他逃出迴圈

while True:
	name = input('请输入商品名称:')
	if name == 'q':
		break

那么我们要用一个清单储存下来他输入过的东西 那既然这个清单是装著商品 我就把这个清单取叫做products

products = []

那我现在我就把name加进去products
products.append name
把name装进products清单
最后就印出来我们目前有几个商品好了 把products印出来
存档

products = []
while True:
	name = input('请输入商品名称:')
	if name == 'q':
		break
	products.append(name)
print(products)

我们已经看过这种架构的程式

执行

好 那我来cmd中执行 python products
请输入商品名称
珍珠奶茶 麦香奶茶 麦当劳
好 我就只购买了3个东西
那我按q 就离开
那我们的清单中装著珍珠奶茶 麦香奶茶跟麦当劳 3个字串对不对
结果:

(base) liuruideMacBook-Pro:coding liurui$ python3 61.py
请输入商品名称:珍珠奶茶
请输入商品名称:麦香奶茶
请输入商品名称:麦当劳
请输入商品名称:q
['珍珠奶茶', '麦香奶茶', '麦当劳']

好 没有问题

输入价格?

现在问题来了
如果我要让使用者也输入价格 我要怎么处理

那既然我要问两个问题
我就需要第二个input
input 请输入商品价格
那既然是问价格 我就存成price

products = []
while True:
	name = input('请输入商品名称:')
	if name == 'q':
		break
	price = input('请输入商品价格:')

那为什么我把input写在这个break的下面呢
因为如果商品名称的时候它输入q
我就不要问价格了
因为q我只是要离开 它不是一个真正的商品 所以我就提早break逃出去
这就是为什么我把输入价格的部分放低一点
放在break的下面
如果它是输入真正的商品 我才问价格这样

好 加了这个价格以后 我们立刻面临到一个问题是
我们的products清单 怎么又装名字又装价格
原本它只装名字 可是现在我们想要把价格也装进去
每个商品都要有名字 要有价格
名字 价格
那这样我们怎么装进products裡面

大家立刻会想到的想法
第一种
你不就直接装进去就好了
像你先装名字 那你再装价格
你再装名字 你再装价格
再装名字 再装价格
你就交替著装
这个想法是可以的 但不好
为什么不好
因为这个清单中等于就是
它装了两种不同类一个东西
一下是名字 一下是价格
你等于还要知道说奇数的部分是名字 偶数的部分是价格 它有那种交替感 不好

第二种
那我就用两个清单
我第一个清单只装名字
价格我用另外一个清单来存就好了
这样也不好
因为这样你等于把一个商品的名字跟价格分开储存了
一个存在这台列车 一个存在那台列车
你把同一个商品的资料分开存了 不好
在这里插入图片描述
所以假设我要知道第3个商品的价格 我还要从和谐号跳到复兴号 然后说你的第2个车厢给我
你要确定你在对的位置 你才可以找到价格 不好

二维清单介绍

所以我们第一次要见识到两个维度的清单
简单来说就是清单中还有清单

那如果清单你把它想像成火车
每一个就是一节车厢
每一个都只装名字name
那现在我们裡面装清单
所以大的清单中还有小的清单
在这里插入图片描述
小清单是一台小火车 只有两节车厢的清单
这小火车裡面的第一节 就是第0个位置 应该是放名字
第二节 就是第1个位置 再放价格
每一个商品的名字 价格
名字 价格
这就是我们要做到的效果
大清单中 你要有很多小小的清单 每一个格子就是一个小清单
清单中还有清单 所以这就是2维度
2个维度的
英文叫2 dimensional

来 我们回来程式码
products现在只装name
我不要 我不要装name 我要装一个小的清单对不对
那我在这裡面每次输入完一个商品的资料
我就建立一个小的清单

好 那么现在怎么建立那个小清单
每一次我问完他商品名称跟商品价格
我就可以建立一个小清单了

小火车 装著这个商品的名称跟价格 所以我一问完价格 我就建立这个小清单
我取名叫做p 来代表products 商品
那p点append把名字装进去
p点append price 把价格装进去
那这样小清单就做完了 这3行 7到9

	p = []
	p.append(name)
	p.append(price)
	products.append(p)

那把小的清单装进大的清单 就是把p装进去products products是大清单
大清单是建立在最外面的 第一行这边 那个最大的火车

在这里插入图片描述
现在这个大火车是products 裡面假设四节车厢
每一个裡面装著name跟价格
name跟价格
那这个小清单 每一个就是一个p
我把p用红色部分圈起来 这个是p 这个也是p 这个也是p
因为p装成name跟price
那黄色的这个大火车就这个products

products = []
while True:
	name = input('请输入商品名称:')
	if name == 'q':
		break
	price = input('请输入商品价格:')
	p = []
	p.append(name)
	p.append(price)
	products.append(p)
print(products)

再执行

麦香奶茶 10元
珍珠奶茶 60
q

请输入商品名称:麦香奶茶
请输入商品价格:10
请输入商品名称:珍珠奶茶
请输入商品价格:60
请输入商品名称:q
[['麦香奶茶', '10'], ['珍珠奶茶', '60']]

你有没有看到有一个大清单在最外面
这个就是大清单的那个火车的开头跟结尾的符号
然后裡面有一个小清单
所以你看到 连续的2个这个符号
一眼就可以看出 这个是一个2维的清单 不然它怎么可能会2个清单的符号 贴在一起
它一定是清单中还有清单 才有可能会看到这种 2个清单符号贴在一起的

练习存取二维清单

products[0][0]

products中括号0 中括号0 是什么意思
products[0][0]
一个清单假设它裡面只有2个商品
每一个格子装的是一个小清单 装名字跟价格

那我们现在要求的是products 0 0
我们先看前面这部分 products 0
products [0]指的就是
products这个清单中的第0格

第0格不就这边(第一个小清单)
后面这个0
就是第0格裡面的东西的第0格
也就是n(第一个小清单里的第一格)

你要走进去就再走进去 分2个阶段
我们先走进去第0格之后 再走进去小清单的第0格
在这里插入图片描述
你记得清单它都是从0开始
它的车厢代号 它的清单的索引标籤 英文叫index 都是从0开始的

针对大清单 products 外面这个0 1 这是它的格子
每一个格子裡面还有一个小清单 分别是0 1
所以products 0 就是先把大清单的第0格拿出来 拿出来这个np
之后再拿这个np的第0格 再拿np的第0格 也就是n
就是把第0个商品的名字拿出来

再举另外一个例子
如果我现在改成products 1 1
products 1就是大清单的第一格 裡面是一个小清单 这个小清单的第一格
所以我就等于是 拿第一个商品的价格的意思

这就是存取2维清单的做法 会有两个中括号
因为我们要开一扇门之后 你还要再进去第二扇门

稍稍提点你一下
就是我们在创作小清单的时候
p是小清单
然后我们把名字装进去 price装进去对不对
然后我们再把小的清单装进大的清单

有一个方法可以更简单写

	p = []
	p.append(name)
	p.append(price)

=

p = [name, price]

就好像以前我们在教清单的时候说 裡面装苹果 然后裡面装一个凤梨

我们可以直接写
我们写一个清单的符号之后 我可以直接把裡面装的东西写好
只是我们现在不是写字串 我们现在是放name跟price
我这样一行式的写 我就不用先写一个空清单之后 再用append把东西加进去了

如果你还想再更简洁一点点的人
在这里插入图片描述
你可以直接把这个部分直接写在这(看上图) 那就根本不用p了
直接在这边创作小清单 你要能拿进大清单裡面

再执行

拉麵价格220
义大利麵 pasta 280
q

请输入商品名称:ramen
请输入商品价格:220
请输入商品名称:pasta
请输入商品价格:280
请输入商品名称:q

大清单裡面装著小清单 逗点分开
然后有一个小清单

(base) liuruideMacBook-Pro:coding liurui$ python3 61.py
请输入商品名称:ramen
请输入商品价格:220
请输入商品名称:pasta
请输入商品价格:280
请输入商品名称:q
[['ramen', '220'], ['pasta', '280']]

建立版本上传

那我上传到github
git add products
git commit
git pust origin master上传

for loop 搞清楚每个东西是什么

我们来写一个for loop来印出我们的商品跟价格
for p in products
那当然p这边我也可以取全名product 单数 单数的商品 那我现在写简单一点写p就好了

for p in products:
	print(p)

执行

拉麵 ramen 220
pasta 280 q

请输入商品名称:ramen
请输入商品价格:220
请输入商品名称:pasta 
请输入商品价格:280
请输入商品名称:q
[['ramen', '220'], ['pasta', '280']]
['ramen', '220']
['pasta', '280']

它先印出了整个清单

下面这个for loop印出清单中的每一个东西 就是小清单
这个大清单中的每一个东西是一个小清单 就是这个p

写一个for loop来存取这个大清单 就是把一个一个东西拿出来
第一个拿出来就是ramen 220的清单
第二个拿出来就是pasta 280

所以如果我这边印出小清单的0 就会取到商品的名字

for p in products:
	print(p[0])

我这一次印出p[0]的话

请输入商品名称:ramen
请输入商品价格:220
请输入商品名称:pasta
请输入商品价格:280
请输入商品名称:q
[['ramen', '220'], ['pasta', '280']]
ramen
pasta

我就只印出名字了
每一个小清单的第0格就是pasta 这边就ramen

再加一点东西 p0的价格是p1

for p in products:
	print(p[0], '的价格是', p[1])

再执行

请输入商品名称:ramen
请输入商品价格:220
请输入商品名称:pasta
请输入商品价格:280
请输入商品名称:q
[['ramen', '220'], ['pasta', '280']]
ramen 的价格是 220
pasta 的价格是 280

ramen的价格是220
pasta的价格是280

这边是一个大清单也就products
然后裡面有装两个商品
每一个商品是一个小清单 名字跟价格

这个for loop来存取products的时候
for loop的定义 就是我们把清单中的 一个一个东西拿出来
对于products这个大清单来讲 它的一个一个东西是什么
它的一个一个东西是小清单 它的每一个东西都是一个小清单
小清单我要再取你的第0个位置就是名字
小清单我要取你的第一个位置就变价格了

你明白这个for loop这边所指的这个p是一个小清单
然后你又明白说小清单裡面的0是名字
小清单裡面的1是价格

建立版本上传

我们现在就可以把它上传到github
git at products
建立版本 我这个就叫做add for loop好了 for loop for printing products
上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值