《Python核心編程》第5章 數字 練習

5-2 運算符
(a) 寫一個函數,計算並返回兩個數的乘積

(b) 寫一段代碼調用這個函數,並顯示它的結果

# coding=utf-8
__author__ = 'Ibuki Suika'


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

if __name__ == '__main__':
    a = input('a=')
    b = input('b=')
    print(mul(a, b))

5-3 標準類型運算符.

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

# coding=utf-8
__author__ = 'Ibuki Suika'


def level(score):
    if score >= 90:
        return  'A'
    elif score >= 80:
        return 'B'
    elif score >= 70:
        return 'C'
    elif score >= 60:
        return 'D'
    else:
        return 'F'

if __name__ == '__main__':
    s = input('score=')
    print(level(s))

5-4 取餘。

判斷給定年份是否是閏年。使用下面的公式:
一個閏年就是指它可以被4 整除,但不能被100 整除, 或者它既可以被4 又可以被100 整除。比如 1992,1996 和2000 年是閏年,但1967 和1900 則不是閏年。下一個是閏年的整世紀是 2400 年。

# coding=utf-8
__author__ = 'Ibuki Suika'


def is_leap_year(year):
    return year % 4 == 0 and year % 100 != 0 or year % 400 == 0

if __name__ == '__main__':
    y = input('year=')
    if is_leap_year(y):
        print('leap year')
    else:
        print('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 美分這樣的結果都是不符合要求的。

# coding=utf-8
__author__ = 'Ibuki Suika'


def change(dollar):
    money = dollar * 100
    m25, money = divmod(money, 25)
    m10, money = divmod(money, 10)
    m5, m1 = divmod(money, 5)
    return int(m1), int(m5), int(m10), int(m25)

if __name__ == '__main__':
    m = input('money=')
    print(change(m))

5-6 算術。

寫一個計算器程序 你的代碼可以接受這樣的表達式,兩個操作數加一個運算符:N1 運算符 N2. 其中 N1 和 N2 爲整數或浮點數,運算符可以是+, -, *, /, %, ** 分別表示
加法,減法, 乘法, 整數除,取餘和冪運算。計算這個表達式的結果,然後顯示出來。

提示:可以使用字符串方法 split(),但不可以使用內建函數 eval().

# coding=utf-8
__author__ = 'Ibuki Suika'


def compute(expr):
    ls = expr.split(' ')
    if len(ls) != 3:
        raise ValueError
    try:
        m = float(ls[0])
        n = float(ls[2])
    except ValueError:
        raise ValueError
    else:
        op = ls[1]
        if op == '+':
            return m + n
        elif op == '-':
            return m - n
        elif op == '*':
            return m * n
        elif op == '/':
            return m / n
        elif op == '%':
            return m % n
        elif op == '**':
            return m ** n
        else:
            raise ValueError

if __name__ == '__main__':
    s = raw_input('expr: ')
    try:
        print(compute(s))
    except ValueError:
        print('wrong expression')

5-10 轉換。

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

 def f2c(f):
    return (f - 32) * (5.0 / 9)

f = float(raw_input('f='))
print f2c(f)

5-12 系統限制。

寫一段腳本確認一下你的Python 所能處理的整數,長整數,浮點數和複數的範圍。

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

5–15. 最大公約數和最小公倍數。

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

# coding=utf-8
__author__ = 'Ibuki Suika'


def hcf(n, m):
    'highest common factor'
    if not isinstance(n, (int, long)) or not isinstance(m, (int, long)):
        raise ValueError

    while True:
        if n == 0 or m == 0:
            break
        if (n > m):
            (n, m) = (m, n)
        (n, m) = (n, m % n)
    return n


def lcm(n, m):
    'least common multiple'
    return n * m / hcf(n, m)


if __name__ == '__main__':
    n = long(raw_input('number1='))
    m = long(raw_input('number2='))
    print hcf(n, m)
    print lcm(n, m)

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.00

def payment(pay, balance):
    i = 0
    print 'Pymt#\tPaid\tBalance'
    while balance > 0:
        print '%d\t$%.2f\t$%.2f' % (i, pay, balance)
        i += 1
        if balance > pay:
            balance -= pay
        else:
            print '%d\t$%.2f\t$%.2f' % (i, balance, 0)
            balance = 0

balance = float(raw_input('Enter opening balance: '))
pay = float(raw_input('Enter monthly payment: '))
payment(pay, balance)

5-17 隨機數。

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

# coding=utf-8
__author__ = 'Ibuki Suika'

from random import randint, choice


def rand_list(n, m):
    if not (1 < n <= 100) or (n < m):
        raise ValueError

    data = [randint(0, 2 ** 31 - 1) for i in xrange(n)]
    result = [choice(data) for i in xrange(m)]
    result.sort()
    return result


if __name__ == '__main__':
    n = input('count= ')
    m = input('choice= ')
    print rand_list(n, m)



發佈了40 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章