python实现BMR计算器,日历计算,存钱挑战,分形树和五角星绘制等

"""
    功能:BMR计算器
    版本:4.0
  
"""

def main():
    """
    主函数

    """
    y_or_n = input("是否退出程序(y/n)?")

    while y_or_n != "y":

        print("请输入以下信息,用空格分割")
        input_str = input("性别 体重(kg) 身高(cm) 年龄: ")
        # 使用split函数之后,字符串转换为list列表类型,此时需要进行赋值给一个新的变量
        str_list = input_str.split()
        try:
            gender = str_list[0]
            weight = float(str_list[1])
            height = float(str_list[2])
            age = int(str_list[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:
                # 分模块输出format
                print("性别:{},体重:{},身高:{},年龄:{}".format(gender,weight,height,age))
                # 不要忘记{}这个符号,否则不输出数据
                print("基础代谢率(大卡:){}".format(bmr))
                # print("基础代谢率(大卡:)", gender, bmr)

                # 注意输出的顺序问题
                print("{2},{0},{1}".format(1,2,3,4))
            else:
                print("不支持的类型!")
        # 注意try语句后面执行的语句是被包含的关系,except语句是不同于包含语句的缩进格式
        except ValueError:
            print("格式输入错误!")
        except IndexError:
            print("格式输入错误!")
        except:
            print("不支持的格式输入!")


        # 为什么要在循环内?  方便调用循环while  如果没有输入的语句,就会死循环
        print()   # 输出空行
        y_or_n = input("是否退出程序?(y/n)")

if __name__ == '__main__':
    main()

日历功能:输入某年某月末日,判断这一天是一年的第几天
还有一些知识点

"""
tuple 元组  不可以修改、删除、添加元素,数据更加安全
其余和list列表特性相同
他们都可以包含不同的数据类型,通常用元组表示不同数据类型,列表通常由相同类型数据组成
元组表示的是结构,列表表示的是顺序


tuple = ('a','b','c','d')  (1,2,3,4)
list =['a','b','c']    [1,2,3,4]

版本4.0
功能:输入某年某月末日,判断这一天是一年的第几天

介绍集合
s = {1,2,3,4}    大括号表示
特性:集合set中的元素都是唯一的,不能重复,不同于元组tuple和列表list
s-t 或者 s.different(t)    # 返回在集合s中的但是不在t中的元素
s&t 或者 s.intersection(t) # 返回同时在集合s和集合t中的元素
s|t 或者 s.union(t)        # 返回集合s和t中的所有元素(自动滤除重复的元素)
s^t 或者 s.symmetric_different(t) # 返回集合s和集合t中的元素,但是不包含两个集合同时包含的元素

介绍字典类型dict
字典是“键——值”数据项的组合  key——value   每个元素是一个键值对
如:身份证号(键)——个人信息(值)(键是唯一的)
字典类型数据是通过   “映射”   来查找值的信息

d[key] = value
访问:d[key]
删除:del d[key]
key是否在字典中: key in d

遍历:

for key in dict.keys()   #遍历所有的key
for value in dict.values()  #遍历所有的value
for item in dict.items()   #遍历所有的key:value
"""
# 如果导入的是datetime   后面的调用中需要写datetime.datatime
import datetime
def function(year,month,day):
    date = datetime.date(year,month,day)
    return date.strftime('%j')      #%j十进制表示的每年的第几天
    # 使用内置函数(strftime是一种计算机函数,根据区域设置格式化本地时间/日期,函数的功能将时间格式化,或者说格式化一个时间字符串。
print(function(2100,12,31))         # 366

存钱挑战和一些知识点

"""
    版本:5.0

    list 列表操作
    list.append(xx)   # 添加list列表元素xx
    list.sort()       # 对列表元素排序
    list.reverse()    # 将列表元素逆序
    list.index(x)     # 返回第一次出现元素x的索引值
    list.insert(i,x)  # 在位置i处插入新元素x
    list.count(x)     # 返回元素x在列表中的数量
    list.remove(x)    # 删除列表中第一次出现的元素x
    list.pop(i)       # 取出列表中i位置上的元素,并将其删除


    math库
    math.pi          # 圆周率
    math.ceil(x)     # 对x向上取整 即大于x的最小整数
    math.floor(x)    # 对x向下取整 即小于x的最大整数
    
    math.pow(x,y)    # x的y次方
    math.sqrt(x)     # x的平方根
    math.fsum(list)  # 对集合内的元素求和

    for 循环
    for i in list:
            语句

    for i in range(x):    # i循环x次数
            语句
"""
import math

# datatime.datatime.now()   获取当前时间【2019/07/20】 是时间类型
# datatime.datatime.isocalendar()  解析时间字符串
import datetime

# 申明全局变量
save_mongey = 0

def save_money_in_weeks(money_per_week, increase_money, total_week):

    # 为了调用全局变量,需要global进行声明
    global save_money
    global save_money_list
    money_list = []  # 记录每周存钱数的列表
    save_money_list = [] # 记录每周账户累计
    for i in range(total_week):  #a需要更新i的值
        # save_money += money_per_week
        money_list.append(money_per_week)
        save_money = math.fsum(money_list)
        save_money_list.append(save_money)


        print("第{}周存入{}元,总计{}元".format(i+1, money_per_week, save_money))
        # 更新下周存钱金额
        money_per_week += increase_money

    # 传递参数至调用的函数
    return save_money_list

def main():
    money_per_week = float(input("请输入每周存入的的金额:"))  # 每周存入金额
    increase_money = float(input("请输入每周递增的的金额:"))  # 递增的金额
    total_week = int(input("请输入总共周数:"))  # 总共52周

    save_money_in_weeks(money_per_week, increase_money, total_week)

    input_data_str = input("请输入日期(yyyy/mm/dd):")
    # datetime.datetime.strptime 是datatime的将字符串转换为时间类型,进行读取年月日的函数  %Y代表2019这样的四位数年份,%y代表19这样的两位数年份,%m代表月份,%d代表天数
    # datetime.datetime.strftime 将时间类型转换成字符串,并格式化输出
    input_data = datetime.datetime.strptime(input_data_str,"%Y/%m/%d")

    week_num = input_data.isocalendar()[1]   # 读取时间数组中的周数  input_data的数组输出形式是[yyyy,mm,dd]数组中的周数是第2个元素,写作[1]
    print(save_money_list[week_num-1])
    print("接收调用的函数中传递的全局变量",save_money)

if __name__ == '__main__':
    main()

分形树和五角星绘制等

'''
    版本3.0
    迭代循环五角星的绘制
'''

import turtle

def draw_recursive_pentagram(size):
    """
        迭代绘制

    """
    count = 1
    while count <= 5:
        turtle.forward(size)
        turtle.right(144)
        count += 1
    ### 更新参数
    size += 50
    if size <= 500:
        # 这句需要跳出循环体才行
        draw_recursive_pentagram(size)
    turtle.exitonclick()

def m():

    turtle.penup()
    turtle.backward(150)
    turtle.pendown()
    turtle.pensize(5)
    turtle.pencolor('red')
    draw_recursive_pentagram(50)


m()

'''
    版本4.0
    分形树的绘制
'''

import turtle

def draw_branch(branch_length):
    if branch_length >= 5:
        turtle.forward(branch_length)
        turtle.right(20)
        draw_branch(branch_length-15)

        turtle.left(40)
        draw_branch(branch_length-15)

        turtle.right(20)
        turtle.backward(branch_length)



def m():


    # 图形转换角度向上
    turtle.left(90)
    # 笔抬起来
    turtle.penup()
    # 往下移动300个单位
    turtle.backward(300)
    # 笔放下来
    turtle.down()
    # 线条颜色
    turtle.pencolor('red')
    # 开始调用函数
    draw_branch(130)
    # 绘制结束
    turtle.exitonclick()

m()

'''
    版本5.0
   自己画图
'''

import turtle

def draw_branch(branch_length):

    turtle.forward(branch_length)
    turtle.right(90)
    turtle.forward(branch_length)
    turtle.right(90)
    turtle.forward(branch_length)
    turtle.right(90)
    turtle.forward(branch_length)
    turtle.right(90)

def draw_angle(angle):
    turtle.penup()
    turtle.forward(30)

    turtle.down()

    turtle.left(angle)

# 循环断点
i  = int(input(":"))
def cycle():
    global  i
    i -= 50
    if i > 0:
        # 开始调用函数
        draw_branch(i)
        draw_angle(30)
        cycle()

def m():
    # 笔抬起来
    turtle.penup()
    turtle.left(180)
    # 往hou移动300个单位
    turtle.backward(300)

    # 笔放下来
    turtle.down()
    # 线条颜色
    turtle.pencolor('red')

    cycle()

    # 绘制结束
    turtle.exitonclick()

m()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值