PyCharm

  • 第一课:黄金大作战
  • 1.0 黄金期货
  • 1.1 追加人民币金额
  • 2.0追加铂金金额
  • 2.1 追加循环
  • 3.0追加函数编写
  • 3.1函数lambda化
  • 3.2代码main函数
  • 第二课:绘制图形
  • 1.0用函数画五角星
  • 1.1 用函数方法画一个可以定义颜色与粗细五角星
  • 1.2 用递归的方法画一个嵌套五角星
  • 2.0 画一棵标准分形树
  • 2.1 画一个棵随机分形树
  • 第三课:计算问题
  • 1.0计算BMI与BMR的基础工作
  • 1.1 用户进行输入,并进行函数化
  • 1.2用户在一行中进行输入,并带单位的信息的输出
  • 2.0异常处理
  • 2.1 提示体重情况
  • 3.0 存钱计算
  • 3.1使用列表保存每周金额存入
  • 3.2 使用for循环
  • 3.3使用函数


编写代码步骤:确定问题->算法设计->算法实现->测试->验证

用python去解决问题,有的相对计较基础,可以作为对基础知识的复习

第一课:黄金大作战

1.0 黄金期货

#定义常量与变量(重量转换)
OUNCE_VS_GRAM = 31.1035
xau_usd_ounce = 1273.06


#克数输入
gram_str_value = input('请输入黄金重量(g):')

#将字符串转换为数字
gram_value = eval(gram_str_value)

# 金额计算
usd_value = gram_value/OUNCE_VS_GRAM*xau_usd_ounce

# 输出结果
print('美元(USD)金额是:', usd_value)

1.1 追加人民币金额

#定义常量与变量(重量转换)
OUNCE_VS_GRAM = 31.1035
xau_usd_ounce = 1273.06
usd_vs_rmb = 6.6533

#克数输入
gram_str_value = input('请输入黄金重量(g):')

#将字符串转换为数字
gram_value = eval(gram_str_value)

# 金额计算
usd_value = gram_value/OUNCE_VS_GRAM*xau_usd_ounce
rmb_value = usd_value*usd_vs_rmb

# 输出结果
print('人民币(RMB)金额是:', rmb_value)

2.0追加铂金金额

#定义常量与变量(重量转换)
OUNCE_VS_GRAM = 31.1035
xau_usd_ounce = 1273.06
xpt_usd_ounce = 915.03
usd_vs_rmb = 6.6533

#克数输入如100au
input_str_value = input('请输入带金属名的重量(g):')
metal = input_str_value[-2:]
gram_str_value = input_str_value[:-2]

#将字符串转换为数字
gram_value = eval(gram_str_value)
if metal == "au":  #黄金
    usd_value = gram_value / OUNCE_VS_GRAM * xau_usd_ounce
    rmb_value = usd_value * usd_vs_rmb
elif metal == "pt":#铂金
    usd_value = gram_value / OUNCE_VS_GRAM * xpt_usd_ounce
    rmb_value = usd_value * usd_vs_rmb
else:
    rmb_value = "非支持金属:" + metal

# 输出结果
print('人民币(RMB)金额是:', rmb_value)

2.1 追加循环

#定义常量与变量(重量转换)
OUNCE_VS_GRAM = 31.1035
xau_usd_ounce = 1273.06
xpt_usd_ounce = 915.03
usd_vs_rmb = 6.6533

#克数输入如100au
input_str_value = input('请输入带金属名的重量(g),退出请输入q:')
while input_str_value != "q":
    metal = input_str_value[-2:]
    gram_str_value = input_str_value[:-2]

    #将字符串转换为数字
    gram_value = eval(gram_str_value)
    if metal == "au":
        usd_value = gram_value / OUNCE_VS_GRAM * xau_usd_ounce
        rmb_value = usd_value * usd_vs_rmb
    elif metal == "pt":
        usd_value = gram_value / OUNCE_VS_GRAM * xpt_usd_ounce
        rmb_value = usd_value * usd_vs_rmb
    else:
        rmb_value = "非支持金属:" + metal

    # 输出结果
    print('人民币(RMB)金额是:', rmb_value)
    print("***************************************************")
    input_str_value = input('请输入带金属名的重量(g),退出请输入q:')

print("程序已退出")

3.0追加函数编写

#定义常量与变量(重量转换)
OUNCE_VS_GRAM = 31.1035
xau_usd_ounce = 1273.06
xpt_usd_ounce = 915.03
usd_vs_rmb = 6.6533

