最终程序
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 是什么意思
一个清单假设它裡面只有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
上传