三十四.Python期末习题总结

一.通过键盘输入三名学生的身高分别是1.60cm,1.75cm,1.69cm,编程求出该三名学生的平均身高

import math
num1 = eval(input("第一名身高是:"))
num2 = eval(input("第二名身高是:"))
num3 = eval(input("第三名身高是:"))
avg_num = (num1+ num2 + num3)/ 3
print("他们的平均身高是:{:.2f}".format(avg_num))

二、x=(1 + 32) * (16 mod 7 ) / 7
请将上述数学表达式用Python程序写出来,并运算结果

x = (1+pow(3,2))*(16%7)/7
print("值为{:.2f}".format(x))

三、计算基础代谢率
基础代谢率是指我们在安静状态下(通常为静卧状态)消耗的最低热量,人的其他活动都建立在这个基础上。
计算公式:
BMR(男)=(13.7体重(kg))+(5.0身高(cm))-(6.8年龄)+66
BMR(女)=(9.6
体重(kg))+(1.8身高(cm))-(4.7年龄)+655
1、请分别计算身高为175cm,体重70kg,年龄20岁的男性和女性的基础代谢率,并将其全部输出显示。
2、改进程序,键盘输入性别为“男”或“女”,输出相应的基础代谢率。
3、改进程序,键盘输入体重、身高、年龄,性别。计算其基础代谢率并输出显示。

a = (13.7*70) + (5*175) - (6.8*20) + 66
b = (9.6*70) + (1.8*175) - (4.7*20) + 655
print("男女分别为:{:},{:}".format(a,b))
s = input("请输入男女:")
if(s=="男"):
    a=(13.7*70) + (5*175) - (6.8*20) + 66
else:
    a = (9.6*70) + (1.8*175) - (4.7*20) + 655
print("基础代谢率为:{:}".fotmat(a))  
tz = input("请输入体重:")
sg = input("请输入身高:")
nl = input("请输入年龄:")
xb = input("请输入性别:")
if(xb=="男"):
  a = (13.7*eval(tz[0:-2])) + (5.0*eval(sg[0:-2])) - (6.8*eval(nl)) + 66
else:
  a = (9.6*eval(tz[0:-2])) + (1.8*eval(sg[0:-2])) - (4.7*eval(nl)) + 655
  print("基础代谢率为:{:}".format(a))

四、整数序列求和:其他课程中我们已经学习了1+2+3+……+100,试着用Python语言编程实现以下,比较以下与C语言编写程序有什么不一样的地方?

n = input("请输入整数N:")
sum = 0
for i in range (int(n)):
   sum += i + 1
print("1到N的求和结果: ",sum)

五、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半多一个。到第5天早上想再吃时,见只剩下一个桃子了。求第一天共摘下多少个桃子?

n = 1
for i in range(5,0,-1):
    n = (n+1)<<1
print(n)

六、汇率兑换问题
请参考教材中P34-36中温度转换程序,按照IPO的设计思路,实现人民币与美元之间的兑换,按照1美元=6元人民币汇率编写一个美元和人民币的双向兑换程序。

M = input("请输入带有符号的金钱: ")
if M[-1] in ["$"]:
    D = (eval(M[0:-1]))*6
    print("转换后的钱是{:.2f}¥".format(D))
elif M[-1] in ['¥']:
    R = (eval(M[0:-1]))/6
    print("转换后的金钱是{:.2f}$".format(R))
else:
    print("输入格式错误")

七、回文数判断。设n是一任意自然数,如果n的各位数字反向排列所得自然数与n相等,则n被称为回文数。从键盘输入一个5位数字,请编写程序判断这个数字是不是回文数。

n = input("请输入一个整数: ")
if n[:]==n[::-1]:
    print("该数是回文数")
else:
    print("该数不是回文数")

八、存在字符串“I love Java”,将Java替换为Python,替换后将三个单词分别放到列表中输出。

str1 = "I love Java"
str2 = str1.replace('Java','Python')
str3 = str2.split(",")
print(str3)

九、定义一个字符串“I like Python very much 2333 because Python is very cute 666.”,判别该字符串中数字字符的个数,并将第一次出现的Python替换成你偶像的名字并输出新字符串。

A = "I like Python very much 2333 because Python is very cute 666."
num = 0
for i in A:
    if i.isdigit():
        num = num + 1
print(num)
B = A.replace("Python","坂井泉水")
print(B)

十、简单排序 输入3个数,请利用if 结构按照从大到小的顺序排序。

a = input("第一个数:")
b = input("第二个数:")
c = input("第三个数:")
if a<b:
    a,b=b,a     #始终让a大于b
if b>c:         #前提条件是a>b,如果b>c的话,那就是a>b>c
    print(a,b,c)
elif a>c:        #前提条件是a>b,如果b<c的话,那就是a>c>b
    print(a,c,b)
elif a<c:        #前提条件a>b,如果a<c的话,那就是c<a<b
    print(c,a,b)