#定义计算函数
def futures_value(gramvalue,metalounceusd,rate):
    output = gramvalue/OUNCE_VS_GRAM * metalounceusd * rate
    return output


#克数输入如100au
input_str_value = input('请输入带金属名的重量(g),退出请输入q:')
while input_str_value != "q":
    metal = input_str_value[-2:]
    gram_str_value = input_str_value[:-2]

    #将字符串转换为数字
    gram_value = eval(gram_str_value)
    if metal == "au":
        rmb_value = futures_value(gram_value,xau_usd_ounce,usd_vs_rmb)
        #usd_value = gram_value / OUNCE_VS_GRAM * xau_usd_ounce
        #rmb_value = usd_value * usd_vs_rmb
    elif metal == "pt":
        rmb_value = futures_value(gram_value,xpt_usd_ounce,usd_vs_rmb)
        #usd_value = gram_value / OUNCE_VS_GRAM * xpt_usd_ounce
        #rmb_value = usd_value * usd_vs_rmb
    else:
        rmb_value = "非支持金属:" + metal

    # 输出结果
    print('人民币(RMB)金额是:', rmb_value)
    print("***************************************************")
    input_str_value = input('请输入带金属名的重量(g),退出请输入q:')

print("程序已退出")

3.1函数lambda化

#定义常量与变量(重量转换)
OUNCE_VS_GRAM = 31.1035
xau_usd_ounce = 1273.06
xpt_usd_ounce = 915.03
usd_vs_rmb = 6.6533


#定义计算函数
"""
def futures_value(gramvalue,metalounceusd,rate):
    output = gramvalue/OUNCE_VS_GRAM * metalounceusd * rate
    return output
"""
futures_value = lambda gramvalue,metalounceusd,rate:gramvalue/OUNCE_VS_GRAM * metalounceusd * rate


#克数输入如100au
input_str_value = input('请输入带金属名的重量(g),退出请输入q:')
while input_str_value != "q":
    metal = input_str_value[-2:]
    gram_str_value = input_str_value[:-2]

    #将字符串转换为数字
    gram_value = eval(gram_str_value)
    if metal == "au":
        rmb_value = futures_value(gram_value,xau_usd_ounce,usd_vs_rmb)
        #usd_value = gram_value / OUNCE_VS_GRAM * xau_usd_ounce
        #rmb_value = usd_value * usd_vs_rmb
    elif metal == "pt":
        rmb_value = futures_value(gram_value,xpt_usd_ounce,usd_vs_rmb)
        #usd_value = gram_value / OUNCE_VS_GRAM * xpt_usd_ounce
        #rmb_value = usd_value * usd_vs_rmb
    else:
        rmb_value = "非支持金属:" + metal

    # 输出结果
    print('人民币(RMB)金额是:', rmb_value)
    print("***************************************************")
    input_str_value = input('请输入带金属名的重量(g),退出请输入q:')

print("程序已退出")

3.2代码main函数

#定义常量与变量(重量转换)
OUNCE_VS_GRAM = 31.1035
xau_usd_ounce = 1273.06
xpt_usd_ounce = 915.03
usd_vs_rmb = 6.6533

def main():
    input_str_value = input('请输入带金属名的重量(g),退出请输入q:')
    #克数输入如100au
    while input_str_value != "q":

        metal = input_str_value[-2:]
        gram_str_value = input_str_value[:-2]

        #将字符串转换为数字
        gram_value = eval(gram_str_value)
        if metal == "au":
            rmb_value = futures_value(gram_value,xau_usd_ounce,usd_vs_rmb)
            #usd_value = gram_value / OUNCE_VS_GRAM * xau_usd_ounce
            #rmb_value = usd_value * usd_vs_rmb
        elif metal == "pt":
            rmb_value = futures_value(gram_value,xpt_usd_ounce,usd_vs_rmb)
            #usd_value = gram_value / OUNCE_VS_GRAM * xpt_usd_ounce
            #rmb_value = usd_value * usd_vs_rmb
        else:
            rmb_value = "非支持金属:" + metal

        # 输出结果
        print('人民币(RMB)金额是:', rmb_value)
        print("***************************************************")
        input_str_value = input('请输入带金属名的重量(g),退出请输入q:')

    print("程序已退出")
#定义计算函数
def futures_value(gramvalue,metalounceusd,rate):
    output = gramvalue/OUNCE_VS_GRAM * metalounceusd * rate
    return output
