《Python核心编程》第五章练习解析

第五章

第一题:

整形。普通整形与长整形的区别。

普通整形即标准整形是最通用的数字类型。它的取值范围是-2**31 ~~ 2**31-1,也就是-2 147 483 648 ~~ 2 147 483 647。python的长整形与C或其他编译型语言完全不同,它所表示的范围仅与机器所能支持的内存大小有关,也就是说python能轻松表示很大的整形。

第二题:

操作符。

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

<span style="font-size:14px;">def num(a,b):
    return a*b</span>

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

<span style="font-size:14px;">#2015-02-24
# -*- coding: utf-8 -*-

def num(a,b):
    return a*b

if __name__=='__main__':
    m = input()
    n = input()
    print num(m,n)</span>

第三题:

标准类型操作符。写一段脚本,输入一个测验成绩,根据下面的标准,输出它的评分成绩(A--F)。

A:90~~100  B:80~~89  C:70~~79  D:60~~69  F:<60

<span style="font-size:14px;">#2015-02-24
# -*- coding: utf-8 -*-

def test(a):
    if a < 0 or a > 100:
        print 'Please input a corrent number!'
    elif a >= 90:
        print 'A'
    elif a >= 80:
        print 'B'
    elif a >= 70:
        print 'C'
    elif a >= 60:
        print 'D'
    else:
        print 'F'
        
if __name__=='__main__':
    while True:
        n = input()
        test(n)</span>


第四题:

取余。判断给定的年份是否是闰年。

<span style="font-size:14px;">#2015-02-24
# -*- coding: utf-8 -*-

def test(a):
    if (a%4==0 and a%100!=0) or (a%400==0):
        print '这是闰年!'
    else:
        print '不是闰年!'
        
if __name__=='__main__':
    while True:
        n = input()
        test(n)</span>


第五题:

取余。取任意小于一美元的金额,然后计算可以换成最少多少枚硬币。

<span style="font-size:14px;">#2015-02-24
# -*- coding: utf-8 -*-

def test(a):
    a = a*100
    count = 0
    count += a//25
    a = a%25
    count += a//10
    a = a%10
    count += a//5
    a = a%5
    count += a
    return count
        
if __name__=='__main__':
    while True:
        n = input()
        num = test(n)
        print '最少换成%d枚硬币'%num</span>


第六题:

算术。写一个计算器程序,接受一个表达式,可以计算加、减、乘、除、取余、幂运算,并返回结果。

<span style="font-size:14px;">#2015-02-24
# -*- coding: utf-8 -*-

def test(num1,c,num2):
    if c == '+':
        return num1 + num2
    elif c == '-':
        return num1 - num2
    elif c == '*':
        return num1 * num2
    elif c == '/':
        return num1 / num2
    elif c == '%':
        return num1 % num2
    elif c == '**':
        return num1 ** num2
        
if __name__=='__main__':
    while True:
        n = raw_input()
        if len(n) == 3:
            num = test(float(n[0]),n[1],float(n[2]))
            print num
        else:
            print float(n[0])**float(n[3])</span>


第七题:


第八题:

几何。计算面积和体积。

(a)正方形和立方体

(b)圆和球

<span style="font-size:14px;">#2015-02-24
# -*- coding: utf-8 -*-
import math
      
if __name__=='__main__':
    while True:
        a = float(raw_input())
        print '正方形的面积为:%f'%(a*a)
        print '立方体的面积为:%f'%(a*a*6)
        print '立方体的体积为:%f'%(a**3)
        print '圆的面积为:%f'%(a*a*math.pi)
        print '球的面积为:%f'%(4*a*a*math.pi)
        print '球的体积为:%f'%((4*math.pi*a**3)/3)</span>


第九题:

数值形式 回答下面关于数值格式的问题: 
(a) 为什么下面的例子里 17+32 等于 49, 而 017+32 等于 47, 017+032 等于 41?
因为对于python来说八进制整数以0开头,17+32为两个十进制数相加,结果为49;而017为八进制,相当于十进制的15,所以017+32返回的十进制的结果为47;同理,017+032的结果为41。

(b)为什么下面这个表达式我们得到的结果是 134L 而不是 1342 ?
>>>56l+78l

134L

因为这是两个长整形相加,后面的字符是小写的'l',python中长整形提倡使用大写L。

第十题:

转换。写一个函数来进行华氏度到摄氏度的转换。转换公式为C=(F-32)*(5/9)应该在这个练习中使用真正的除法,否则你会得到不正确的结果。

#2015-02-26
# -*- coding: utf-8 -*-

def Temperature(F):
    C = (F-32)*(5.0/9)
    return C

