《Python核心編程》第五章

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章