#futures_value = lambda gramvalue,metalounceusd,rate:gramvalue/OUNCE_VS_GRAM * metalounceusd * rate


if __name__ == '__main__':
    main()

第二课:绘制图形

1.0用函数画五角星

import turtle

def main():
    #边长长度
    size_value = 100

    #第一条边
    turtle.forward(size_value)
    turtle.right(144)

    #第二条边
    turtle.forward(size_value)
    turtle.right(144)

    #第三条边
    turtle.forward(size_value)
    turtle.right(144)

    # 第四条边
    turtle.forward(size_value)
    turtle.right(144)

    # 第五条边
    turtle.forward(size_value)
    turtle.right(144)

    #点击退出
    turtle.exitonclick()
if __name__ == "__main__":
    main()

1.1 用函数方法画一个可以定义颜色与粗细五角星

import turtle


#定义函数
def draw_pentagram(size_value):
    count =1  #计数器
    while count <= 5:
        turtle.forward(size_value)
        turtle.right(144)
        count += 1

def main():
    #边长长度
    size_value = 200

    turtle.up()#提起画笔
    turtle.backward(size_value/2)  #画笔向后移动100距离
    turtle.pendown()#画笔落下
    turtle.pensize(3)#粗细,默认为1
    turtle.color("red")
    draw_pentagram(size_value)
    
    #点击退出
    turtle.exitonclick()
if __name__ == "__main__":
    main()

1.2 用递归的方法画一个嵌套五角星

import turtle

#定义函数
def draw_pentagram(size_value):
    count =1  #计数器
    while count <= 5:
        turtle.forward(size_value)
        turtle.right(144)
        count += 1

#递归
def draw_recursize_pentagram(size_value,size_init,count):
    turtle.penup()
    turtle.backward(size_value/2)
    turtle.pendown()

    draw_pentagram(size_value)#画五角星

    turtle.penup()
    turtle.forward(size_value / 2)
    turtle.left(90)
    turtle.forward(size_init/2*0.1)#这样不会叠加在一起
    turtle.right(90)
    turtle.pendown()

    count += 1
    #turtle.forward(size_value/2)
    print("第"+str(count) + "个五角星,五角星的边长:"+str(size_value)+",最大边长<="+str(size_init*3))
    size_value += size_init/2
    if size_value <= size_init*3:
        draw_recursize_pentagram(size_value,size_init,count)

def main():
    #边长长度
    size_value = 100
    turtle.speed(size_value/2)
    turtle.pensize(3)#粗细,默认为1
    turtle.color("red")
    draw_recursize_pentagram(size_value,size_value,0)

    #点击退出
    turtle.exitonclick()
if __name__ == "__main__":
    main()

2.0 画一棵标准分形树

  • 树干初始长度50
  • 每次绘制完树枝时,画笔右转20度
  • 绘制下一段树枝时,长度减少8.重复6-7次操作直至终止
  • 终止条件:树枝长度小于3,此时为顶端树枝
  • 达到终止条件后,画笔左转40度,以当前长度减少8,绘制树枝
  • 右转20度,回到原方向,退回上一个节点,直至操作完成
import turtle

def draw_branch(branch_length,pensize):
    rate = 20#角度20
    if branch_length > 3:
        turtle.pensize(pensize)#画笔宽度
        turtle.forward(branch_length)
        print("向前",branch_length)

        turtle.right(rate)
        print("右转",str(rate))
        #turtle.forward(branch_length-8)
        draw_branch(branch_length-8,pensize)

        #左侧枝叶绘画
        turtle.left(rate*2)
        print("左转", str(rate*2))
        draw_branch(branch_length-8,pensize)

        #返回之前树枝
        turtle.right(rate)
        turtle.backward(branch_length)
        print("左后", branch_length)

def main():
    branch_length = 50
    turtle.left(90)
    turtle.color("brown")
    draw_branch(branch_length,1)
    turtle.exitonclick()

if __name__ == "__main__":
    main()

2.1 画一个棵随机分形树

  • 1.树干初始长度为50
  • 2.每次绘制完树枝时,画笔右转30度乘0.3-1.0之间的随机数a
  • 3.绘制下一段树枝时,长度减少5。每次减少笔的粗细除1.5重复9-10操作直到终止
  • 4.当树枝长度小于等于15时,笔的颜色变为绿色。否则变为棕色
  • 5.终止条件:树枝长度小于3,此时为顶端树枝
  • 6.达到终止条件后,画笔左转2倍的a度,以当前长度减少5,绘制树枝
  • 7.右转a度,回到原方向,退回上一个节点,直到操作完成
