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

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

def multiple(number1 , number2 ) :
    count = number1*number2
    return count

if __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 grd

if __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 division

def 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,n4

if __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 division

def 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 r

if __name__ == '__main__':
    while True :
        str1 = raw_input('input number operator number')
        list = str1.split(' ')
        # print list
        result = count(list)
        print result

8.

import math
def cub(len) :
    s = len ** 2
    v = len ** 3
    return s,v

def sqare(len) :
    s = math.pi * (len ** 2)
    v = 4/3 * math.pi * (len ** 3)
    return s,v
if __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 division
def turn(F):
    C = (F-32)*(5/9)
    return C
if __name__ == '__main__':
    C = turn(49)
    print C

11.
1)

from __future__ import division
def choose(num):
    if num%2 == 0 :
        return 1
    else:
        return 0
if __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 division
def choose(num1,num2):
    if num1>= num2:
        c = num1%num2
    else:
        c = num2%num1
    if c == 0 :
        return 1
if __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
#int
print sys.maxint
print -sys.maxint+1
#long
print sys.long_info
#float
print 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 division

def oneday(money) :
    money = money*4/10000 + money
    return money
if __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 division

def 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-1

def 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+1

if __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:
100
Enter mouthly payment:
 16.17
         Amount   Remaining
Pymt#    Paid      Balance
----     ------    ---------
0        $0.00       $100.000000
1       16.170000      83.830000
2       16.170000      67.660000
3       16.170000      51.490000
4       16.170000      35.320000
5       16.170000      19.150000
6       16.170000      2.980000
7       2.980000      0.000000

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

# -*- coding: utf-8 -*-
import random
import sys

if __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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值