Python程序设计(第三版)课后题答案 第三章 [约翰·策勒 (著) 人民邮电出版社]

Python程序设计(第三版)课后题答案 第三章

编程练习题

  • 1.编写一个程序,利用球体的半径作为输入,计算体积和表面积。以下是一些可能有用的公式:V=4/3πr^3
    A=4πr^2

答案

def main():  # 球体积表面积
    r = float(input("请输入球体的半径:"))

    area = 4 * math.pi * r * r  # 计算表面积
    volume = 4 / 3 * math.pi * r * r * r  # 计算体积
    print("球体的体积是:", round(volume, 2))   # 计算值保留两位小数
    print("球体的表面积是:", round(area, 2))


main()

输出:

请输入球体的半径:5
球体的体积是: 523.6
球体的表面积是: 314.16

进程已结束,退出代码0
  • 2.给定圆形披萨饼的直径和价格,编写一个程序,计算每平方英寸的成本。面积公式为A=πr^2.

答案

def main():  
    d, p = eval(input("请输入披萨的直径(单位:英寸)和价格:"))
    r = d / 2

    area = math.pi * r * r  # 计算面积
    price = p * area  # 计算价格
    print("披萨的价格是:", round(price, 2))  # 计算值保留两位小数


main()

输出:

请输入披萨的直径(单位:英寸)和价格:10,3
披萨的价格是: 235.62

进程已结束,退出代码0
  • 3.编写一个程序,该程序基于分子中的氢、碳和氧原子的数量计算碳水化合物的分子量(以克/摩尔计)。程序应提示用户输入氢原子的数量,碳原子的数量和氧原子的数量。然后程序基于这些单独的原子量打印所有原子的总组合分子量。
原子质量(克/摩尔)
H1.00794
C12.0107
O15.9994

例如,水(H2O)的分子量为2*(1.00794)+15.9994=18.01528.

答案

def main():  # 计算原子的组合分子量
    h = int(input("请输入氢原子的数量:"))
    o = int(input("请输入氧原子的数量:"))
    c = int(input("请输入碳原子的数量:"))

    z = h * 1.00794 + o * 15.9994 + c * 12.0107  # 计算总的分子量

    print("总的分子量为:", z)


main()

输出:

请输入氢原子的数量:4
请输入氧原子的数量:2
请输入碳原子的数量:3
总的分子量为: 72.06266

进程已结束,退出代码0
  • 4.编写一个程序,根据闪光和雷声之间的时间差来确定雷击的距离。声速约为1100英尺/秒,1英里为5280英尺。

答案

def main():  # 根据时间计算距离
    t = float(input("请输入看到闪光和听到雷声的时间差(单位:秒):"))
    d = t * 1100 / 5280  # 计算距离,单位为英里

    print("雷击的距离为:", d, "英里")


main()

输出:

请输入看到闪光和听到雷声的时间差(单位:秒):2
雷击的距离为: 0.4166666666666667 英里

进程已结束,退出代码0
  • 5.咖啡店售卖咖啡,每磅10.50美元加上运费。每份订单的运费为每磅0.86美元+固定成本1.5美元。编写计算订单费用的程序。

答案

def main():  # 咖啡订单费用
    p = float(input("请输入购买咖啡的数量(单位:磅):"))
    c = p * 10.5 + p * 0.86 + 1.5  # 计算每份订单的费用

    print("订单费用为:", c, "美元")


main()

输出:

请输入购买咖啡的数量(单位:磅):3
订单费用为: 35.58 美元

进程已结束,退出代码0
  • 6.使用坐标(x1,y1)和(x2,y2)指定平面中的两个点。编写一个程序,计算通过用户输入的两个(非垂直)点的直线的斜率。
    斜率 = (y2-y1)/(x2-x1)

答案

def main():  # 两点求斜率
    x1, y1 = eval(input("请输入第一个点的坐标:"))
    x2, y2 = eval(input("请输入第二个点的坐标:"))
    k = (y2 - y1) / (x2 - x1)  # 计算直线斜率

    print("两点确定的直线斜率为:", k)


main()

输出:

请输入第一个点的坐标:5,4
请输入第二个点的坐标:1,3
两点确定的直线斜率为: 0.25