import turtle
import random
def draw_branch(branch_length,pensize):
    rate = 30*random.uniform(0.3,1.0)#角度20
    if branch_length > 3:
        turtle.pensize(pensize)#画笔宽度

        if branch_length <= 15:
            turtle.color("green")
        else:
            turtle.color("brown")

        turtle.forward(branch_length)
       # print("向前",branch_length)

        turtle.right(rate)
        #print("右转",str(rate))
        #turtle.forward(branch_length-8)
        pensize /= 1.5
        draw_branch(branch_length-5,pensize)

        #左侧枝叶绘画
        turtle.pensize(pensize)
        turtle.left(rate*2)
        #print("左转", str(rate*2))
        draw_branch(branch_length-5,pensize)

        #返回之前树枝
        turtle.right(rate)
        if branch_length <= 15:
            turtle.color("green")
        else:
            turtle.color("brown")
        turtle.backward(branch_length)
        pensize *= 1.5
        #print("左后", branch_length)

def main():
    branch_length = 50
    turtle.left(90)

    turtle.speed(1000)

    turtle.penup()
    turtle.backward(100)
    turtle.pendown()

    turtle.color("brown")
    draw_branch(branch_length,8)
    turtle.exitonclick()

if __name__ == "__main__":
    main()

第三课:计算问题

1.0计算BMI与BMR的基础工作

#计算BMI与BMR的基础工作
def main():
    #性别
    gender = "F"
    #身高
    height = 162
    #体重
    weight = 52
    #年龄
    age = 24

    bmi = weight/(height/100)**2
    print("BMI:"+str(bmi))

    if gender == 'M':
        bmr = (13.7*weight) + (5*height)- (6.8*age)+66
    elif gender == 'F':
        bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
    else:
        bmr = -1
    if bmr!= -1:
        print("BMR:"+str(bmr)+"(千卡路里)="+str(bmr*4.186)+"(千焦耳)")
    else:
        print("输入出错")


if __name__ == '__main__':
    main()

1.1 用户进行输入,并进行函数化

#1.1 用户进行输入,并改进函数化
def main():
    #性别
    gender = input("性别(输入M或F):")
    #身高
    height = input("身高(cm):")
    height = float(height)
    #体重
    weight = input("体重(kg):")
    weight = float(weight)
    #年龄
    age = input("年龄(year):")
    age = float(age)

    bmi = bmi_getvalue(height,weight)
    print("BMI:"+str(bmi))

    bmr = bmr_getvalue(gender,height,weight,age)
    if bmr!= -1:
        print("BMR:"+str(bmr)+"(千卡路里)="+str(bmr*4.186)+"(千焦耳)")
    else:
        print("输入出错")

def bmi_getvalue(height,weight):
    bmi = weight/(height/100)**2
    return bmi

def bmr_getvalue(gender,height,weight,age):
    if gender == 'M' or gender == 'm':
        bmr = (13.7*weight) + (5*height)- (6.8*age)+66
    elif gender == 'F'or gender == 'f':
        bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
    else:
        bmr = -1
    return bmr

if __name__ == '__main__':
    main()

1.2用户在一行中进行输入,并带单位的信息的输出

#1.2 用户在一行中进行输入,并带单位的信息的输出
def main():
    input_str_q = ""
    while input_str_q != "q":
        input_str_value = input("性别(输入M或F): 身高(cm): 体重(kg): 年龄(year):")
        input_str_list = input_str_value.split(" ")#以空格进行切割
        #性别
        gender = input_str_list[0]
        #身高
        height = float(input_str_list[1])

        #体重
        weight = float(input_str_list[2])

        #年龄
        age = float(input_str_list[3])

        print("性别:{}. 身高:{}(cm). 体重:{}(Kg). 年龄:{}岁".format(gender,height,weight,age))

        bmi = bmi_getvalue(height,weight)
        print("BMI:{}".format(round(bmi,2)))  #round()  对小数进行处理

        bmr = bmr_getvalue(gender,height,weight,age)
        if bmr!= -1:
            print("BMR:{}(千卡)".format(round(bmr,3)))
        else:
            print("输入出错")
        input_str_q = input("回车继续,按q退出:".lower())
def bmi_getvalue(height,weight):
    bmi = weight/(height/100)**2
    return bmi

