52周存钱挑战/52周存钱挑战(2)

去社区提问

简介:52周存钱挑战2.0版本,用列表记录每周存款金额。

案例描述

欢迎来到今天的课堂~

52周存钱挑战的程序让我们以每周10元递增的方法坚持向账户存钱,完成从少到多的积累。

上节课中我们利用循环快速计算出了顽强坚持52周所能攒下的金额总和。并且打印出过程中的周数、当周存入金额和账户累计金额。

但在之前的程序中,我们只是将每周存入的金额在循环中依次增加,然后打印显示。并没有将每周存入的金额像写记账本一样储存下来。

如果能把每周存入金额信息统一记录在一个’记账本’中,以后在摇椅上追忆这段攒钱故事时拿出’记账本’也更有回忆的味道吧~

马上就来实现这个愿望!现在就跟我一起继续来完善52周存钱挑战的小程序。

案例分析

既然要记录’每周存入金额’到记账本,第一步就得先来选个喜欢的本子。这节课我们学习Python中的一个容器——列表,它可以用来存放数据。

在使用之前,先来了解一下它的特点。

列表的表示

列表用方括号[]表示,里面的每个元素用逗号隔开。例如我们在列表中放入了第一周到第五周的存款金额:

列表(list)中的元素都是有序的,因此我们可以通过索引值来访问列表中的单个元素。

列表的索引

这听起来有点耳熟对不对?前面课程中学习过的字符串也拥有同样的特性。

(如果你还能回忆起来那可以奖励自己一杯奶茶?了)

和字符串一样,列表也可以通过索引来访问其中的元素,有正向索引和反向索引两种方法:

例如要取出money_list中的第三个元素,可以采取下面两种不同的方法

代码练习:

编程区

  1. money_list=[10,20,30,40,50]
  2. # 正向索引
  3. print(money_list[2])
  4. # 反向索引
  5. print(money_list[-3])

终端区

除了获取单个元素外,还可以利用区间索引访问子列表的内容:

代码练习:

编程区

  1. money_list = [10,20,30,40,50]
  2. print(money_list[1:4])

终端区

别忘记[a:b]代表包含a到b-1索引值的子列表~

列表中元素的类型

列表中每个元素的类型可以不同,我们可以同时存放多种不同类型的数据在一个列表中。看下面这个例子:

  1. mix_list = [100,'小明',3.14]

这个列表中,共有三个数据,其中100是整型,‘小明’是字符串类型,3.14是浮点型数据。

列表的常用操作

下面我们一起来学习几个列表的常用操作。

  1. 向列表中添加元素:list1.append(x)

这个方法可以把元素x添加到列表的末尾,来看个小例子:

代码练习:

编程区

  1. money_list = [10,20,30]
  2. # 添加元素40
  3. money_list.append(40)
  4. print(money_list)

终端区

这样就成功为列表money_list添加了元素40,这个方法一定要牢记,稍后在存钱挑战的代码修改中依然会使用到它~

  1. 对列表中的元素排序:list1.sort()

我们直接用一个简单的例子来看一下它的功能。

代码练习:

编程区

  1. money_list = [20,10,60,40,50,30]
  2. # 排序
  3. money_list.sort()
  4. print(money_list)

终端区

列表中原本无序的元素现在按照从小到大的顺序排列好了~

  1. 删除列表中第一次出现的元素x:list1.remove()

当想要删除列表中某个元素时,可以用remove()方法。

代码练习:

编程区

  1. money_list = [10,20,30,40,50]
  2. # 删除元素30
  3. money_list.remove(30)
  4. print(money_list)

终端区

list1.remove()括号中写上需要删除的元素,程序就会为我们删除列表中第一次出现它的地方。

除了上面的方法之外,我还为你总结了几个列表的常用操作,课后也可以尝试练习和使用它们哦。

关于列表的相关知识点就先介绍到这里,下面我们来看看如何应用它来优化52周存钱挑战的程序,用列表记录每周存款的金额数据。

先来回顾一下上节课的代码:

  1. money_per_week = 10 # 每周的存入的金额
  2. i = 1 # 记录周数
  3. increase_money = 10 # 递增的金额
  4. total_week = 52 # 总共的周数
  5. saving = 0 # 账户累计
  6. while i <= total_week:
  7. # 存钱操作
  8. # saving = saving + money_per_week
  9. saving += money_per_week
  10. # 输出信息
  11. print('第{}周,存入{}元,账户累计{}元'.format(i, money_per_week, saving))
  12. # 更新下一周的存钱金额
  13. money_per_week += increase_money
  14. i += 1

