每天30min学习python—52周存钱挑战
目录
- 52周存钱挑战1.0
- 52周存钱挑战2.0+3.0
- 52周存钱挑战4.0
- 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()