python核心編程第五章習題

5-1 整形 講講 Python 普通整型和長整型的區別python

python有三種整數類型:布爾型,標準整數類型,長整型app

Python標準整數類型是最通用的數字類型。 在大多數32位機器上,標準整數類型的取值範圍:-2147483648 到 2147483647 dom

Python標準整數類型等價於C的有符號長整型。 八進制整數以數字「0」開始。 十六進制整數以「0x」或「0X」開始 。函數

Python長整型能表達的數值僅僅與機器值的(虛擬)內存大小有關。 長整數類型是標準整數類型的超集。 spa

在一個整數值後面加上個L(大寫或小寫均可以,推薦使用大寫,避免和數字1混淆),表示這個整數時長整數, 這個整數能夠是十進制、八進制、十六進制。 code

只有對長整數調用repr()纔有機會看到L,對長整數調用str()看不到L,整型和長整型正在統一爲一種。 對象

5-2 運算符
(a) 寫一個函數,計算並返回兩個數的乘積
(b) 寫一段代碼調用這個函數,並顯示它的結果blog

def chengji():
    a=10
    b=5
    return a*b
chengji()

 

5-3 標準類型運算符. 寫一段腳本,輸入一個測驗成績,根據下面的標準,輸出他的評分
成績(A-F)。
A: 90–100
B: 80–89
C: 70–79
D: 60–69
F: <60排序

def grade(score):
    if 90 <= score <= 100:
        grade="A"
    elif 80 <= score <= 89:
        grade="B"
    elif 70 <= score <= 79:
        grade="C"    
    elif 60 <= score <= 69:
        grade="D" 
    else:
        grade="F"
    return grade
grade(60)

 

5-4 取餘。判斷給定年份是不是閏年。使用下面的公式:內存

一個閏年就是指它能夠被 4 整除,但不能被 100 整除, 或者它既能夠被 4 又能夠被 100 整

除。好比 1992,1996 和 2000 年是閏年,但 1967 和 1900 則不是閏年。下一個是閏年的整世
紀是 2400 年

def  leap_year(year):
    if (year%4 == 0 and year%100 !=0) or year%400 == 0:
        return True
    else:
        return False
leap_year(2017)

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 美分這樣的結果都是不符合要求的。

def cent(dollar):
    dollar=dollar*100
    a=dollar/25
    b=dollar%25
    c=b/10
    d=b%10
    print "%d枚 25 美分,%d枚 10 美分,%d枚 1 美分"%(a,c,d)
cent(0.78)

5-6 算術。寫一個計算器程序 你的代碼能夠接受這樣的表達式,兩個操做數加一個運算符:
N1 運算符 N2. 其中 N1 和 N2 爲整數或浮點數,運算符能夠是+, -, *, /, %, ** 分別表示
加法,減法, 乘法, 整數除,取餘和冪運算。計算這個表達式的結果,而後顯示出來。提示:
可使用字符串方法 split(),但不可使用內建函數 eval().

def calculator():
    string=raw_input(">>")
    if "**" in string:
        string=string.split("**")
        N1=float(string[0])
        N2=float(string[1])
        result=N1**N2
        return result
    elif "+" in string: 
        string=string.split("+")
        N1=float(string[0])
        N2=float(string[1])
        result=N1+N2
        return result        
    elif "-" in string:
        string=string.split("-")
        N1=float(string[0])
        N2=float(string[1])
        result=N1-N2
        return result 
    elif "/" in string:
        string=string.split("/")
        N1=float(string[0])
        N2=float(string[1])
        result=N1/N2
        return result   
    elif "%" in string:
        string=string.split("%")
        N1=float(string[0])
        N2=float(string[1])
        result=N1%N2
        return result  
    elif "*" in string:
        string=string.split("*")
        N1=float(string[0])
        N2=float(string[1])
        result=N1*N2
        return result     
    
calculator()

5-8 幾何。計算面積和體積:
(a) 正方形 和 立方體
(b) 圓 和 球

def square(length):
    mianji=length**2
    print mianji 
def cube(length):
    tiji=length**3
    print tiji
def circular(r):
    mianji=3.14*r**2
    print mianji
def ball(r):
    tiji=3.0/4.0*r**3
    print tiji
if __name__=="__main__":
    try:
        num=int(raw_input(">>"))
        square(num)
        cube(num)
        circular(num)
        ball(num)
    except ValueError,e:
        print "Input a invaild num"

 