if __name__=='__main__':
    while True:
        n = input('Please input:')
        result = Temperature(n)
        print result


第十一题:

取余。
 (a)使用循环和算术运算,求出0~20之间的所有偶数。
 (b)同上,不过这次输出所有的奇数。
 (c)综合(a)和(b),请问辨别奇数和偶数的最简单的方法是什么?
 (d)使用(c)的成果,写一个函数,检测一个整型是否被另一个整型整除。先要求用户输入两个数,然后你的函数判断两者是否有整除关系,根据判断结果分别返回True和False。

(a) and (b) 判断奇偶数:

<span style="font-size:14px;">#2015-02-26
# -*- coding: utf-8 -*-

def Test(T):
    even = []
    odd = []
    for i in range(21):
        if i%2==0:
            even.append(i)
        else:
            odd.append(i)
    if T==1:
        return even
    else:
        return odd
            

if __name__=='__main__':
    print '0~20所有的偶数为:',
    for i in Test(1):
        print i,
    print '\n0~20所有的奇数为:',
    for i in Test(0):
        print i,
    </span>

(c):能否被2整除。

(d):

<span style="font-size:14px;">#2015-02-26
# -*- coding: utf-8 -*-

def Test(a,b):
    if a%b==0:
        x=1
    else:
        x=0
    if b%a==0:
        y=1
    else:
        y=0
    return (x,y)  #返回一个元组
            

if __name__=='__main__':
    a = input('Please input the first number:')
    b = input('Please input the second number:')
    if Test(a,b)[0] and Test(a,b)[1]:  #可以这么利用返回值
        print '第一个数和第二个数能相互整除!'
    elif Test(a,b)[0]:
        print '第一个数能被第二个数整除!'
    else:
        print '第二个数能被第一个数整除!'</span>


第十二题:

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


利用sys模块的内置方法得出。(这是在网上找的方法)

<span style="font-size:14px;">import sys

print (sys.maxint)
print(-sys.maxint-1)

print(sys.float_info)
print(sys.long_info)</span>

第十三题:

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

#2015-02-27
# -*- coding: utf-8 -*-

def Test(h,m):
    minuter = h*60+m
    return minuter

if __name__=='__main__':
    while True:
        h = input()
        m = input()
        if (h<23 and h>-1) and (m<60 and m >-1):
            print 'The time is %d minuters' % Test(h,m)
        else:
            print 'Please input corrently!'
    

第十四题:

银行利息。写一个函数,以定期存款利率为参数,假定该账户每日计算复利,请计算返回年回报率。

def Test(day_rate):
    year_rate = (1+day_rate)*365-1
    return year_rate

第十五题:

最大公约数和最小公倍数。请计算两个整型的最大公约数和最小公倍数。

#2015-02-27
# -*- coding: utf-8 -*-

def yueshu(m,n):
    if m<n:
        temp = m
    else:
        temp = n
    for i in range(temp,0,-1):
        if m%i==0 and n%i==0:
            return i

def beishu(m,n):
    yue = yueshu(m,n)
    return (m*n)/yue

if __name__=='__main__':
    while True:
        m = input()
        n = input()
        print '最大公约数为:%d'%yueshu(m,n)
        print '最大公倍数为:%d'%beishu(m,n)

第十六题:

家庭财务。给定一个初始金额和月开销数,使用循环,确定剩下的金额和当月的支出数,包括最后的支出数。

<span style="font-family:SimSun;font-size:14px;">#2015-02-27
# -*- coding: utf-8 -*-

def Payment(cost,total):
    count = 0
    print '             Amount Remaining'
    print 'Pymt#   Paid        Balance'
    print '-----   ------   --------'
    while True:
        print '%2d       $%.2f      $%6.2f'%(count,total,cost)
        if cost-total>=0:
            cost = cost-total
        else:
            if cost !=0:
                print '%2d       $%.2f       $%6.2f'%(count+1,cost,0)
            break
        count += 1

if __name__=='__main__':
    cost = input('Enter opening balance:')
    total = input('Enter monthly payment:')
    Payment(cost,total)</span>

第十七题

随机数。熟读随机数模块然后解下面的题: 生成一个有 N 个元素的由随机数 n 组成的列表, 其中 N 和 n 的取值范围分别为: (1 < N <= 100), (0 <= n <=  231  -1)。然后再随机从这个列表中取 N (1 <= N <= 100)个随 机数出来, 对它们排序,然后显示这个子集。

#2015-02-27
# -*- coding: utf-8 -*-

import random
N = random.randint(1,100)
list1 = []
for i in range(N):
    n = random.randint(0,(2**31-1))
    list1.append(n)
    
list1.sort()

print list1




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值