第四章
练习1 BMI指数计算
h,m=eval(input()) #使用‘,’同时获得两个输入
bmi=m/pow(h,2)
who, nat = "", "" #初始化输出为字符串格式
if bmi < 18.5:
who, nat = "偏瘦", "偏瘦"
elif 18.5 <= bmi < 24:
who, nat = "正常", "正常"
elif 24 <= bmi < 25:
who, nat = "正常", "偏胖"
elif 25 <= bmi < 28:
who, nat = "偏胖", "偏胖"
elif 28 <= bmi < 30:
who, nat = "偏胖", "肥胖"
else:
who, nat = "肥胖", "肥胖"
print("BMI数值为:{:.2f}".format(bmi))
print("BMI指标为:国际'{0}',国内'{1}'".format(who, nat))
练习2 圆周率的计算
from random import random,seed
DARTS =eval(input()) #从输入获得总撒点数,原文为1000*1000个
seed(123) #随即序列选定
hits=0.0 #初始化圆内点的个数为0
for i in range (DARTS):
x,y=random(),random() #随机撒点,两次random获得横纵坐标
dist=pow((pow(x,2)+pow(y,2)),0.5) #撒点距离原点的位置
if dist <= 1.0: #距离小于等于1,即点落在院内
hits+=1.0 #命中数加一
pi=4*(hits/DARTS)
print("{:.6f}".format(pi))
练习4 三位水仙花数
第一种 参考答案
s = ""
for i in range(100, 1000):
t = str(i)
if pow(eval(t[0]),3) + pow(eval(t[1]),3) + pow(eval(t[2]),3) == i :
s += "{},".format(i)
print(s[:-1])
第二种 实质上差别不大
s=[]
i=100
while i <=999:
t =str(i)
if pow(eval(t[0]),3)+pow(eval(t[1]),3)+pow(eval(t[2]),3)==i:
s=s+[i]
i=i+1
s=str(s)
print (s[1:-1])
#在取得这个三位数的个十百位时,使用%的模运算会遇到不可知的错误,将之转换为字符串或列表格式很便捷
练习5 用户的三次登陆机会
count=0 #初始化以进入循环
while count<3: #尝试次数为3
name=input()
password=input()
if name == 'Kate'and password == '666666':
print("登录成功!")
break #结束整个while循环
else:
count += 1
if count == 3: #判断这个时候的count
print("3次用户名或者密码均有误!退出程序。")
测验1 四位玫瑰数
这道题的思路和练习中的水仙数接近
难点在于每个位置上数字的提取
但这道题的输出更加简单
第一种 自编
t=''
counter=1000
while counter <= 9999:
t=str(counter)
s=pow(eval(t[0]),4)+pow(eval(t[1]),4)+pow(eval(t[2]),4)+pow(eval(t[3]),4)
if s == counter:
print(counter)
counter+=1
第二种 参考答案
s = ""
for i in range(1000, 10000): #循环方式不同,意义相同
t = str(i)
if pow(eval(t[0]),4) + pow(eval(t[1]),4) + pow(eval(t[2]),4) + pow(eval(t[3]),4) == i :
print(i)
测验2 求100以内素数之和
第一种 自编
counter=3
s=2
while counter<100:
for i in range(2,counter):
if counter%i==0:
break
elif i==counter-1:
s=s+counter
counter+=1
print(s)
当counter=2的时候,这个程序出现了逻辑上的错误,即判断条件存在问题
需要设置 i 的范围 [2,counter-1)
第二种 参考答案
#Prime
def is_prime(n): #定义一个判断数字n是否为素数的函数
for i in range(2,n):
if n%i == 0:
return False
return True
sum = 0 #初始化sum为0
for i in range(2,100): #从2-99循环
if is_prime(i): #每取得一个数,调用函数进行判断
sum += i #函数返回True则sum=sum+i
print(sum)