变量money_per_week存放的是每周存入的金额,起始值为10,每经过一次while循环,它的数值就增加10。

因此我们需要先定义一个空列表,并且在循环体中增加一段代码,将每周的数据依次存放到列表中。

先来初始化一个空列表,命名为money_list:

  1. money_list = []

向列表中添加元素,我们刚刚学习过append()方法,用下面这行代码向money_list中增加元素:

  1. money_list.append(money_per_week)

下面把这行代码添加到循环体中。

  1. money_per_week = 10 # 每周的存入的金额
  2. i = 1 # 记录周数
  3. increase_money = 10 # 递增的金额
  4. total_week = 52 # 总共的周数
  5. saving = 0 # 账户累计
  6. while i <= total_week:
  7. # 向列表添加元素
  8. money_list.append(money_per_week)
  9. # 存钱操作
  10. # saving = saving + money_per_week
  11. saving += money_per_week
  12. # 输出信息
  13. print('第{}周,存入{}元,账户累计{}元'.format(i, money_per_week, saving))
  14. # 更新下一周的存钱金额
  15. money_per_week += increase_money
  16. i += 1

我们打印看看money_list列表中的信息:

代码练习:

编程区

  1. print(money_list)

终端区

既然这个列表中存放了每周存入的金额,那么在计算账户累计数值是,是不是也可以直接利用列表中的数据来完成呢?

答案当然是可以啦!

之前我们提到过Python的强大之处在于它有非常多的模块支持,当你想要实现某些功能时,可以直接使用模块中对应的方法,而不用关心其中的具体原理是什么。

math模块

今天我们就来认识一下Python中的math模块。

math模块中包含了很多数学计算常用的函数,例如圆周率、取整、求和、求平方根等等。

本节课我们要用到math.fsum()函数,它可以对指定集合内的元素求和。

在第一次循环中 money_list=[10] 这时账户累计金额也是10;

第二次循环中 money_list=[10,20] 账户账户累计金额10+20=30;

第三次循环中 money_list=[10,20,30] 账户累计金额10+20+30=60;

……

本周的账户累计金额等于当前列表中所有元素之和。

在使用math模块之前,需要先用下面一行代码来导入它:

  1. import math

我们用math.fsum()函数来计算结果,括号中放入需要求和的集合。

  1. saving = math.fsum(money_list)

可以用这行代码替换原程序中实现求和效果的:

  1. saving += money_per_week

经过修改后的代码是下面这样的~让我们来运行看看效果。

代码练习:

编程区

  1. # 导入模块
  2. import math
  3. money_per_week = 10 # 每周存入的金额
  4. i = 1 # 记录周数
  5. increase_money = 10 # 递增的金额
  6. total_week = 52 # 总共的周数
  7. saving = 0 # 账户累计
  8. money_list = [] # 记录每周存款数的列表
  9. while i <= total_week:
  10. # 向列表添加元素
  11. money_list.append(money_per_week)
  12. #存钱操作
  13. saving = math.fsum(money_list)
  14. # 输出信息
  15. print('第{}周,存入{}元,账户累计{}元'.format(i, money_per_week, saving))
  16. # 更新下一周的存钱金额
  17. money_per_week += increase_money
  18. i += 1

终端区

本关总结

今天这节课我们完成了52关存钱挑战2.0版本,学习运用到了一些新的知识点,下面来总结一下吧。

  • 列表的定义、索引、常用操作
  • math模块

math模块中包含了很多数学计算常用的函数,例如圆周率、取整、求和、求平方根等等

使用之前需要先用import导入模块

math.fsum()函数,可以对指定集合内的元素求和

下节预告

用while进行循环,需要一个额外的变量来记录循环次数,以判断是否满足循环条件。那是否有包含计数功能的循环呢?

别急~下节课我就会为你介绍for循环,它也是一种常用的循环语句。

想获取课程资料,和更多同学一起交流学习,欢迎添加班主任老师i微信,我们下节课不见不散哦~

扫描二维码添加班主任微信

已经添加过班主任的同学,可以直接联系对应老师,无需重复添加哦。

52周存钱挑战 1/3

52周存钱挑战(2)

1.0x

恭喜完成本课时的学习!
坚持学习

行动力超过

累计学习

学习下一课时