def bmr_getvalue(gender,height,weight,age):
    if gender == 'M' or gender == 'm':
        bmr = (13.7*weight) + (5*height)- (6.8*age)+66
    elif gender == 'F'or gender == 'f':
        bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
    else:
        bmr = -1
    return bmr

if __name__ == '__main__':
    main()

2.0异常处理

def main():
    input_str_q = ""
    while input_str_q != "q":
        input_str_value = input("性别(输入M或F): 身高(cm): 体重(kg): 年龄(year):")

        try:
            input_str_list = input_str_value.split(" ")
            #性别
            gender = input_str_list[0]
            #身高
            height = float(input_str_list[1])
            #体重
            weight = float(input_str_list[2])
            #年龄
            age = float(input_str_list[3])
            print("性别:{}. 身高:{}(cm). 体重:{}(Kg). 年龄:{}岁".format(gender,height,weight,age))

            bmi = bmi_getvalue(height,weight)
            print("BMI:{}".format(round(bmi,2)))  #round()  对小数进行处理
            bmr = bmr_getvalue(gender,height,weight,age)
            if bmr != -1:
                print("BMR:{}(千卡)".format(round(bmr, 3)))
            else:
                print("输入出错")

        except IndexError:
            print("输入信息不足,请注意空格或内容")
        except ZeroDivisionError:
            print("请勿输入0")
        except:
            print("程序错误,请联系程序员")
        finally:
            input_str_q = input("回车继续,按q退出:".lower())

def bmi_getvalue(height,weight):
    bmi = weight/(height/100)**2
    return bmi

def bmr_getvalue(gender,height,weight,age):
    if gender == 'M' or gender == 'm':
        bmr = (13.7*weight) + (5*height)- (6.8*age)+66
    elif gender == 'F'or gender == 'f':
        bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
    else:
        bmr = -1
    return bmr

if __name__ == '__main__':
    main()

2.1 提示体重情况

#1.2 用户在一行中进行输入,并带单位的信息的输出
def main():
    input_str_q = ""
    while input_str_q != "q":
        input_str_value = input("性别(输入M或F): 身高(cm): 体重(kg): 年龄(year):")

        try:
            input_str_list = input_str_value.split(" ")
            #性别
            gender = input_str_list[0]
            #身高
            height = float(input_str_list[1])
            #体重
            weight = float(input_str_list[2])
            #年龄
            age = float(input_str_list[3])
            print("性别:{}. 身高:{}(cm). 体重:{}(Kg). 年龄:{}岁".format(gender,height,weight,age))

            bmi = bmi_getvalue(height,weight)
            print("BMI:{}".format(round(bmi,2)) + bmi_status(bmi_value))  #round()  对小数进行处理

            bmr = bmr_getvalue(gender,height,weight,age)
            if bmr != -1:
                print("BMR:{}(千卡)".format(round(bmr, 3)))
            else:
                print("输入出错")

        except IndexError:
            print("输入信息不足,请注意空格或内容")
        except ZeroDivisionError:
            print("请勿输入0")
        except:
            print("程序错误,请联系程序员")
        finally:
            input_str_q = input("回车继续,按q退出:".lower())

def bmi_getvalue(height,weight):
    bmi = weight/(height/100)**2
    return bmi

def bmr_getvalue(gender,height,weight,age):
    if gender == 'M' or gender == 'm':
        bmr = (13.7*weight) + (5*height)- (6.8*age)+66
    elif gender == 'F'or gender == 'f':
        bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
    else:
        bmr = -1
    return bmr

def bmi_status(bmi_value):
    if bmi_value < 18.5:
        return "体重过轻"
    elif bmi_value >= 18.5 and bmi_value < 24:
        return "体重正常"
    elif bmi_value >= 24 and bmi_value < 27:
        return "体重过重"
    elif bmi_value >= 27 and bmi_value < 30:
        return "轻度肥胖"
    elif bmi_value >= 30 and bmi_value < 35:
        return "中度肥胖"
    elif bmi_value >= 35:
        return "重度肥胖"
    else:
        return bmi_value

if __name__ == '__main__':
    main()

3.0 存钱计算

"""
    作者:徐康敏
    功能:存钱计算
    版本:1.0
    日期:2017/10/09
"""


def main():
    """
        主函数
    """
    perweek_saving = 10     # 每周的存入的金额
    perweek_use = 200
    i = 1                   # 记录周数
    increase_money = 10     # 递增的金额
    total_week = 52         # 总共的周数
    total_saving = 2000        # 账户累计

    while i <= total_week:
        # 存钱操作
        # total_saving = total_saving + perweek_saving
        total_saving = total_saving + perweek_saving - perweek_use

        # 输出信息
        print('第{}周,存入{}元,花费{}元,账户累计{}元'.format(i, perweek_saving,perweek_use,total_saving))

        # 更新下一周的存钱金额
        perweek_saving += increase_money
        i += 1


