《Python核心编程》第五章

发布时间:2019-06-24 15:53:34编辑:auto阅读(1164)

    5-1.整型。讲讲Python普通整型和长整型的区别?

      答案:

       在大多数32位机器上,标准整型的取值范围是-2^31~2^31-1,如果在64位机器上使用64位编译器编译的Python,则整型是64位的。而长整型能表示的数值仅仅与机器支持的虚拟内存大小有关,长整型是标准整型的超集。

    5-2.操作符。

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

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

     答案:

    (a)

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

    (b)

    def two(a,b):
        return eval(a)*eval(b)
    a=raw_input('Enter a number:')
    b=raw_input('Enter another number:')
    print 'The answer is',two(a,b)

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

    A:90~100

    B:80~89

    C:70~79

    D:60~69

    F:<60

     答案:

    def grade(g):
        if 90<=g<=100:
            return 'A'
        elif 80<=g<90:
            return 'B'
        elif 70<=g<80:
            return 'C'
        elif 60<=g<70:
            return 'D'
        else:
            return 'F'
    g=int(raw_input('Enter your grade:'))
    print 'Your ceping is',grade(g)


    5-4.取余。判断给定的年份是否是闰年,使用下面的公式。

      一个闰年就是指它可以被4整除,但是不能被100整除,或者是它既可以被400整除。比如1992年﹑1996年和2000年是闰年,但1967年和1990年则不是闰年。下一个是闰年的整世纪是2400年。

      答案:(题目应该有错)

    year=int(raw_input('Enter the year number that your want to test:'))
    if (year%4==0 and year%100!=0) or (year%400==0):
        print 'This year is leap year.'
    else:
        print 'This year is not leap year'


    5-5取余。取一个任意小于 1 美元的金额,然后计算可以换成最少多少枚硬币。硬币有 1美分,5 美分,10 美分,25 美分四种。1 美元等于 100 美分。举例来说,0.76 美元换算结果应该是 3 枚 25 美分,1 枚 1 美分。类似 76 枚 1 美分,2 枚 25 美分+2 枚 10 美分+1 枚 5 美分+1枚 1 美分这样的结果都是不符合要求的。

      答案:

    money=float(raw_input('Please input your money less than 1 dollar:'))
    mon=money*100
    while mon:
        a25=divmod(mon,25)
        a10=divmod(a25[1],10)
        a5=divmod(a10[1],5)
        a1=divmod(a5[1],1)
        total=a25[0]+a10[0]+a5[0]+a1[0]
        print "There are %d coins"% total
        print '''They are consists of %d 25 cent coin ,%d 10 cent coin,
               %d 5 cent coin and %d 1 cent coin.'''% (a25[0],a10[0],a5[0],a1[0])
        money=float(raw_input('Please input your money less than 1 dollar:'))
        mon=money*100

    5-6.算术。写一个计算器程序。你的代码可以接受这样的表达式,两个操作数加一个操作符:N1操作符N2。其中N1和N2为整型或浮点型,操作符可以是+、-、*、/、%、**,分别表示加法、减法、乘法、×××除、幂运算。计算这个表达式的结果,然后显示出来。提示:可以使用字符串方法split(),但不可以使用内建函数eval()。

         答案:

    import string
    mystr=raw_input("输入一个算数表达式,通过空格分隔操作符和操作数:")
    while mystr:
        lstr=mystr.split(' ')
        a=float(lstr[0])
        b=float(lstr[2])
        if lstr[1]=='+':
            result=a+b
        elif lstr[1]=='-':
            result=a-b
        elif lstr[1]=='*':
            result=a*b
        elif lstr[1]=='/':
            result=a/b
        elif lstr[1]=='%':
            result=a%b
        elif lstr[1]=='**':
            result=a**b
        else:
            print "Error,please input agian."
        print result
        mystr=raw_input("输入一个算数表达式,通过空格分隔操作符和操作数:")


    5-7。略。

    5-8.几何。计算面积和体积。

    (a)正方形和立方体。

    (b)圆和球。

       答案:

    num=raw_input('输入你想要计算方案代号:1,正方形 2,立方体 3,圆 4,球=》')
    bian=float(raw_input('输入边长或者直径:'))
    def squre(bian):
        print '该正方形面积是%f'%(bian*bian)
    def cube(bian):
        print '该立方体面积是%f,体积是%f'%(bian*bian*6,bian*bian*bian)
    def circle(bian):
        print '该圆的面积是%f'%(3.14*bian*bian)
    def ball(bian):
        print '该球的面积是%f,该球的体积是%f'%(4*3.14*bian*bian*bian/3,4*3.14*bian*bian)
    if num=='1':
        squre(bian)
    elif num=='2':
        cube(bian)
    elif num=='3':
        circle(bian)
    elif num=='4':
        ball(bian)
    else:
        print 'Error ,try input again.'


    5-9.数值形式。回答下面关于数值格式的问题:

    (a)为什么下面的例子里面17+32等于49,而017+32等于47,017+032等于41?

    >>>17 + 32

    49

    >>>017 + 32

    47

    >>>017 + 032

    41

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

    >>>56l+78l

    134L

         答案:

    (a)因为以0开头的数字是八进制的,在计算的时候式一为十进制加法,式二为十进制和八进制加法,默认把八进制转换为十进制,式三为八进制加法,直接加后再转换为十进制。

    (b)因为是长整型数相加

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

         答案:

    from __future__ import division
    def convert(cel):
        c=(cel-32)*(5/9)
        print 'The result is',c
    fn=float(raw_input('Enter the temperature:'))
    convert(fn)


    5-11.取余。

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

           答案:

    for i in range(0,21):
        if i%2==0:
            print i,

    (b)同上,不过这次输出所有奇数。

           答案:

    for i in range(0,21):
        if i%2!=0:
            print i,

    (c)综合(a)和(b),请问辨别奇数和偶数的最简单方法是什么?

          答案:看是否能被2整除。

    (d)使用(c)的结果,写一个函数,检测一个整型能否被另一个整型整除。先要求客户输入两个数,然后你的函数判断两者是否有整除关系,根据判断结果分别返回True和False。

           答案:

    first=int(raw_input('Please input first number:'))
    second=int(raw_input('Please input second number:'))
    if (first%second==0) or (second%first==0):
        print 'True'
    else:
        print 'False'


    5-12.系统限制。写一段脚本确认你的Python所能处理的整型、长整型﹑浮点型和复数的范围。

          答案:

    import sys
    print sys.maxint
    print sys.long_info
    print sys.float_info

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

        答案:

    def sp(ti):
        a=ti.split(':')
        hour=int(a[0])
        mins=int(a[1])
        return hour*60+mins
    tt=raw_input('Enter the time you want to transerfer:')
    print 'The total time are %d minutes.'%sp(tt)


    5-14.略。

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

          答案:

    def gys(a,b):
        if a<b:
            a,b=b,a
        while b!=0:
            a,b=b,a%b
        return a
    def gbs(a,b):
        return (a*b)/gys(a,b)
    fi=int(raw_input('Enter first number:'))
    se=int(raw_input('Enter second number:'))
    print '最大公约数是%d,最小公倍数是%d'%(gys(fi,se),gbs(fi,se))


    5-16.家庭财务。给定一初始金额和月开销数,使用循环,确定剩下的金额当月的支出数,包括最后的支出数。Payment()函数会用到初始金额和月额度,输出结果类似下面的格式:

    Enter opening balance:100.00

    Enter monthly payment:16.13

                                           Amount Remaining

    pymt#         Paid                  Balance

    --------       ---------             -----------------

    0                $0.00                   $100.00

    1                $16.13                 $83.87

    2                $16.13                 $67.74

    3                $16.13                 $51.61

    4                $16.13                 $35.48

    5                $16.13                 $19.35

    6                $16.13                 $3.22

    7                $3.22                   $0

      答案:

    Balance=float(raw_input('Enter opening balance:'))
    Paid=float(raw_input('Enter monthly payment:'))
    sep='--------'
    pypt=0
    print '%20s'%('Amount Remaining')
    print '%s'%('pypt#'),'%10s'%('Paid'),'%18s'%('Balance')
    print '%s'%sep,'%10s'%sep,'%18s'%sep
    print '%s%12s%20s' % (0, 0.00, 100)
    pypt=1
    while (Balance-pypt*Paid)>=0:
          pypt+=1
          print '%s%12s%20s'%(pypt-1,Paid,Balance-(pypt-1)*Paid)
    print '%s%12s%20s'%(pypt,Balance-(pypt-1)*Paid,0)


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

    import random
    big_n = random.randint(1, 101)

    list = range(big_n)

    for i in range(big_n):
       list[i] = random.randint(-1, 2**31)

    print big_n
    print list
    list.sort()
    print list



关键字