进程已结束,退出代码0
  • 7.编写一个程序,接受两点(见上一个问题),并确定他们之间的距离。
    距离 = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 距离 = \sqrt{(x2-x1)^2+(y2-y1)^2} 距离=(x2x1)2+(y2y1)2
    答案:
def main():  # 两点求距离
    x1, y1 = eval(input("请输入第一个点的坐标:"))
    x2, y2 = eval(input("请输入第二个点的坐标:"))
    d = math.sqrt((y2 - y1) ** 2 + (x2 - x1) ** 2)  # 计算直线距离

    print("两点之间的直线距离为:", d)


main()

输出:

请输入第一个点的坐标:1,1
请输入第二个点的坐标:2,2
两点之间的直线距离为: 1.4142135623730951

进程已结束,退出代码0
  • 8.格里高利闰余是从1月1日到前一个新月的天数。此值用于确定复活节的日期。它由下列公式计算(使用整型算术):
    C = year//100
    epact = (8 + (C//4)- C + ((8C + 13) // 25) + 11(year % 19)) % 30
    编写程序,提示用户输入4位数年份,然后输出闰余的值。
    答案:
def main():  # 确定复活节日期
    year = int(input("请输入4位数年份:"))
    c = year // 100
    expect = (8 + (c // 4) - c + ((8 * c + 13) // 25) + 11 * (year % 19)) % 30

    print("计算闰余的值为:", expect)


main()

输出:

请输入4位数年份:2024
计算闰余的值为: 19

进程已结束,退出代码0
  • 9.使用以下公式编写程序以计算三角形的面积,其三边的长度为a、b和c:

    s = (a + b + c) / 2

    A = s ( s − a ) ( s − b ) ( s − c ) A = \sqrt{s(s-a)(s-b)(s-c)} A=s(sa)(sb)(sc)

答案:

def main():  # 计算三角形面积
    a, b, c = eval(input("请输入三角形的三边长:"))
    s = (a + b + c) / 2
    area = math.sqrt(s * (s - a) * (s - b) * (s - c))

    print("计算三角形面积值为:", area)


main()

输出:

请输入三角形的三边长:2,2,2
计算三角形面积值为: 1.7320508075688772

进程已结束,退出代码0
  • 10.编写程序,确定梯子斜靠在房子上时,达到给定高度所需的长度。梯子的高度和角度作为输入。计算长度使用公式为:
    length = height / sin angle

注意:角度必须以弧度表示。提示输入以度为单位的角度,并使用以下公式进行转换:

radians = (π / 180) degrees

答案:

def main():  # 计算梯子靠墙需要的长度
    height = float(input("请输入梯子的高度:"))
    angle = float(input("请输入梯子的角度(单位:度):"))
    radians = math.pi / 180 * angle
    length = height / math.sin(radians)

    print("计算所需的长度为:", length)


main()

输出:

请输入梯子的高度:10
请输入梯子的角度(单位:度):30
计算所需的长度为: 20.000000000000004

进程已结束,退出代码0
  • 11.编写计算前n个自然数的和,其中n的值由用户提供。
    答案:
def main():  # 计算前n个数的和
    n = int(input("请输入n的值:"))
    s = 0
    for i in range(n + 1):
        s = s + i

    print("计算前", n, "个数的和为:", s)


main()

输出:

请输入n的值:2
计算前 2 个数的和为: 3

进程已结束,退出代码0
  • 12.编程计算前n个自然数的立方和,其中n的值由用户提供。
    答案:
def main():  # 计算前n个数的和
    n = int(input("请输入n的值:"))
    s = 0
    for i in range(n + 1):
        s = s + i**3

    print("计算前", n, "个数的立方和为:", s)


main()

输出:

请输入n的值:100
计算前 100 个数的立方和为: 25502500

进程已结束,退出代码0
  • 13.编程对用户输入的一系列数字求和。程序应该首先提示用户有多少数字需要求和,然后依次提示用户输入每一个数字,并在输入所有数字后打印出总和。(提示:在循环体中使用输入语句。)
    答案:
def main():  # 计算求和
    n = int(input("请输入要求和的数的个数:"))
    m = 0
    for i in range(n):
        print("请输入第", i+1, "个数的值")
        s = eval(input())
        m = m + s

    print("求和的结果为:", m)


main()

输出:

请输入要求和的数的个数:3
请输入第 1 个数的值
192.3
请输入第 2 个数的值
2013.2
请输入第 3 个数的值
10
求和的结果为: 2215.5

进程已结束,退出代码0
  • 14.编程计算用户输入的一系列数字的平均值。与前面的问题一样,程序会首先询问用户有多少个数字。注意:平均值应该始终为float,即使用户输入的值都是int。
    答案:
def main():  # 计算平均值
    n = int(input("请输入要计算的数的个数:"))
    m = 0
    for i in range(n):
        print("请输入第", i+1, "个数的值")
        s = float(input())
        m = m + s

    print("计算的平均值的结果为:", m / n)


main()

输出:

请输入要计算的数的个数:5
请输入第 1 个数的值
1
请输入第 2 个数的值
56
请输入第 3 个数的值
11.236
请输入第 4 个数的值
562.0
请输入第 5 个数的值
0
计算的平均值的结果为: 126.0472

进程已结束,退出代码0
  • 15.编写程序,通过对这个级数的项进行求和来求近似的π值:4/1 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 +…程序应该提示用户输入n,要求和的项数,然后输出该级数的前n个项的和。让你的程序从math.pi的值中减去近似值,看看它的准确性。
    答案:
def main():  # 计算近似π值
    n = int(input("请输入计算级数:"))
    s = 0
    for i in range(n):
        if i % 2 == 0:
            s = s + (2 * i + 1)
        else:
            s = s - (2 * i + 1)

    f = math.pi - s/4
    print("计算的近似值的结果为:", s/4)
    print("近似值与π值的差值为:", f)


main()

输出:

请输入计算级数:6
计算的近似值的结果为: -1.5
近似值与π值的差值为: 4.641592653589793

进程已结束,退出代码0

由于运算的级数较少,逼近并不明显。

  • 16.斐波那契数列是数字序列,其中每个连续数字是前两个数字的和。经典的斐波那契序列开始于1,1,2,3,5,8,13,……。编写计算第n个斐波那契数的程序,其中n是用户输入的值。例如,如果n=6 ,则结果为8.
    答案:
def main():  # 计算斐波那契数列
    n = int(input("请输入需要计算第几位斐波那契数:"))
    a, b = 1, 1
    for i in range(n - 1):
        a, b = b, a + b

    print("第", n, "位斐波那契数为", a)

main()

输出:

请输入需要计算第几位斐波那契数:66 位斐波那契数为 8

进程已结束,退出代码0
  • 17.你已经看到math库包含了一个计算数字平方根的函数。在本练习中,你将编写自己的算法来计算平方根。解决这个问题的一种方法是使用猜测和检查。你首先猜测平方根可能是什么,然后看看你的猜测是多么的接近。你可以使用此信息进行另一个猜测,并继续猜测,直到找到平方根(或其近似)。一个特别好的猜测方法是使用牛顿法。假设X是我们希望的根,guess是我们当前猜测的答案。猜测可以通过使用计算下一个猜测来改进:
    [guess + (X/guess)] / 2
    编程实现牛顿方法。程序应提示用户找到值的平方根(X)和改进猜测的次数。从猜测值 x/2 开始,你的程序应该循环指定的次数,应用牛顿的方法,并报告猜测的最终值。你还应该从math.sprt(x) 的值中减去你的估计值,以显示它的接近程度。

答案:

def main():  # 猜测平方根的值
    x = float(input("请输入要计算平方根的数:"))
    n = int(input("请输入改进猜测的次数:"))
    guess = x / 2
    for i in range(n):
        guess = (guess + x / guess) / 2

    f = math.sqrt(x) - guess

    print("计算的猜测值的结果为:", guess)
    print("猜测值与实际值的差值为:", f)


main()

输出:

请输入要计算平方根的数:10
请输入改进猜测的次数:5
计算的猜测值的结果为: 3.162277660168379
猜测值与实际值的差值为: 4.440892098500626e-16

进程已结束,退出代码0



(如有错误,请留言指正!)
  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值