人工智能学习联盟免费课程——案例一至四汇总

案例一 汇率转换

快捷键

ctrl+/ 给选择部分加#

tab 给选择部分全部加缩进

shift+tab 将选择部分的缩进取消

def main():    
    usd_vs_rmb = 6.77
    i = 0
    print('欢迎使用货币转换器(退出请输入Q)。')
    value_string = input('请输入货币的金额和单位(CNY/USD)(示例:100CNY):')
    while value_string.upper() != 'Q' :
        unit = value_string[-3:]
        value = value_string[:-3]
        if unit.upper() == 'CNY' :
            usd = float(value) / usd_vs_rmb
            print('转换为美元为:',round(usd,3),'USD')
        elif unit.upper() == 'USD' :
            rmb = float(value) * usd_vs_rmb
            print('转换为人民币为:',round(rmb,3),'CNY')
        else :
            print('请输入人民币或者美元单位!')
        i += 1
        #print('循环次数:',str(i))
        print('\n*******************************************')
        value_string = input('请输入货币的金额和单位(CNY/USD)(示例:100CNY):')
    print('程序已结束!')

#封装函数之后对函数进行调用,使整体更加简洁
    
if __name__ == '__main__':
    main()
欢迎使用货币转换器(退出请输入Q)。
请输入货币的金额和单位(CNY/USD)(示例:100CNY):100USD
转换为人民币为: 677.0 CNY

*******************************************
请输入货币的金额和单位(CNY/USD)(示例:100CNY):q
程序已结束!

课后习题的解答

#先求幂9,再求商1,最后乘法,结果为8
11//3**2*8
8

课后思考:

1.更多货币单位怎么实现?

2.实时汇率怎么获取?

##思考1.1
#函数目的:将所有给出的货币转化为人民币
print('欢迎使用货币转换器(退出请输入Q)。')
currency_list = {'EUR':7.63,'AUD':4.76,'USD':6.72,'GBP':8.93,'JPY':0.06}
value_string = input('请输入货币的金额和单位(示例:100CNY,输入Q退出):')
i = 1
while value_string.upper() !='Q' :
    unit = value_string[-3:]
    value = value_string[:-3]
    if unit.upper() in currency_list.keys() :
        value = float(value) * currency_list[unit]
        print('转换为人民币为:',round(value,3),'CNY')
    else :
        print('请输入如下货币:')
        unit_list = list(currency_list.keys())
        for i in range(0,len(unit_list)):
            print(unit_list[i],end=' ')
    i += 1
    print('\n*******************************************')
    value_string = input('请输入货币的金额和单位(示例:100CNY,输入Q退出):')
print('程序已结束!')
欢迎使用货币转换器(退出请输入Q)。
请输入货币的金额和单位(示例:100CNY,输入Q退出):100CNY
请输入如下货币:
EUR AUD USD GBP JPY 
*******************************************
请输入货币的金额和单位(示例:100CNY,输入Q退出):100AUD
转换为人民币为: 476.0 CNY

*******************************************
请输入货币的金额和单位(示例:100CNY,输入Q退出):Q
程序已结束!
##思考1.2
#借助数据库实现双向转换
import pandas as pd
currency_data = pd.read_csv('currency_rating.csv',index_col=0)
currency_data
CNYUSDEUR
CNY1.000.150.13
USD6.721.000.88
EUR7.631.131.00
value_string = input('请输入货币的金额和单位(示例:100CNY,输入Q退出):')
units = list(currency_data.columns)
i = 1
while value_string.upper() !='Q' :
    unit_to = input('请输入想要转换成的货币单位(示例:USD):')
    unit_from = value_string[-3:]
    value = value_string[:-3]
    if unit_from.upper() in units :
        if unit_to.upper() in units :
            value = float(value) * currency_data.loc[unit_from,unit_to]
            print('转换为',unit_to,'为:',round(value,3))
        else :
            print('请输入如下货币:')
            for i in range(0,len(units)):
                print(units[i],end=' ')
    else :
        print('请输入如下货币:')
        for i in range(0,len(units)):
            print(units[i],end=' ')
    i += 1
    print('\n*******************************************')
    value_string = input('请输入货币的金额和单位(示例:100CNY,输入Q退出):')
