每天30min学习python—52周存钱挑战

目录

  1. 52周存钱挑战1.0
  2. 52周存钱挑战2.0+3.0
  3. 52周存钱挑战4.0
  4. 52周存钱挑战5.0

1.0 实现功能

  • 52周阶梯式存钱,看52周后能存下来多少钱?

常识点:

  • 52周存钱法:即52周阶梯式存钱法,是国际上非常流行的存钱方法。
  • 存钱的人必须存满52周,而且每周递增指定的金额(比如:每周比上一周多存10元),这样一年下来会有多少钱呢?

代码区:

"""
    作者:Troublemaker
    功能:52周存钱挑战
    版本:1.0
    日期:2019/10/1 15:45       “阿中生日快乐“
    脚本:1.0.py
"""


def main():
    """
        主函数
    """

    # 设置初始周,初始存钱数
    begin_week = 1
    total_week = 52

    first_save_money = 10
    total_money = 0

    # while 循环计算52周内的总存款
    while begin_week <= total_week:
        total_money += first_save_money   # 总的存入的钱 = 第一次存入的钱 + 上次已存的钱
        first_save_money += 10            # 每隔一周,相比上一次存入的钱,就多10
        begin_week += 1                   # 每循环一次周数+1,加到53周自动跳出循环

    print("52周后存入总额:{}元。".format(total_money))

if __name__ == '__main__':
    main()

2.0+3.0 实现功能

  • 52周阶梯式存钱,看52周后能存下来多少钱?
  • 2.0新增:记录每周的存款数
  • 3.0新增:使用循环直接计数

知识点:

列表list:
  • list是有序的元素集合
  • 可通过索引访问单个元素(如:list[0],list[2])
  • 也可以通过索引访问多个内容(如:list[0:2],list[0:])
  • 而且列表中每个元素类型可以不同
列表的一些操作:
  • list1 + list2 合并两个列表
  • list1 * n 重复n次列表内容
  • len(list1) 查看列表长度
  • X(某个元素) in list1 检查元素x是否在list1列表中

  • list1.append(x) 把x加到list1列表的末尾,注意是末尾
  • list1.sort() 对list1列表中的元素进行排序
  • list1.reverse() 对list1列表中的元素进行逆序
  • list1.index(x) 返回list1列表中第一次出现x的索引位置,注意是第一次
  • list1.insert(i,x) 在第i个位置插入新的x元素
  • list1.count(x) 返回x元素在列表中的个数
  • list1.remove(x) 移除第一次出现的元素x
  • list1.pop(i) 取出列表中i位置上的元素,并将其删除
math 库
  • 需要用到的———math.fsum(list1) 对集合内的所有元素求和
  • 想了解更多math库相关的函数访问这里:我是传送门

代码区:

"""
    作者:Troublemaker
    功能:52周存钱挑战
    版本:2.0
    日期:2019/10/1 16:19   ”阿中,生日快乐“
    脚本:2.0.py
    新增:记录每周的存款数
"""

import math


def main():
    """
        主函数
    """

    # 设置初始周,初始存钱数
    begin_week = 1
    total_week = 52

    first_save_money = 10
    every_add_money = 0
    # total_money = 0
    # 创建每周存钱的列表
    everyweek_save_money_list = []

    # while 循环计算52周内的总存款
    while begin_week <= total_week:
        everyweek_save_money = first_save_money + every_add_money   # 每周的存钱数 = 第一次存入的钱 + 每周递增的钱
        everyweek_save_money_list.append(everyweek_save_money)      # 将每周的存钱数加至列表
        # total_money += everyweek_save_money                         # 总的存入的钱 = 上次已存的钱 + 这周递增的钱
        every_add_money += 10                                       # 每周递增10元
        begin_week += 1                                             # 每循环一次周数+1,加到53周自动跳出循环

    # 设置周数计数
    week = 1
    for money in everyweek_save_money_list:
        print("第{}周,存入的金额为{}元。".format(week, money))
        week += 1

    total_money = math.fsum(everyweek_save_money_list)
    print("52周后存入总额:{}元。".format(total_money))

if __name__ == '__main__':
    main()

4.0 实现功能

  • 52周阶梯式存钱,看52周后能存下来多少钱?
  • 2.0新增:记录每周的存款数
  • 3.0新增:使用循环直接计数
  • 4.0新增:灵活设置每周的存款数,增加的存款数及周数

知识点

  • 变量的作用范围
  • 局部变量:函内的变量,作用范围只在函数内
  • 全局变量:函数外的变量,在所有函数中都能使用,global

代码区:

"""
    作者:Troublemaker
    功能:52周存钱挑战
    版本:4.0
    日期:2019/10/6 11:19   
    脚本:4.0.py
    新增:记录每周的存款数
    新增:灵活设置每周的存款数,增加的存款数及周数
"""

import math


