python核心编程v2.0 第五章习题答案

来源:互联网 发布:java base64 转换 编辑:程序博客网 时间:2024/06/01 09:43

1.
python标准整形类型等价于c的(有符号)长整型。32位取值范围-2的31次方到2的31次方减一,64位机器上整形将是64位。
长整型类型能表达的数值仅仅与机器支持的虚拟内存有关。是标准子集的超集。
2.

def multiple(number1 , number2 ) :    count = number1*number2    return countif __name__ == '__main__' :    count = multiple(7,8)    print count

3.

def grade(number1) :    grd = ''    if 90<=number1<=100 :        grd = 'A'    elif 80<=number1<=89 :        grd = 'B'    elif 70<=number1<=79 :        grd = 'C'    elif 60<=number1<=69 :        grd = 'D'    elif number1<=60 :        grd = 'F'    else:        print "not vaild"    return grdif __name__ == '__main__' :    grd = grade(79)    print grd

4.

if __name__ == '__main__':    while True :        year = int(raw_input('input a year'))        if year%4 == 0 and year%100 != 0 :            print "leap year"        elif year%400 == 0 :            print  "leap year"        else:            print "not leap year"

5.为了简单,用的贪心算法,讲道理要满足最少硬币应该要使用动态规划求解。贪心算法在某些情况非最优。
为了在有浮点数参加的运算里保留整数结果,使用地板除。

from __future__ import divisiondef changecoin(coin):    n1 = coin//0.25    y1 = coin%0.25    n2 = y1//0.1    y2 = y1%0.1    n3 = y2//0.05    y3 = y2%0.05    n4 = y3//0.01    return n1,n2,n3,n4if __name__ == '__main__':    c1,c2,c3,c4 = changecoin(float(raw_input('input a number <1 :')))    print int(c1),int(c2),int(c3),int(c4)

6.
eval()函数可以直接将string作为有效的表达式来进行求值

from __future__ import divisiondef count(list) :    list[0] = int(list[0])    list[2] = int(list[2])    if list[1] == '+' :        r = list[0]+list[2]    elif list[1] == '-' :        r = list[0]-list[2]    elif list[1] == '*' :        r = list[0]*list[2]    elif list[1] == '/' :        r = list[0]/list[2]    elif list[1] == '%' :        r = list[0]%list[2]    elif list[1] == '**':        r = list[0]**list[2]    else:        print "wrong operator"    return rif __name__ == '__main__':    while True :        str1 = raw_input('input number operator number')        list = str1.split(' ')        # print list        result = count(list)        print result

8.

import mathdef cub(len) :    s = len ** 2    v = len ** 3    return s,vdef sqare(len) :    s = math.pi * (len ** 2)    v = 4/3 * math.pi * (len ** 3)    return s,vif __name__ == '__main__':    s1,v1 = cub(2)    s2,v2 = sqare(3)    print s1,v1    print s2,v2

9.
a)
目标进制为2进制时,就用bin();
目标进制是8进制的时候用oct();
目标进制是10进制的时候用int();
目标进制是16进制的时候用hex();
int(‘017’,8) = 15
int(‘032’,8) = 26
b)
pycharm下运行是1342, cmd环境下也是

10.

from __future__ import divisiondef turn(F):    C = (F-32)*(5/9)    return Cif __name__ == '__main__':    C = turn(49)    print C

11.
1)

from __future__ import divisiondef choose(num):    if num%2 == 0 :        return 1    else:        return 0if __name__ == '__main__':    list = []    for i in range(21):        index = choose(i)        if index == 1 :            list.append(i)    print list

2)改index == 1为index == 0
3 ) 被2整除
4)

from __future__ import divisiondef choose(num1,num2):    if num1>= num2:        c = num1%num2    else:        c = num2%num1    if c == 0 :        return 1if __name__ == '__main__':    while True:        num1 = int(raw_input('number one\n'))        num2 = int(raw_input('number two\n'))        index = choose(num1,num2)        if index == 1 :            print True        else:            print False

12.复数未查到方法,欢迎评论告知

import sys#intprint sys.maxintprint -sys.maxint+1#longprint sys.long_info#floatprint sys.float_info

13.

# -*- coding: utf-8 -*-import time#time模块返回当前时间,取小时及分钟string = time.strftime('%I %M',time.localtime(time.time()))list = string.split(' ')print int(list[0])*60+int(list[1])

14.利率取万四

# -*- coding: utf-8 -*-from __future__ import divisiondef oneday(money) :    money = money*4/10000 + money    return moneyif __name__ == '__main__':    m = 100    i = 1    while i<=365 :        m = oneday(m)        i = i+1    print "one year : %f" %m    print (m-100)/100

15.

# -*- coding: utf-8 -*-from __future__ import divisiondef count(num1,num2) :    if num1>=num2:        t = num2    else:        t = num1    i=t    while i>=1 :        if num1%i == 0 and num2% i == 0 :            return i        i = i-1def count2(num1,num2):    t = num1*num2    if num1>=num2:        y = num1    else:        y = num2    i = y    while i<=t :        if i%num1 == 0 and i%num2 ==0 :            return i        i = i+1if __name__ == '__main__':    while True:        num1 = int(raw_input("number1:\n"))        num2 = int(raw_input("number2 ;\n"))        print count(num1,num2)        print count2(num1,num2)

16.

# -*- coding: utf-8 -*-def payment(op,pay):    print '         Amount   Remaining'    print 'Pymt#    Paid      Balance'    print '----     ------    ---------'    print '0        $0.00       $%f' % op    i = 1    remain = op    while remain-pay>0 :        remain = remain -pay        print '%d       %f      %f' % (i,pay,remain)        i=i+1    print '%d       %f      %f ' % (i,remain ,0)if __name__ == '__main__':    op = float(raw_input('Enter opening balance:\n'))    pay = float(raw_input('Enter mouthly payment:\n '))    payment(op,pay)

结果:

Enter opening balance:100Enter mouthly payment: 16.17         Amount   RemainingPymt#    Paid      Balance----     ------    ---------0        $0.00       $100.0000001       16.170000      83.8300002       16.170000      67.6600003       16.170000      51.4900004       16.170000      35.3200005       16.170000      19.1500006       16.170000      2.9800007       2.980000      0.000000

17.sort函数排序后会更改list的值

# -*- coding: utf-8 -*-import randomimport sysif __name__ == '__main__' :    n = int(raw_input("number:\n"))    list1 = []    for i in range(n) :        list1.append(random.randint(0,sys.maxint-1))    print list1    y = int(raw_input('number again:\n'))    list2 = []    for j in range(y):        list2.append(random.choice(list1))    print list2    list2.sort()    print list2

结果:

number:7[4, 19, 1, 9, 17, 0, 5]number again:5[4, 1, 1, 9, 4][1, 1, 4, 4, 9]