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