5–9. 數值形式 回答下面關於數值格式的問題:
(a) 爲何下面的例子裏 17+32 等於 49, 而 017+32 等於 47, 017+032 等於 41?

17 32爲十進制數;017爲8進制數,轉換爲十進制爲15;032也爲8進制數,轉換爲十進制爲26

(b)爲何下面這個表達式咱們獲得的結果是 134L 而不是 1342 ?

>>> 56l + 78l
134L

56 和78後面爲小寫的L,爲長整型對象

5-10 轉換。寫一對函數來進行華氏度到攝氏度的轉換。轉換公式爲 C = (F - 32) * (5 / 9)
應該在這個練習中使用真正的除法, 不然你會獲得不正確的結果。

def centigrade():
    f=float(raw_input(">>"))
    c = (f - 32.0) * (5.0 / 9.0)
    print c
centigrade()

5-11 取餘。
(a) 使用循環和算術運算,求出 0-20 之間的全部偶數

print "偶數爲:"
for i in range(21):
    if i%2 == 0 and i!=0:
        print i

(b) 同上,不過此次輸出全部的奇數

print "奇數爲:"
for i in range(21):
    if i%2 != 0:
        print i

(c) 綜合 (a) 和 (b), 請問辨別奇數和偶數的最簡單的方法是什麼?

能不能被2整除
(d) 使用(c)的成果,寫一個函數,檢測一個整數可否被另外一個整數整除。 先要求用戶輸
入兩個數,而後你的函數判斷二者是否有整除關係,根據判斷結果分別返回 True 和 False;

def division():
    a=float(raw_input(">>"))
    b=float(raw_input(">>"))
    if a%b == 0:
        print True
    else:
        print False
division()

5-13 轉換。寫一個函數把由小時和分鐘表示的時間轉換爲只用分鐘表示的時間。

def minute():
    time=raw_input("輸入格式爲hour:minute>>")
    time=time.split(":")
    hour=int(time[0])
    minute=int(time[1])
    result=6*hour+minute
    print result
minute()

5-14 銀行利息。寫一個函數,以按期存款利率爲參數, 假定該帳戶每日計算複利,請計
算並返回年回報率。

def rate():
    money=float(raw_input(">>"))
    rate=float(raw_input(">>"))
    for i in range(3):
        money+=money*rate
        print money
    return money
rate()

5–15. 最大公約數和最小公倍數。請計算兩個整數的最大公約數和最小公倍數

def gongyueshu(m,n):
    if m<n:
        small = m
    else:
        small = n
    for i in range (small,0,-1):
        if m % i == 0 and n %i == 0:
            return i
def gongbeishu(m,n):
    gongyue = gongyueshu(m,n)
    return (m*n)/gongyue
 
gong = gongyueshu(m=10, n=3)
print gong
gongbei = gongbeishu(m=10,n=3)
print gongbei

5-16 家庭財務。給定一個初始金額和月開銷數, 使用循環,肯定剩下的金額和當月的支
出數, 包括最後的支出數。 Payment() 函數會用到初始金額和月額度, 輸出結果應該相似下
面的格式(例子中的數字僅用於演示):
Enter opening balance:100.00
Edit By Vheavens
Edit By Vheavens                              
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.00

def pay(total,amount):
    print "0  0  %r"%(total)
    remains=total-amount
    i=1
    while remains>=0:
        print "%d  %r %r"%(i,amount,remains) 
        remains=remains-amount
        i+=1
    print "%d  %r  0"%(i,amount)
pay(100,30)

5-17 隨機數。熟讀隨機數模塊而後解下面的題:
生成一個有 N 個元素的由隨機數 n 組成的列表, 其中 N 和 n 的取值範圍分別爲: (1 <
N <= 100), (0 <= n <= 231 -1)。而後再隨機從這個列表中取 N (1 <= N <= 100)個隨機數
出來, 對它們排序,而後顯示這個子集

#排除相同隨機數
def
random_without_same(): N=random.randint(0,100) temp = range(0, 231)
random.sample(temp,N)
print temp random_without_same()
#對重複的隨機數不作處理
N=random.randint(0,100) lis=[]for i in range(N): temp=random.randint(0,231) lis.append(temp) lis.sort() print lis

問:第17題中n的取值範圍0 <= n <= 231 -1     231  -1是什麼意思?是230的意思嗎

相關文章
相關標籤/搜索