十一、猜数游戏 在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“遗憾,太大了”;小于预设的数,显示“遗憾,太小了”,如此循环,直至猜中该数,显示“预测N次,你猜中了!”,其中N是用户输入数字的次数。

n = 1
num = 6
while(True):
    a = eval(input("请输入猜测的值: "))
    if(a>num):
        print("遗憾,太大了")
        n = n + 1
    if(a<num):
        print("遗憾,太小了")
        n = n + 1
    if(a==num):
        print("预测了{}次,你猜中了".format(n))
        break

十二、请利用random库,产生两个0~100(包含0和100)的随机整数a和b,求这两个整数的最大公约数和最小公倍数。
提示:
(1)可以利用random库中的函数
(2)利用“辗转相除法”求最大公约数 方法:对于已知的两个正整数m,n,使得m>n,用较大数m除以较小数n得到余数r,再用出现的余数r(第一余数)去除除数n,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
(3)最小公倍数则利用两数的积除以最大公约数就可以。

from random import randint
a = randint(0,100)
b = randint(0,100)
print("第一个数a是: ",a)
print("第一个数b是: ",b)
a = int(input("请输入一个整数a:"))
b = int(input("请输入一个整数b:"))
c = a*b
if a<b:
    a,b = b,a
temp = a%b
while(temp!=0):
    a = b
    b = temp
    temp = a%b
c = c/b
print("最大公约数为: {},最小公倍数为: {}".format(b,c))

十三、编写程序,输入整数n(n>=0),分别利用for循环和while循环求 n!

n = int(input("请输入一个n: "))
if(n==0):
    total = 1
if(n>0):
    total = 1
    for i in range(n,0,-1): #从列表的下标为n的元素开始,倒序取到下标为0的元素
        total *= i
print("n的阶乘为: ",total)
if(n==0):
    total = 1
if(n>0):
    total = 1
    while(n>=1):
        total *= n
        n-=1
print("n的阶乘为: ", total)

十四、爱因斯坦阶梯问题: 有一个长阶梯,走每步上2阶,最后剩余1阶;如果每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶,只有每步上7阶,最后刚好一阶不剩。
-编写程序求该阶梯至少有多少阶

x = 1
while x<1000:
    if(x % 2 == 1) and (x % 3 == 2) and\
       (x % 5 == 4) and (x % 6 == 5) and(x % 7 == 0):
        print(x)
        x += 1
        break
    else:
        x += 1
print("循环结束")

十五、实现isOdd()函数,参数为整数,如果整数为奇数,返回True,否则返回False。并分别从键盘输入奇数和偶数验证之。

def isOdd(a):
    if a%2==1:
        print("True")
    else:
        print("False")
b = int(input("请输入一个整数:"))
isOdd(b)

十六、实现multi()函数,参数个数不限,返回所有参数的乘积。并验证。例如:
multi(1, 4, 7, 5.2),

def multi():
    a = input("请输入一组数,空格间隔:")
    s = 1
    for i in a.split():    #split函数返回一个列表
        s = s*int(i)
        print(s)
multi()

十七、实现student()函数,参数为学生成绩,个数不确定,返回值为学生成绩的总分、平均分以及人数。并验证。例如学生成绩为70,80,90,输出结果为(240,80.0,3)

def student():
    a = input("请输入一组数,空格间隔:")
    sum = 0
    avr = 0
    no = 0
    for i in a.split():
        sum = sum + int(i)
        no+=1
    avr = sum/no
    print(sum,avr,no)
student()

十八、递归练习,利用递归的方式判断回文数。设n是一个自然数,如果n的各位数字反向排列所得的自然数与n相等,则n被称回文数。从键盘输入一个5位数,请编写程序判断这个数据是不是回文数。

n = eval(input("请输入数据:"))
if str(n)==str(n)[::-1]:
     print("True")
else:
     print("False")

十九、随机密码生成。编写程序,在26个字母大小写和9个数字组成的列表中随机生成10个8位密码。效果如图所示
在这里插入图片描述

import random
for i in range(10):
    print("第",(i+1),"个密码是:",end="")
    for j in range(8):
        a = chr(random.randint(48,57))
        b = chr(random.randint(97,122))
        c = chr(random.randint(65,90))
        if j<7:
            print(random.choice([a,b,c]),end="")
        else:
            print(random.choice([a,b,c]))

二十、重复元素判定。编写一个函数,接受列表作为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变原来列表的值。同时编写调用这个函数和测试结果的程序。运行效果如图所示
在这里插入图片描述

def f(length,a):
    sss=set()
    for t in range(length):
        sss.add(a[t])
    leng = len(sss)
    if(leng==length):
        return False
    else:
        print("重复的个数是{:d}".format(length-leng))
        return True
a = []
item = (input("请输入要放入的列表元素: "))
while item !="":
    a.append(item)
    item=(input("请输入要放入的列表元素:"))
i = len(a)
f(i,a)
  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值