if __name__ == '__main__':
    main()

3.1使用列表保存每周金额存入

"""
    作者:徐康敏
    功能:存钱计算
    版本:2.0
    日期:2017/10/09
    功能:2.0 使用列表保存每周金额存入
"""
import math

def main():
    """
        主函数
    """
    perweek_saving = 10     # 每周的存入的金额
    perweek_use = 200
    i = 1                   # 记录周数
    increase_money = 10     # 递增的金额
    total_week = 52         # 总共的周数
    init_saving = 2000     # 账户累计
    money_list = []         # 记录每周存款数的列表

    while i <= total_week:
        # 存钱操作
        # total_saving = total_saving + perweek_saving
        #total_saving = total_saving + perweek_saving - perweek_use

        money_list.append(perweek_saving-perweek_use)
        total_saving = math.fsum(money_list)

        # 输出信息
        print('第{}周,存入{}元,花费{}元,账户累计{}元'.format(i, perweek_saving,perweek_use,total_saving+init_saving))

        # 更新下一周的存钱金额
        perweek_saving += increase_money
        i += 1

    #print(money_list)

if __name__ == '__main__':
    main()

3.2 使用for循环

"""
    作者:徐康敏
    功能:存钱计算
    版本:2.1
    日期:2017/10/09
    功能:2.0 使用列表保存每周金额存入
         2.1 使用for循环
"""
import math

def main():
    """
        主函数
    """
    perweek_saving = 10     # 每周的存入的金额
    perweek_use = 200
    #i = 1                   # 记录周数
    increase_money = 10     # 递增的金额
    total_week = 52         # 总共的周数
    init_saving = 2000     # 账户累计
    money_list = []         # 记录每周存款数的列表

    for i in range(total_week):
        # 存钱操作
        # total_saving = total_saving + perweek_saving
        #total_saving = total_saving + perweek_saving - perweek_use

        money_list.append(perweek_saving-perweek_use)
        total_saving = math.fsum(money_list)

        # 输出信息
        print('第{}周,存入{}元,花费{}元,账户累计{}元'.format(i+1, perweek_saving,perweek_use,total_saving+init_saving))

        # 更新下一周的存钱金额
        perweek_saving += increase_money
        #i += 3

    #print(money_list)

if __name__ == '__main__':
    main()

3.3使用函数

"""
    作者:徐康敏
    功能:存钱计算
    版本:3.0
    日期:2017/10/09
    功能:2.0 使用列表保存每周金额存入
         2.1 使用for循环
         3.0 使用函数,根据用户输入的日期,判断距离今天有几周,然后输出相应的存款金额
"""
import math

#全局变量
money_list = []
init_saving = 0
#lesszero = 0

def yourmoney_afterweeks(perweek_saving,increase_money,perweek_use,total_week):
    global money_list
    for i in range(total_week):
        money_list.append(perweek_saving-perweek_use)
        total_saving = math.fsum(money_list)
        perweek_saving += increase_money
        #print('第{}周,存入{}元,花费{}元,账户累计{}元'.format(i + 1, perweek_saving, perweek_use, total_saving + init_saving))
    return total_saving


def main():
    global init_saving#,lesszero
    input_str_value = input("已有存款,初始周存款,周递增,周花费,存款周数:")
    input_str_list = input_str_value.split(" ")#格式通过空格分割
    init_saving = float(input_str_list[0])
    perweek_saving = float(input_str_list[1])
    increase_money = float(input_str_list[2])
    perweek_use = float(input_str_list[3])
    total_week = int(input_str_list[4])
    total_saving = yourmoney_afterweeks(perweek_saving,increase_money,perweek_use,total_week)
    """
    for i in range(len(money_list)):
        if math.fsum(money_list[:i+1]) + init_saving < 0:
            lesszero = i+1
            print("{}周会遇到负存款".format(i+1))
            break
    print(lesszero)
    """
    print(total_saving + init_saving)


    #print("已有存款{}元,每周基础存款{}元,每周递增金额{}元,每周花费{}元,存款周数{},存款后{}元".format(init_saving,perweek_saving,increase_money,perweek_use,total_saving+init_saving))


if __name__ == '__main__':
    main()