"""
功能: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()