python语言程序设计(MOOC 嵩天)第四章 程序整理(0213)

第四章

练习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)
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值