《Python核心编程》第5章 习题

第4章无编程题故略过。

5-2.操作符。
(a)写一个函数,计算并返回两个数的乘积。
(b)写一段代码调用这个函数,并显示它的结果。

def mutiple(x, y):
    return x*y

if __name__=="__main__":
    a = int(raw_input("input a number: "))
    b = int(raw_input("input a number: "))
    print mutiple(a,b)

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

while 1:
     number=int(raw_input('enter a number between 1 and 100: '))
     if number<60:
         print "F"
     elif 60<=number<=69:
         print "D"
     elif 70<=number<=79:
         print "C"
     elif 80<=number<=89:
         print "B"
     elif 90<=number<=100:
         print "A"
     else:
         print "wrong number,please input again"
         break

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

while 1:
     year=int(raw_input('enter a year between 1000 and 9999: '))
     if year<1000 or year>9999:
         break
     elif (year%4==0 and year%100!=0) or (year%400==0):
         print "leap year"
     else:
         print "not leap year"

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

while 1:
     coin=int(raw_input('enter a coin between 1 and 100: '))
     if coin<1 or coin>99:
         break
     n25=coin/25
     coin=coin-25*n25
     n10=coin/10
     coin=coin-10*n10
     n5=coin/5
     coin=coin-5*n5
     n1=coin
     print '25 cent: %d \n10 cent: %d \n5 cent: %d \n1 cent: %d'%(n25,n10,n5,n1)

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

while 1:
    print "number1 (+|-|*|/|%|**) number2"
    expression=raw_input('please input a expression: ')
    if '+' in expression:
        a,b=expression.split('+',1)
        print float(a)+float(b)
    elif '-' in expression:
        a,b=expression.split('-',1)
        print float(a)-float(b)
    elif '**' in expression:
        a,b=expression.split('**',1)
        print float(a)**float(b)
    elif '/' in expression:
        a,b=expression.split('/',1)
        print float(a)/float(b)
    elif '%' in expression:
        a,b=expression.split('%',1)
        print float(a)%float(b)
    elif '*' in expression:
        a,b=expression.split('*',1)
        print float(a)*float(b)
    else:
        print "wrong expression"
        break

5-7.营业税。随意取一个商品金额,然后根据当地营业税额度计算应该交纳的营业税。

price=float(raw_input('please input a earn price: '))
    print 'your tax is %10.2f' %round(price*0.2,2)

5-8.几何。计算面积和体积。
(a)正方形和立方体    (b)圆和球

num=float(raw_input('please input a real number: '))
print 'the area of square is %f' %(num*num)
print 'the area of circle is %f' %(math.pi*num*num)
print 'the cubage of cube is %f' %(num**3)
print 'the cubage of sphere is %f' %(math.pi*(num**3)*3/4.0)

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

def F2C(tem):
    Fahrenheit=float(tem)
    Celsius=(Fahrenheit-32)*(5/9.0)
    print '%fF equals to %fC°' %(Fahrenheit,Celsius)

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

for num in range(0,21):
    if num%2==0:
        print '%d is even' %num
    else:
        print '%d is odd' %num

def divide(a,b):
    if a==0 and b==0:
        print 'wrong input number'
        return
    elif b==0:
        a,b=b,a
    if a<b and a!=0:
        if b%a==0:
            print 'true'
        else:
            print 'false'
    else:
        if a%b==0:
            print 'true'
        else:
            print 'false'

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

print sys.maxint
print -sys.maxint-1
print sys.float_info
print sys.long_info

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

print "time format as HH:MM"
timestr=raw_input('please input a time: ')
def totalmin(time):
    HH,MM=time.split(':',1)
    print '%d total minutes' %(int(HH)*60+int(MM))
totalmin(timestr)


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

复利: 最终金额=本金*(1+第1期报酬率)*(1+第2期报酬率)*(1+第3期报酬率)* ….. *(1+第N期报酬率)
年回报率 = (1+第1期报酬率)*(1+第2期报酬率)*(1+第3期报酬率)* ….. *(1+第N期报酬率)

dayrate=float(raw_input("input a rate "))
print 'a year rate of earn is %f' %((1+dayrate)**365-1)

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

最大公约数,用相除法,求得余数,直到一个数为0,循环结束
最小公倍数就是两个数的乘积除以最大公约数

def gcd(a,b):
    while(a>0):
        c=int(a)
        a=int(b)%a
        b=c
    print 'gcd is %d' %b

def lcm(a,b):
    return int(a)*int(b)/gcd(a,b)

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

balance=float(raw_input("Enter opening balance: "))
paid=float(raw_input("Enter monthly payment: "))
def payment(balance,paid):
    print '    Amount Remaining'
    print 'Pymt#   Paid    Balance'
    print '-----   -----   ------'
    b=balance
    m=int(b/paid)
    b=b-m*paid
    while(b>0):
        m+=1
        b=b-paid
    print '%d%11.2f%8.2f' %(0,0.00,balance)
    for month in range(1,m):
        print '%d%11.2f%8.2f' %(month,paid,balance-month*paid)
    print '%d%11.2f%8.2f' % (m,(balance-paid*(m-1)),0)
payment(balance,paid)

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

while 1:
    N1=random.randint(2,100)
    N2=random.randint(1,100)
    if N1>N2:
        break
print 'N1 is %d, N2 is %d' %(N1,N2) 
list1=[]
for i in range(0,N1):
    n=random.randint(0,2**31-1)
    list1.append(n)    
print list1
list2=random.sample(list1,N2)
list2.sort()
print list2


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值