python核心编程第二版第五章答案

5.1整形。讲讲Python普通整型和长整型的区别。
普通整型:python的标准型整数是最通用的数字类型,32位机器上,标准整型取值范围是-231到231-1。在64位机器上使用64位编译器编译python,在这个系统上的整型将是64位。python标准整型等价于C的(有符号)长整型。一般用十进制表示整型,python支持八进制和十六进制表示,八进制以“0”开始,十六进制以“0x”或者“0X”开始。

长整型:python的长整型类型可以表达的数值仅仅与机器支持的虚拟内存大小有关,python可以轻松表达很大的整型。长整型类型是标准整型类型的超集,在整型值后加一个L表示这个整型是长整型。虽然小写字母l也可以标记长整型,但是我们建议使用大写L。

5.2操作符。
(a)写一个函数,计算并返回两个数的乘积。

def mul(a,b):
c = a * b
return c

(b)写一段代码调用这个函数,并显示它的结果

print(mul(3,5))
15

5.3标准类型操作符。写一段脚本,输入一个测验成绩,根据下面的标准,输出它的评分成绩(A-F)
A:90~100
B:80~89
C:70~79
D:60~69
F:<60

def score(a):
    if a >= 90 and a <= 100:
        return 'A'
    elif a >= 80 and a < 90:
        return 'B'
    elif a >= 70 and a < 80:
        return 'C'
    elif a >= 60 and a < 70:
        return 'D'
    elif a < 60:
        return 'F'
print(score(80))

5.4取余。判断给定年份是否是闰年。使用下面的公式。
一个闰年指的是它可以被4整除,但不能被100整除。或者它既可以被4整除又可以被100整除。1992,1996,2000是闰年,但1967和1900不是闰年。下一个闰年的整世纪是2400年。


def runnian():
    a = int(input('Please input a year'))
    try:
        if a % 4 == 0 and a % 100 != 0:
            return '这是一个闰年'
        elif a % 400 == 0:
            return  '这是一个世纪闰年'
        else:
            return  '这不是闰年'
    except:
        return '你必须输入一个年份'

5.5取余。取一个任意小于1美元的金额。然后计算可以换乘最少多少枚硬币。硬币有1美分,5美分,10美分,25美分4种。举例0.76美元应该=3个25美分+1个1美分,如果结果是2个25美分和26个1美分就不符合要求**

def meifen():
    try:
        a = float(input('请输入美元的数值'))
        (b,x) = divmod(a,0.25)
        (c,x) = divmod(x,0.1)
        (d,x) = divmod(x,0.01)
        #用divmod方法取得每次的取余和余数
        print(str(a)+'美元由'+str(b)+'个25美分,'+str(c)+'个10美分和'+str(d)+'个1美分组成。')
    except:
        print('请输入正确的美元数值')
meifen()

5.6算术。写一个计算器程序。你的代码可以接受这样的表达式,两个操作数加一个操作符:N1 操作符`N2,。其中N1与N2是整型或者浮点型,操作符可以是+,-,*,/,%,,计算这个表达式的结果,然后显示出来。提示:可以使用字符串方法split(),但不能使用内建函数eval()。**

```def jisuanqi():
    try:
        x = str(input('please input your formula'))
        #使用str.split方法将原先的公式分解成一个列表,我们已知的只有符号,因此通过符号将公式分成两部分进行计算。
        if len(x.split('+')) == 2:
            y = float(x.split('+')[0]) + float(x.split('+')[1])
            return y
        elif len(x.split('-')) == 2:
            y = float(x.split('-')[0]) - float(x.split('-')[1])
            return y
        elif len(x.split('*')) == 2:
            y = float(x.split('*')[0]) * float(x.split('*')[1])
            return y
        elif len(x.split('/')) == 2:
            y = float(x.split('/')[0]) / float(x.split('/')[1])
            return y
        elif len(x.split('%')) == 2:
            y = float(x.split('%')[0]) / float(x.split('%')[1])
            return y
        elif len(x.split('**')) == 2:
            y = float(x.split('**')[0]) / float(x.split('**')[1])
            return y
    except:
        print('please input right formula')
jisuanqi()

5.8.几何。计算面积和体积。
(a)正方形和立方体

(b)圆和球

import math
def area_square():
    try:
        a = float(input('please input side length'))
        x = a **2
        return x
    except:
        return 'please input right side length'