def set_money_and_week(first_save_money, every_add_money, total_week):
    """
    设置初始周数和存款数 
    """
    # 创建每周存钱的列表
    everyweek_save_money_list = []

    begin_week = 1
    # while 循环计算52周内的总存款
    while begin_week <= total_week:
        if begin_week < 2:
            everyweek_save_money = first_save_money
        else:
            everyweek_save_money = everyweek_save_money + every_add_money  # 每周的存钱数 = 第一次存入的钱 + 每周递增的钱
        everyweek_save_money_list.append(everyweek_save_money)             # 将每周的存钱数加至列表

        begin_week += 1   # 每循环一次周数+1,加到53周自动跳出循环

    global total_money    # 全局变量
    total_money = math.fsum(everyweek_save_money_list)


def main():
    """
        主函数
    """
    # 设置初始存款数,增加的存款数及周数(方法一)
    # first_save_money, every_add_money, total_week = input("输入初始存款数,增加的存款数及周数(用逗号隔开):").split(",")
    # first_save_money = float(first_save_money)
    # every_add_money = float(every_add_money)
    # total_week = int(total_week)

    # 设置初始存款数,增加的存款数及周数(方法二)
    first_save_money, every_add_money, total_week = map(int, input("输入初始存款数,增加的存款数及周数(用逗号隔开):").split(','))

    set_money_and_week(first_save_money, every_add_money, total_week)
    # total_money 是用global声明了,成为了一个全局变量
    print("52周后存入总额:{}元。".format(total_money))

if __name__ == '__main__':
    main()

5.0实现功能

  • 52周阶梯式存钱,看52周后能存下来多少钱?
  • 2.0新增:记录每周的存款数
  • 3.0新增:使用循环直接计数
  • 4.0新增:灵活设置每周的存款数,增加的存款数及周数
  • 5.0新增:根据用户输入的日期,判断是一年中的第几周,然后输出相应的存款金额

知识点

  • datetime库的使用
  • datetime.now() 获取当前日期和时间
  • datetime.strptime() 将字符串解析为时间 (中间的p对应英文parse)
  • datetime.strftime() 格式化datetime为字符串显示
  • isocalendar() 返回三个元素(年,第几周,周几)
  • 更多使用方法参考:datetime文档 ——> 传送门

代码区

"""
    作者:Troublemaker
    功能:52周存钱挑战
    版本:5.0
    日期:2019/10/6 15:10   
    脚本:5.0.py
    新增:记录每周的存款数
    新增:灵活设置每周的存款数,增加的存款数及周数
    新增:根据用户输入的日期,判断是一年中的第几周,然后输出相应的存款金额
"""

import math
import datetime


def set_money_and_week(first_save_money, every_add_money, total_week):
    """
    设置初始周数和存款数 
    """
    # 创建每周存钱的列表
    global everyweek_save_money_list  # 主函数中需要使用到,所以要在局部声明是全局变量
    everyweek_save_money_list = []

    begin_week = 1
    # while 循环计算52周内的总存款
    while begin_week <= total_week:
        if begin_week < 2:
            everyweek_save_money = first_save_money
        else:
            everyweek_save_money = everyweek_save_money + every_add_money  # 每周的存钱数 = 第一次存入的钱 + 每周递增的钱
        everyweek_save_money_list.append(everyweek_save_money)             # 将每周的存钱数加至列表

        begin_week += 1   # 每循环一次周数+1,加到53周自动跳出循环

    global total_money    # 全局变量
    total_money = math.fsum(everyweek_save_money_list)


def main():
    """
        主函数
    """

    # 设置初始存款数,增加的存款数及周数(方法一)
    # first_save_money, every_add_money, total_week = input("输入初始存款数,增加的存款数及周数(用逗号隔开):").split(",")
    # first_save_money = float(first_save_money)
    # every_add_money = float(every_add_money)
    # total_week = int(total_week)

    # 设置初始存款数,增加的存款数及周数(方法二)
    first_save_money, every_add_money, total_week = map(int, input("输入初始存款数,增加的存款数及周数(用逗号隔开):").split(','))

    set_money_and_week(first_save_money, every_add_money, total_week)
    # total_money 是用global声明了,成为了一个全局变量
    print("52周后存入总额:{}元。".format(total_money))

    # 根据用户输入的日期,判断是一年中的第几周,然后输出相应的存款金额
    input_str_date = input('请输入日期(格式xxxx-xx-xx):')
    get_time_date = datetime.datetime.strptime(input_str_date, "%Y-%m-%d")
    # 得到对应的年,周数,存款
    where_year = get_time_date.isocalendar()[0]
    where_week = get_time_date.isocalendar()[1]
    how_many_money = everyweek_save_money_list[where_week - 1]
    print("这是{}中的第{}周,存款的金额为{}元。".format(where_year, where_week, how_many_money))

if __name__ == '__main__':
    main()