print('程序已结束!')
请输入货币的金额和单位(示例:100CNY,输入Q退出):100CNY
请输入想要转换成的货币单位(示例:USD):USD
转换为 USD 为: 15.0

*******************************************
请输入货币的金额和单位(示例:100CNY,输入Q退出):100CNY
请输入想要转换成的货币单位(示例:USD):EUR
转换为 EUR 为: 13.0

*******************************************
请输入货币的金额和单位(示例:100CNY,输入Q退出):q
程序已结束!

案例二 绘制分形树

import turtle
#左转90度
turtle.left(90)
#前进100
turtle.fd(100)
#右转20度
turtle.rt(20)
#抬起画笔
turtle.penup()
#后退100
turtle.bk(100)
#放下画笔
turtle.pendown()
#关闭画笔
turtle.exitonclick()

五角星

count = 1
while count <=15:
    turtle.forward(((count//5)+1)*50)
    turtle.right(144)
    count += 1
    
turtle.exitonclick()

老师一直在强调简化整体的结构,将很多复杂的东西写成函数进行封装和调用,使代码看起来更简洁。

这里我多添加了一个颜色变量,虽然画出来很丑。

def draw_pentagram(size) :
    count = 1
    while count <=5:
        turtle.forward(size)
        turtle.right(144)
        count += 1

colors = ['red','green','black','blue','yellow','purple']
size = 50
while size <= 100:
    i = size//10 - 5
    turtle.color(colors[i])
    draw_pentagram(size)
    size += 10
    
turtle.exitonclick()

递归函数

#定义多了一个参数,绘制五角星的边的最大值
def draw_recursive_pentagram(size = 50,maxsize = 100) :
#依旧是绘制一个五角星的循环
    count = 1
    while count <= 5:
        turtle.fd(size)
        turtle.rt(144)
        count += 1
#绘制完成之后开始自身迭代        
    size += 10
#迭代结束的条件一定要设置好,不然就是死循环
    if size <= maxsize :
        draw_recursive_pentagram(size,maxsize)
draw_recursive_pentagram(50,maxsize = 70)

turtle.exitonclick()

分形树

这里已经把课后思考题完成了,将颜色变量添加进去,小于15的都是变成绿色,其余部分在返回画笔的时候改为棕色。

def fractal_tree(branch_length) :
    if branch_length >= 5:
        # 绘制右侧树枝
        turtle.fd(branch_length)
        turtle.rt(20)
        if branch_length <= 15 :
            turtle.color('green')
        fractal_tree(branch_length - 15)
        
        # 绘制左侧树枝
        turtle.lt(40)
        if branch_length <= 15 :
            turtle.color('green')
        fractal_tree(branch_length - 15)
    
        # 返回上个节点
        if branch_length > 15 :
            turtle.color('brown')
        turtle.rt(20)
        turtle.bk(branch_length)
#先调整画笔的位置,不然会超出绘图框
turtle.left(90)
turtle.penup()
turtle.bk(100)
turtle.pendown()

fractal_tree(100)

turtle.exitonclick()

案例三 B分R计算器

1.{}占位输出。当一个{}里面的数字要出现多次时,可以用数字{0}进行标记输出。

2.Python处理异常情况的机制——try-except机制。

def main() :
    '''
    定义主函数
    '''
    print('           欢迎使用BMR计算器!          ')
    print('-------------------**-------------------')
    y_or_n = input('是否要退出程序(y/n)?')
    while y_or_n == 'n' :
        #基础信息的输入
        info = input('请依次输入一下信息(用空格隔开)。\n性别 体重(kg) 身高(cm) 年龄:')
        newinfo = info.split(sep=' ')
        #异常情况处理机制
        try:
            gender = newinfo[0]
            weight = float(newinfo[1])
            height = float(newinfo[2])
            age = int(newinfo[3])
            if gender == '男' :
                bmr = 13.7 * weight + 5.0 * height - 6.8 * age + 66
            elif gender == '女' :
                bmr = 9.6 * weight + 1.8 * height -4.7 * age + 655
            else :
                bmr = -1
            if bmr != -1 :
                print('您好!')
                print('您的性别:{};体重:{}公斤;身高:{}厘米;年龄:{}岁。'.format(gender, weight, height, age))
                print('您的基础代谢率为:{}大卡。'.format(bmr))
            else :
                print('暂不支持该性别!')
        except ValueError :
            print('请输入正确信息!')
        except IndexError :
            print('输入的信息过少!')
        #错误类型不可能枚举,其余情况用下一句涵盖
        except :
            print('程序异常!请稍后重试!')
        #本次循环结束,再询问是否继续    
        print('-------------------**-------------------')
        y_or_n = input('是否要退出程序(y/n)?')
    print('-------------------**-------------------')
    print('             感谢您的使用!             ')
if __name__ == '__main__':
    main()
           欢迎使用BMR计算器!          
-------------------**-------------------
是否要退出程序(y/n)?n
请依次输入一下信息(用空格隔开)。
性别 体重(kg) 身高(cm) 年龄:男 二十一 184 23
请输入正确信息!
-------------------**-------------------
是否要退出程序(y/n)?n
请依次输入一下信息(用空格隔开)。
性别 体重(kg) 身高(cm) 年龄:男 21 184
输入的信息过少!
-------------------**-------------------
是否要退出程序(y/n)?n
请依次输入一下信息(用空格隔开)。
性别 体重(kg) 身高(cm) 年龄:男 71 184 23
您好!
您的性别:男;体重:71.0公斤;身高:184.0厘米;年龄:23岁。
您的基础代谢率为:1802.2999999999997大卡。
-------------------**-------------------
是否要退出程序(y/n)?y
-------------------**-------------------
             感谢您的使用!             

对异常处理机制进行封装

def Exception_handling(data_input) :
    try:
        gender = data_input[0]
        weight = float(data_input[1])
        height = float(data_input[2])
        age = int(data_input[3])
        if gender == '男' :
            bmr = 13.7 * weight + 5.0 * height - 6.8 * age + 66
        elif gender == '女' :
            bmr = 9.6 * weight + 1.8 * height -4.7 * age + 655
        else :
            bmr = -1
        if bmr != -1 :
            print('您好!')
            print('您的性别:{};体重:{}公斤;身高:{}厘米;年龄:{}岁。'.format(gender, weight, height, age))
            print('您的基础代谢率为:{}大卡。'.format(bmr))
        else :
            print('暂不支持该性别!')
    except ValueError :
        print('请输入正确信息!')
    except IndexError :
        print('输入的信息过少!')
    #错误类型不可能枚举,其余情况用下一句涵盖
    except :
        print('程序异常!请稍后重试!')
def main() :
    '''
    定义主函数
    '''
    print('           欢迎使用BMR计算器!          ')
    print('-------------------**-------------------')
    y_or_n = input('是否要退出程序(y/n)?')
    while y_or_n == 'n' :
        #基础信息的输入
        info = input('请依次输入一下信息(用空格隔开)。\n性别 体重(kg) 身高(cm) 年龄:')
        newinfo = info.split(sep=' ')
        #异常情况处理机制
        Exception_handling(newinfo)
        #本次循环结束,再询问是否继续    
        print('-------------------**-------------------')
        y_or_n = input('是否要退出程序(y/n)?')
    print('-------------------**-------------------')
    print('             感谢您的使用!             ')

案例四 52周存钱挑战

  • 本案例要调用的库包括math和datetime
    • 其中datetime库因为内部还有一个datetime,所以要从库中安装datetime

这个案例主要想说明两个点,一个是用户输入的方式,一个是局部变量和全局变量

import math
from datetime import datetime

函数设计

这个案例主要想说明两个点,一个是用户输入的方式,一个是局部变量和全局变量

我本来想的是定义函数的参数从而完成用户输入。

#第一个参数是起始存入金额,也是后面每周的存入金额;第二个参数是每周增加的金额;第三个是持续的目标时间。
def money_challenge1(money_current = 10, money_increase = 10, total_weeks = 52) :
    money_summary = 0
    money_list = []
    for i in range(total_weeks) :
        #将每一周存入的金额汇总进列表中
        money_list.append(money_current)
        #借助math库的fsum函数对列表进行求和
        money_summary = math.fsum(money_list)
        #格式化输出可以查看每周的存钱情况
        print('第{}周,该周存入{}元,累计存入{}元。'.format(i+1, money_list[i], money_summary))  
        #下一周将要存入的金额
        money_current += money_increase   

课程老师想的先是继续使用input来进行用户输入,然后又写了用形参定义函数的形式。

def money_challenge2() :
    money_current = float(input('请输入起始金额:'))
    money_increase = float(input('请输入每周递增金额:'))
    total_weeks = int(input('请输入目标存钱周数:'))
    money_summary = 0
    money_list = []
    for i in range(total_weeks) :
        #将每一周存入的金额汇总进列表中
        money_list.append(money_current)
        #求和
        money_summary = math.fsum(money_list)
        #格式化输出可以查看每周的存钱情况
        print('第{}周,该周存入{}元,累计存入{}元。'.format(i+1, money_list[i], money_summary))
        #下一周将要存入的金额
        money_current += money_increase
money_challenge1(total_weeks=10)
print('\n')
money_challenge2()
第1周,该周存入10元,累计存入10.0元。
第2周,该周存入20元,累计存入30.0元。
第3周,该周存入30元,累计存入60.0元。
第4周,该周存入40元,累计存入100.0元。
第5周,该周存入50元,累计存入150.0元。
第6周,该周存入60元,累计存入210.0元。
第7周,该周存入70元,累计存入280.0元。
第8周,该周存入80元,累计存入360.0元。
第9周,该周存入90元,累计存入450.0元。
第10周,该周存入100元,累计存入550.0元。


请输入起始金额:10
请输入每周递增金额:10
请输入目标存钱周数:10
第1周,该周存入10.0元,累计存入10.0元。
第2周,该周存入20.0元,累计存入30.0元。
第3周,该周存入30.0元,累计存入60.0元。
第4周,该周存入40.0元,累计存入100.0元。
第5周,该周存入50.0元,累计存入150.0元。
第6周,该周存入60.0元,累计存入210.0元。
第7周,该周存入70.0元,累计存入280.0元。
第8周,该周存入80.0元,累计存入360.0元。
第9周,该周存入90.0元,累计存入450.0元。
第10周,该周存入100.0元,累计存入550.0元。

下面就是局部变量和全局变量的区别,这里课程老师也是改写了参数输入的方式,即我前面写的函数money_challenge1。为了区别局部变量和全局变量,将其变量money_summary移到了函数外面,并且在定义函数时加了一句print输出。

money_summary = 0
def money_challenge1(money_current = 10, money_increase = 10, total_weeks = 52) :
    money_list = []
    for i in range(total_weeks) :
        money_list.append(money_current)
        money_summary = math.fsum(money_list)
        print('第{}周,该周存入{}元,累计存入{}元。'.format(i+1, money_list[i], money_summary))  
        money_current += money_increase  
    print('调参函数的总金额是:', money_summary)
def main() :
    money_current = float(input('请输入起始金额:'))
    money_increase = float(input('请输入每周递增金额:'))
    total_weeks = int(input('请输入目标存钱周数:'))
    
    money_challenge1(money_current, money_increase, total_weeks)
    print('主函数的总金额是:', money_summary)

if __name__ == '__main__' :
    main()
请输入起始金额:10
请输入每周递增金额:10
请输入目标存钱周数:52
第1周,该周存入10.0元,累计存入10.0元。
第2周,该周存入20.0元,累计存入30.0元。
第3周,该周存入30.0元,累计存入60.0元。
第4周,该周存入40.0元,累计存入100.0元。
第5周,该周存入50.0元,累计存入150.0元。
第6周,该周存入60.0元,累计存入210.0元。
第7周,该周存入70.0元,累计存入280.0元。
第8周,该周存入80.0元,累计存入360.0元。
第9周,该周存入90.0元,累计存入450.0元。
第10周,该周存入100.0元,累计存入550.0元。
第11周,该周存入110.0元,累计存入660.0元。
第12周,该周存入120.0元,累计存入780.0元。
第13周,该周存入130.0元,累计存入910.0元。
第14周,该周存入140.0元,累计存入1050.0元。
第15周,该周存入150.0元,累计存入1200.0元。
第16周,该周存入160.0元,累计存入1360.0元。
第17周,该周存入170.0元,累计存入1530.0元。
第18周,该周存入180.0元,累计存入1710.0元。
第19周,该周存入190.0元,累计存入1900.0元。
第20周,该周存入200.0元,累计存入2100.0元。
第21周,该周存入210.0元,累计存入2310.0元。
第22周,该周存入220.0元,累计存入2530.0元。
第23周,该周存入230.0元,累计存入2760.0元。
第24周,该周存入240.0元,累计存入3000.0元。
第25周,该周存入250.0元,累计存入3250.0元。
第26周,该周存入260.0元,累计存入3510.0元。
第27周,该周存入270.0元,累计存入3780.0元。
第28周,该周存入280.0元,累计存入4060.0元。
第29周,该周存入290.0元,累计存入4350.0元。
第30周,该周存入300.0元,累计存入4650.0元。
第31周,该周存入310.0元,累计存入4960.0元。
第32周,该周存入320.0元,累计存入5280.0元。
第33周,该周存入330.0元,累计存入5610.0元。
第34周,该周存入340.0元,累计存入5950.0元。
第35周,该周存入350.0元,累计存入6300.0元。
第36周,该周存入360.0元,累计存入6660.0元。
第37周,该周存入370.0元,累计存入7030.0元。
第38周,该周存入380.0元,累计存入7410.0元。
第39周,该周存入390.0元,累计存入7800.0元。
第40周,该周存入400.0元,累计存入8200.0元。
第41周,该周存入410.0元,累计存入8610.0元。
第42周,该周存入420.0元,累计存入9030.0元。
第43周,该周存入430.0元,累计存入9460.0元。
第44周,该周存入440.0元,累计存入9900.0元。
第45周,该周存入450.0元,累计存入10350.0元。
第46周,该周存入460.0元,累计存入10810.0元。
第47周,该周存入470.0元,累计存入11280.0元。
第48周,该周存入480.0元,累计存入11760.0元。
第49周,该周存入490.0元,累计存入12250.0元。
第50周,该周存入500.0元,累计存入12750.0元。
第51周,该周存入510.0元,累计存入13260.0元。
第52周,该周存入520.0元,累计存入13780.0元。
调参函数的总金额是: 13780.0
主函数的总金额是: 0

这里的结果显示,在调参函数内运行的print是打印函数内部的变量,所以结果为550。但是在主函数中,print打印的参数是函数内调用的函数money_challenge1保存内部运行结果的money_summary,其作为局部变量并不能拿到外层来输出,所以最后主函数中的输出依旧为外部定义的0。

为了使结果可以打印,我们要将局部变量改写为全局变量,使用global。

money_summary = 0
def money_challenge1(money_current = 10, money_increase = 10, total_weeks = 52) :
    money_list = []
    global money_summary
    for i in range(total_weeks) :
        money_list.append(money_current)
        money_summary = math.fsum(money_list)
        print('第{}周,该周存入{}元,累计存入{}元。'.format(i+1, money_list[i], money_summary))  
        money_current += money_increase  
    print('调参函数的总金额是:', money_summary)
def main() :
    money_current = float(input('请输入起始金额:'))
    money_increase = float(input('请输入每周递增金额:'))
    total_weeks = int(input('请输入目标存钱周数:'))
    
    money_challenge1(money_current, money_increase, total_weeks)
    print('主函数的总金额是:', money_summary)

if __name__ == '__main__' :
    main()
请输入起始金额:10
请输入每周递增金额:10
请输入目标存钱周数:10
第1周,该周存入10.0元,累计存入10.0元。
第2周,该周存入20.0元,累计存入30.0元。
第3周,该周存入30.0元,累计存入60.0元。
第4周,该周存入40.0元,累计存入100.0元。
第5周,该周存入50.0元,累计存入150.0元。
第6周,该周存入60.0元,累计存入210.0元。
第7周,该周存入70.0元,累计存入280.0元。
第8周,该周存入80.0元,累计存入360.0元。
第9周,该周存入90.0元,累计存入450.0元。
第10周,该周存入100.0元,累计存入550.0元。
调参函数的总金额是: 550.0
主函数的总金额是: 550.0

这时主函数打印的就是一个全局变量money_summary,可以将内层函数的结果输出出来。

Python中的时间转换

python官方文件——关于时间格式

https://docs.python.org/3.6/library/datetime.html?highlight=datetime#strftime-and-strptime-behavior

Python中主要借助strftime(format)和strptime(parsed)来进行时间和字符串的转换。这里添加的功能是根据用户输入的日期来确定他想查看的时间的存款情况。

strftime 将字符串转换为一定格式的时间

strptime 将字符串转换为一定格式的时间

isocalendar 提取出时间数据的天数,周数,和周几

这里我选择了将每周的存入金额和总金额都作为输出值,输出的是元组,所以在后面调用这个变量的时候,要用lists[i]来调用

def money_challenge3(money_current = 10, money_increase = 10, total_weeks = 52) :
    money_list = []
    summary_list = []
    money_summary = 0
    for i in range(total_weeks) :
        money_list.append(money_current)
        money_summary = math.fsum(money_list)
        #将每周的累积金额存入一个新的列表
        summary_list.append(money_summary)
        money_current += money_increase  
    return (money_list, summary_list)

    
def main() :
    money_current = float(input('请输入起始金额:'))
    money_increase = float(input('请输入每周递增金额:'))
    total_weeks = int(input('请输入目标存钱周数:'))
    
    lists = money_challenge3(money_current, money_increase, total_weeks)
    #用户输入要查询的日期
    date_str = input('请输入查询日期(yyyymmdd):')
    #按照输入的格式,将字符串转换为时间格式
    date_time = datetime.strptime(date_str,'%Y%m%d')
    #借助函数得到该日期的周数
    i = date_time.isocalendar()[1]
    #输出查询结果
    print('您要查询的日期为第{}周,该周存入了{}元,总金额为{}元。'.format(i+1,lists[0][i],lists[1][i]))

    
if __name__ == '__main__' :
    main()
请输入起始金额:10
请输入每周递增金额:10
请输入目标存钱周数:52
请输入查询日期(yyyymmdd):20190321
您要查询的日期为第13周,该周存入了130.0元,总金额为910.0元。

调用money_challenge2验证一下是否正确。

money_challenge2()
请输入起始金额:10
请输入每周递增金额:10
请输入目标存钱周数:13
第1周,该周存入10.0元,累计存入10.0元。
第2周,该周存入20.0元,累计存入30.0元。
第3周,该周存入30.0元,累计存入60.0元。
第4周,该周存入40.0元,累计存入100.0元。
第5周,该周存入50.0元,累计存入150.0元。
第6周,该周存入60.0元,累计存入210.0元。
第7周,该周存入70.0元,累计存入280.0元。
第8周,该周存入80.0元,累计存入360.0元。
第9周,该周存入90.0元,累计存入450.0元。
第10周,该周存入100.0元,累计存入550.0元。
第11周,该周存入110.0元,累计存入660.0元。
第12周,该周存入120.0元,累计存入780.0元。
第13周,该周存入130.0元,累计存入910.0元。

课后练习

至此四个案例的全部内容就完结了,课程留了一个课后思考是将前面三个计算器或者说查询器合并

import math
from datetime import  datetime
def currency_change():    
    usd_vs_rmb = 6.77
    i = 0
    print('欢迎使用货币转换器(退出请输入Q)。')
    value_string = input('请输入货币的金额和单位(CNY/USD)(示例:100CNY):')
    while value_string.upper() != 'Q' :
        unit = value_string[-3:]
        value = value_string[:-3]
        if unit.upper() == 'CNY' :
            usd = float(value) / usd_vs_rmb
            print('转换为美元为:',round(usd,3),'USD')
        elif unit.upper() == 'USD' :
            rmb = float(value) * usd_vs_rmb
            print('转换为人民币为:',round(rmb,3),'CNY')
        else :
            print('请输入人民币或者美元单位!')
        i += 1
        #print('循环次数:',str(i))
        print('\n*******************************************')
        value_string = input('请输入货币的金额和单位(CNY/USD)(示例:100CNY):')
    print('程序已结束!')

def bmr_computer() :
    '''
    定义主函数
    '''
    print('           欢迎使用BMR计算器!          ')
    print('-------------------**-------------------')
    y_or_n = input('是否要退出程序(y/n)?')
    while y_or_n == 'n' :
        #基础信息的输入
        info = input('请依次输入一下信息(用空格隔开)。\n性别 体重(kg) 身高(cm) 年龄:')
        newinfo = info.split(sep=' ')
        #异常情况处理机制
        Exception_handling(newinfo)
        #本次循环结束,再询问是否继续    
        print('-------------------**-------------------')
        y_or_n = input('是否要退出程序(y/n)?')
    print('-------------------**-------------------')
    print('             感谢您的使用!             ')
    
def money_challenge() :
    money_current = float(input('请输入起始金额:'))
    money_increase = float(input('请输入每周递增金额:'))
    total_weeks = int(input('请输入目标存钱周数:'))
    money_list = []
    summary_list = []
    money_summary = 0
    for i in range(total_weeks) :
        money_list.append(money_current)
        money_summary = math.fsum(money_list)
        #将每周的累积金额存入一个新的列表
        summary_list.append(money_summary)
        money_current += money_increase  
    #用户输入要查询的日期
    date_str = input('请输入查询日期(yyyymmdd):')
    #按照输入的格式,将字符串转换为时间格式
    date_time = datetime.strptime(date_str,'%Y%m%d')
    #借助函数得到该日期的周数
    i = date_time.isocalendar()[1]
    #输出查询结果
    print('您要查询的日期为第{}周,该周存入了{}元,总金额为{}元。'.format(i+1,money_list[i],summary_list[i]))
    
def main():
    choice = input('本程序现在支持货币转换、BMR计算和52周挑战查询,请选择要使用第几个功能(输入Q退出):')
    while choice.lower() != 'q' : 
        try:
            if int(choice) not in range(1,4) :
                print('请输入1,2或者3!')
            elif int(choice) == 1 :
                currency_change()
            elif int(choice) == 2 :
                bmr_computer()
            elif int(choice) == 3 :
                money_challenge()
        except ValueError :
            print('请输入数字!')
        print('***************************************************************************')
        choice = input('本程序现在支持货币转换、BMR计算和52周挑战查询,请选择要使用第几个功能(输入Q退出):')
    print('\n***************************************************************************')
    print('感谢您的使用!'.center(68))
if __name__ == '__main__' :
    main()
本程序现在支持货币转换、BMR计算和52周挑战查询,请选择要使用第几个功能(输入Q退出):t
请输入数字!
***************************************************************************
本程序现在支持货币转换、BMR计算和52周挑战查询,请选择要使用第几个功能(输入Q退出):4
请输入1,2或者3!
***************************************************************************
本程序现在支持货币转换、BMR计算和52周挑战查询,请选择要使用第几个功能(输入Q退出):3
请输入起始金额:10
请输入每周递增金额:10
请输入目标存钱周数:52
请输入查询日期(yyyymmdd):20190321
您要查询的日期为第13周,该周存入了130.0元,总金额为910.0元。
***************************************************************************
本程序现在支持货币转换、BMR计算和52周挑战查询,请选择要使用第几个功能(输入Q退出):q

***************************************************************************
                              感谢您的使用!                               

**从这个博客开始,笔者就直接贴markdown上来了,本篇源文件下载链接github链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值