def area_circular():
    try:
        a = float(input('please input radius'))
        x = math.pi * a **2
    except:
        return 'please input right radius'
def volume_cube():
    try:
        a = float(input('please input side length'))
        x = a ** 3
        return x
    except:
        return 'please input right side length'
def volume_sphere():
    try:
        a = float(input('please input radius'))
        x = 4/3*math.pi*a ** 3
        return x
    except:
        return 'please input right radius'

volume_sphere()

5.9
(a)因为0开头的数是八进制数
(b)因为l是L的小写不是1

5.10
写一对函数来进行华氏度到摄氏度的转化。公式为C=(F-32))*(5/9),使用真正的除法

from __future__ import division
def zhuanhua():
    try:
        F = float(input('please input right Fahrenheit degree'))
        C = (F - 32) * (5 / 9)
        return C
    except:
        return 'please input right Fahrenheit degree'
zhuanhua()

5.11取余。
(d)使用循环和算术运算,求出0~20之间所有的偶数。

def zhengchu():
    try:
        a = int(input('please input a number'))
        b = int(input('please input a number'))
        if a % b == 0 or b % a == 0:
            print(True)
        elif a == 0 or b == 0:
            print(True)
        else:
            print(False)
    except:
        return 'please input right number'
zhengchu()

5.12系统限制,写一段脚本确认下你的python能处理的整型,长整型,浮点型和复数范围。

import sys

print(sys.maxsize)
print(-sys.maxsize-1)
print(sys.float_info)
print(sys.long_info)

5.13转换。写一个函数,以小时和分钟表示的时间转换为只用分钟表示的时间。

def time():
    try:
        a = str(input('please input tour time'))
        y = a.split(':')
        z = int(y[0]) * 60 + int(y[1])
        return z
    except:
        return 'please input a right time'
time()

5.14由日利率计算年利率

def lilv():
    x = float(input('please input daily interest rate'))
    y = (1+x) ** 365 -1
    return y

5.15最大公约数和最小公倍数。请计算2个整型的最大公约数和最小公倍数。
#思路:先用辗转相除法得出最大公因数,再通过辗转相除法得出每次当前2个数/最大公因数的最大公因数,这样就可以得到所有的公因数了,然后把所有的公因数相乘,再把输入的2个数除以这个公因数相乘的乘积得到的2个商,再把2个商相乘,再乘以这个公因数相乘的乘积就可以得到最小公倍数了。这个算法用了2次递归,速度应该较快。

gongyinshu = [1]
这里初始列表为1的原因是因为如果只有一个公因数无法相乘,如果有个1就可以相乘
def xunhuan(a,b):
    min_gongyinshu_1 = 1
    #经过N次循环每次都得到最大公因数
    if quyu(a,b) == 1:
    #递归的基线条件是2个数的最大公因数为1,递归条件就是2个数的最大公因数不为1
        for i in gongyinshu:
            min_gongyinshu_1 *=i
        return min_gongyinshu_1
    #当最大公因数为1的时候,把所取得的公因数相乘
    else:
        #否则每次都取最大公因数,并且存储到列表中,并且把原先的数除以最大公因数再次进行循环
        c = quyu(a, b)
        gongyinshu.append(c)
        a = a / c
        b = b / c
        return xunhuan(a,b)



def quyu(i,j):
    #创建一个递归算法,使用辗转相除法的到最大公约数
    x = max(i,j)
    y = min(i,j)
    z = x % y
    if z == 0:
    #递归的基线条件是当2个数可以整除时,2个数不能整除就是递归条件
        return y
    else:
        return quyu(y,z)


def common_divisor():
    a = int(input('please input a number'))
    b = int(input('please input a number'))
    c = max(a, b)
    d = min(a, b)
    if d == 0:
        print('最大公约数为0', '最小公倍数为' + str(c))

    w = quyu(a, b)
    # 通过辗转相除法得到最大公倍数
    print('最大公约数是' + str(w))
    z = xunhuan(a,b)
    min_gongyinshu = (a / z) * (b / z) *z
    print('最小公倍数是'+str(min_gongyinshu))


common_divisor()

5.16

a = float(input('please input initial amount'))
b = float(input('please input monthly expenses'))
def zhichu(a,b):
    c = a - b
    if c <= 0:
        c = 0
        return print('当前剩余金额' + str(c))
    else:
        print('当前剩余金额' + str(c))
        return zhichu(c,b)
zhichu(a,b)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值