1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Python一對(duì)一題目輔導(dǎo)「PTA 題目講解·難度系數(shù):基礎(chǔ)」

        共 12072字,需瀏覽 25分鐘

         ·

        2021-01-12 15:05

        題目范圍

        作業(yè) 7:

        image.png

        6-2?編寫(xiě)函數(shù)計(jì)算一個(gè)或不特定多個(gè)數(shù)的乘積

        1、函數(shù)接口定義:

        def caculate(*t)

        打 * 號(hào)的參數(shù) t 接受多個(gè)參數(shù)成員,參數(shù)成員預(yù)期為整數(shù)或浮點(diǎn)數(shù)類型。知識(shí)點(diǎn)講解 Linke:https://www.aiyc.top/126.html

        *args 的用法

        *args**kwargs 主要用于函數(shù)定義。你可以將不定數(shù)量的「參數(shù)」傳遞給一個(gè)函數(shù)。「這里的不定的意思是:「預(yù)先并不知道,函數(shù)使用者會(huì)傳遞多少個(gè)參數(shù)給你,所以在這個(gè)場(chǎng)景下使用這兩個(gè)關(guān)鍵字。*args 是用來(lái)發(fā)送一個(gè)」非鍵值」對(duì)的可變數(shù)量的參數(shù)列表給一個(gè)函數(shù)。這里有個(gè)例子幫你理解這個(gè)概念:

        def test_var_args(*args):
        print(args)
        print(type(args))

        test_var_args('yasoob', 'python', 'eggs', 'test')

        # 輸出
        ('yasoob', 'python', 'eggs', 'test')
        <class 'tuple'>

        我們可以發(fā)現(xiàn),拿到的數(shù)據(jù)的數(shù)據(jù)類型是元組(tuple)

        def test_var_args(f_arg, *argv):
        print("first normal arg:", f_arg)
        for arg in argv:
        print("another arg through *argv:", arg)

        test_var_args('yasoob', 'python', 'eggs', 'test')

        # 輸出
        first normal arg: yasoob
        another arg through *argv: python
        another arg through *argv: eggs
        another arg through *argv: test
        ?

        *args:可以自行換成別的名稱,不過(guò)我們約定俗成寫(xiě)成:args

        ?

        我希望這解決了你所有的困惑. 那接下來(lái)讓我們談?wù)?**kwargs

        **kwargs 的用法

        **kwargs?允許你將不定長(zhǎng)度的「鍵值對(duì)」, 作為參數(shù)傳遞給一個(gè)函數(shù)。如果你想要在一個(gè)函數(shù)里處理「帶名字的參數(shù)」, 你應(yīng)該使用**kwargs

        def greet_me(**kwargs):
        print(kwargs)
        print(type(kwargs))
        for key, value in kwargs.items():
        print("{0} == {1}".format(key, value))
        # print("{1} == {0}".format(key, value)) # 第二個(gè)主要用來(lái)讓同學(xué)們了解 format

        greet_me(name="yasoob", gzh='aiyuechuang', the_public='AI悅創(chuàng)')

        # 輸出
        {'name': 'yasoob', 'gzh': 'aiyuechuang', 'the_public': 'AI悅創(chuàng)'}
        <class 'dict'>
        name == yasoob
        gzh == aiyuechuang
        the_public == AI悅創(chuàng)

        現(xiàn)在你可以看出我們?cè)鯓釉谝粋€(gè)函數(shù)里, 處理了一個(gè)「鍵值對(duì)」參數(shù)了。這就是 **kwargs 的基礎(chǔ), 而且你可以看出它有多么管用。接下來(lái)讓我們談?wù)劊阍鯓邮褂?*args**kwargs 來(lái)調(diào)用一個(gè)參數(shù)為列表或者字典的函數(shù)。

        使用 *args**kwargs 來(lái)調(diào)用函數(shù)

        那現(xiàn)在我們將看到怎樣使用*args**kwargs 來(lái)調(diào)用一個(gè)函數(shù)。假設(shè),你有這樣一個(gè)小函數(shù):

        def test_args_kwargs(arg1, arg2, arg3):
        print("arg1:", arg1)
        print("arg2:", arg2)
        print("arg3:", arg3)

        可以聯(lián)想如果參數(shù)很多的話,這樣就代碼就不是非常的簡(jiǎn)潔。你可以使用?*args?或?**kwargs?來(lái)給這個(gè)小函數(shù)傳遞參數(shù)。下面是怎樣做:

        # 首先使用 *args
        >>> args = ("two", 3, 5)
        >>> test_args_kwargs(*args)
        arg1: two
        arg2: 3
        arg3: 5

        # 現(xiàn)在使用 **kwargs:
        >>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
        >>> test_args_kwargs(**kwargs)
        arg1: 5
        arg2: two
        arg3: 3

        標(biāo)準(zhǔn)參數(shù)與 *args、**kwargs 在使用時(shí)的順序

        那么如果你想在函數(shù)里同時(shí)使用所有這三種參數(shù), 順序是這樣的:

        some_func(fargs, *args, **kwargs)

        什么時(shí)候使用它們?

        這還真的要看你的需求而定。最常見(jiàn)的用例是在寫(xiě)函數(shù)裝飾器的時(shí)候。此外它也可以用來(lái)做猴子補(bǔ)丁(monkey patching)。猴子補(bǔ)丁的意思是在程序運(yùn)行時(shí)(runtime)修改某些代碼。打個(gè)比方,你有一個(gè)類,里面有個(gè)叫 get_info 的函數(shù)會(huì)調(diào)用一個(gè) API 并返回相應(yīng)的數(shù)據(jù)。如果我們想測(cè)試它,可以把 API 調(diào)用替換成一些測(cè)試數(shù)據(jù)。例如:

        import someclass

        def get_info(self, *args):
        return "Test data"

        someclass.get_info = get_info

        我敢肯定你也可以想象到一些其他的用例。

        2、裁判測(cè)試程序樣例:

        s = input().split()            #接受輸入字符串并按空格分拆,存入列表,列表成員為字符串類型
        t = [float(x) for x in s] #使用列表推導(dǎo)將列表s中的成員全部轉(zhuǎn)換成浮點(diǎn)數(shù),存入另一個(gè)列表t
        print("%.4f" % caculate(*t))

        3、輸入樣例:

        3 2 1

        4、輸出樣例:

        6.0000

        5、Coder

        def caculate(*t):
        product = 1
        for value in t:
        product *= value
        return product

        6-3?打印指定范圍內(nèi)的全部回文素?cái)?shù)

        「知識(shí)點(diǎn):」回文素?cái)?shù)是指一個(gè)數(shù)既是「素?cái)?shù)」又是「回文數(shù)」,例如 131 既是素?cái)?shù)又是回文數(shù)。請(qǐng)實(shí)現(xiàn)下述兩個(gè)函數(shù),幫助測(cè)試程序完成如下功能:從鍵盤(pán)輸入正整數(shù) N, 打印從 1 ~ N ?(包含 N )的全部「回文素?cái)?shù)」,一行一個(gè)。

        ?

        回文素?cái)?shù)是指,對(duì)一個(gè)整數(shù) n(n≥11)「從左向右」「從右向左讀:其結(jié)果值相同且是素?cái)?shù)「質(zhì)數(shù)」」,即稱 n 為回文素?cái)?shù)。「「1、實(shí)現(xiàn)方法」」

        ?
        ?

        除了 11,「偶數(shù)位的數(shù)不存在回文質(zhì)數(shù)」。4位,6位,8位……數(shù)不存在回文質(zhì)數(shù)。因?yàn)樗奈患八奈灰陨系呐紨?shù)位的回文數(shù)都可以被 11 整除,故不存在偶數(shù)位的回文質(zhì)數(shù)。「「2、判斷輸入數(shù)的位數(shù)」」最初幾個(gè)回文素?cái)?shù):11,101,131,151,181,191,313,353,373,383,727,757,787,797,919,929……兩位回文素?cái)?shù)1個(gè),三位回文素?cái)?shù)15個(gè),五位回文素?cái)?shù)93個(gè),七位回文素?cái)?shù)668個(gè),九位回文素?cái)?shù) 5172個(gè)。

        ?

        1、函數(shù)接口定義:

        def isPrime(num):

        def reverseNumber(num):

        isPrime() 用于判斷整數(shù) num 是否是素?cái)?shù),是返回 True , 否則返回 False。reverseNumber() 用于返回整數(shù) num 的反向數(shù),321 的反向數(shù)為 123, 320 的反向數(shù)為 23。

        2、裁判測(cè)試程序樣例:

        N = int(input()) # 獲取數(shù)字并轉(zhuǎn)為整數(shù),并且這個(gè) N 是一個(gè)范圍
        for n in range(1, N+1): # range 是左閉右開(kāi),不會(huì)提取到結(jié)尾的那個(gè)數(shù)所以需要 + 1,然后以這個(gè)范圍做循環(huán)。
        if isPrime(n) and reverseNumber(n) == n:
        print(n)

        3、輸入樣例:

        400

        4、輸出樣例:

        2
        3
        5
        7
        11
        101
        131
        151
        181
        191
        313
        353
        373
        383

        5、Coder

        1、質(zhì)數(shù)的判斷方法:

        一個(gè)大于1的自然數(shù),除了1和它本身外,不能被其他自然數(shù)(質(zhì)數(shù))整除(2, 3, 5, 7等),換句話說(shuō)就是該數(shù)除了1和它本身以外不再有其他的因數(shù)。「方法一:」

        # 用戶輸入數(shù)字
        num = int(input("請(qǐng)輸入一個(gè)數(shù)字: "))

        # 質(zhì)數(shù)大于 1
        if num > 1:
        # 查看因子
        for i in range(2, num):
        if (num % i) == 0: # 肯定是除于比 num 小的數(shù)來(lái)檢測(cè)是否能被整除
        print(num,"不是質(zhì)數(shù)")
        print(i, "乘于", num//i, "是", num) # 如果能被整除那直接用 // 也是可以的。
        break
        else:
        print(num, "是質(zhì)數(shù)")

        # 如果輸入的數(shù)字小于或等于 1,不是質(zhì)數(shù)
        else:
        print(num, "不是質(zhì)數(shù)")

        「方法二:」

        from math import sqrt
        def is_prime(n):
        if n == 1:
        return False
        for i in range(2, int(sqrt(n))+1):
        if n % i == 0:
        return False
        return True

        方法三:

        def isPrime(num):
        if num == 1:
        return 0
        elif num == 2:
        return 2
        else :
        from math import sqrt
        active = True
        for i in range(2, int(sqrt(num))+1):
        if num % i == 0:
        active = False
        if active:
        return num
        else:
        return 0

        2、整數(shù)反轉(zhuǎn)

        「解題思路:」首先我們想一下,怎么去反轉(zhuǎn)一個(gè)整數(shù)?——用棧?或者把整數(shù)變成字符串,再去反轉(zhuǎn)這個(gè)字符串?這兩種方式是可以,但并不好。實(shí)際上我們只要能拿到這個(gè)整數(shù)的末尾數(shù)字就可以了。以 12345 為例,先拿到 5,再拿到 4,之后是 3,2,1,我們按這樣的順序就可以反向拼接處一個(gè)數(shù)字了,也就能達(dá)到 「反轉(zhuǎn)」 的效果。怎么拿末尾數(shù)字呢?好辦,用取模運(yùn)算就可以了。「「取余運(yùn)算即可」」

        1、將 12345 % 10 得到 5,之后將12345 / 10 2、將1234 % 10 得到4,再將1234 / 10 3、將123 % 10 得到3,再將123 / 10 4、將12 % 10 得到2,再將12 / 10 5、將1 % 10 得到1,再將1 / 10

        這么看起來(lái),一個(gè)循環(huán)就搞定了,循環(huán)的判斷條件是 x>0 但這樣不對(duì),因?yàn)楹雎粤?「負(fù)數(shù)」循環(huán)的判斷條件應(yīng)該是 while(x!=0),無(wú)論正數(shù)還是負(fù)數(shù),按照上面不斷的 /10 這樣的操作,最后都會(huì)變成0,所以判斷終止條件就是 !=0 有了取模和除法操作,對(duì)于像 12300 這樣的數(shù)字,也可以完美的解決掉了。


        看起來(lái)這道題就這么解決了:

        def reverseNumber(num):
        res = 0
        while (num != 0):
        tmp = num % 10
        res = res * 10 + tmp
        num = int(num / 10)
        return res


        if __name__ == '__main__':
        print(reverseNumber(3456))

        「6-4?整數(shù)數(shù)位和(高教社,《Python編程基礎(chǔ)及應(yīng)用》習(xí)題8-3)?(4分)」

        編寫(xiě)一個(gè)函數(shù),該函數(shù)接受一個(gè)正整數(shù)作為參數(shù),返回該整數(shù)的各位數(shù)字之和。

        1、函數(shù)接口定義:

        def digitSum(v)

        v 為輸入整數(shù)(正整數(shù));函數(shù)返回一個(gè)整數(shù),其值為 v 的各位數(shù)字之和。

        2、裁判測(cè)試程序樣例:

        a = int(input())
        print(digitSum(a))

        3、輸入樣例:

        291

        4、輸出樣例:

        12

        5、Coder

        def digitSum(a):
        num_list = list(str(a))
        tmp = 0
        for i in num_list:
        # tmp = tmp + int(i)
        tmp += int(i)
        return tmp
        def digitSum(v):
        num_list = list(str(v))
        a = 0
        for i in range(0,len(num_list)):
        a += int(num_list[i])
        return a

        題目已經(jīng)給定了這個(gè)數(shù)字,如果是在實(shí)際的開(kāi)發(fā)當(dāng)中,是需要對(duì)輸入的數(shù)字是不是純數(shù)字進(jìn)行判斷的。

        「6-5?編寫(xiě)函數(shù)計(jì)算f(i) = 1/2 + 2/3 + 3/4 + ... + i/(i+1)?

        編寫(xiě)函數(shù)計(jì)算f(i) = 1/2 + 2/3 + 3/4 + ... + i/(i+1) 。

        1、函數(shù)接口定義:

        def f(i):

        i 為正整數(shù),返回結(jié)果浮點(diǎn)數(shù)。

        2、裁判測(cè)試程序樣例:

        v=int(input())
        print("%.4f" % f(v))

        3、輸入樣例:

        5

        4、輸出樣例:

        3.5500

        5、Coder

        def f(i) :
        result = 0
        for x in range(i+1):
        current_num = x / (x + 1)
        result += current_num
        return result

        作業(yè) 8:

        image.png

        6-1?定義并實(shí)現(xiàn)身體質(zhì)量指數(shù)類

        按圖施工,設(shè)計(jì)下述 BMI 「**Body Mass Index」**類,用于計(jì)算身體質(zhì)量指數(shù)。該指數(shù)等于體重(kg) 除以身高 (米) 的平方。相應(yīng)的判定標(biāo)準(zhǔn)如下圖所示。

        1、BMI 類接口定義:

        class BMI:
        ...

        其中,name 為姓名,age 為年齡,height 為身高,單位為米,weight 為體重,單位為 kg。getBMI() 函數(shù)返應(yīng)計(jì)算所得的身體質(zhì)量指數(shù);getStatus() 返回評(píng)價(jià)結(jié)果,其值應(yīng)為超輕/標(biāo)準(zhǔn)/超重/肥胖之一。

        2、裁判測(cè)試程序樣例:

        >>>x = 7
        >>> eval( '3 * x' )
        21
        >>> eval('pow(2,2)')
        4
        >>> eval('2 + 2')
        4
        >>> n=81
        >>> eval("n + 4")
        85
        sName = input()  #輸入姓名
        iAge = int(input()) #輸入年齡
        fHeight = eval(input()) #輸入身高,預(yù)期為浮點(diǎn)數(shù),單位米
        fWeight = eval(input()) #輸入體重,預(yù)期為浮點(diǎn)數(shù),單位千克
        bmi=BMI(sName,iAge,fHeight,fWeight) #實(shí)例化BMI類
        print("Name:",bmi.name)
        print("Age:",bmi.age)
        print("BMI = %.3f" % bmi.getBMI())
        print("Result =",bmi.getStatus())

        3、輸入樣例:

        Alex
        27
        1.75
        68

        4、輸出樣例:

        Name: Alex
        Age: 27
        BMI = 22.204
        Result = 標(biāo)準(zhǔn)

        5、Coder

        class BMI:
        def __init__(self,sName,iAge,fHeight,fWeight):
        self.name=sName
        self.age=iAge
        self.height=fHeight
        self.weight=fWeight
        def getStatus(self):
        m=fWeight/(fHeight**2)
        if m<18:
        return ("超輕")
        elif m>=18 and m<25:
        return ("標(biāo)準(zhǔn)")
        elif m>=25 and m<27:
        return ("超重")
        else:
        return ("肥胖")
        def getBMI(self):
        n=fWeight/(fHeight**2)
        return n

        「6-2?定義并實(shí)現(xiàn) Book 類及其__del__函數(shù)

        圖書(shū)館里有很多的書(shū), 請(qǐng)定義一個(gè)名為 Book 的類。該類的屬性包括書(shū)名(字符串),書(shū)號(hào)(字符串),單價(jià)(浮點(diǎn)數(shù));該類的構(gòu)造函數(shù)接受書(shū)名,書(shū)號(hào)及單價(jià)三個(gè)參數(shù)并參成對(duì)象初始化;該類的 「del」() 函數(shù)則向終端打印如下信息:Book destroyed-書(shū)名,書(shū)號(hào),單價(jià) 注意:?jiǎn)蝺r(jià)保留兩位小數(shù)。

        1、類接口定義:

        class Book:
        ...

        2、裁判測(cè)試程序樣例:

        sName = input()  #輸入書(shū)名
        sNo = input() #輸入書(shū)號(hào)
        fPrice = float(input()) #輸入單價(jià)
        b = Book(sName,sNo,fPrice)
        b = None #觸發(fā)b對(duì)象的__del__方法的執(zhí)行

        3、輸入樣例:

        Python編程基礎(chǔ)及應(yīng)用
        888-999
        43.678

        4、輸出樣例:

        Book destroyed-Python編程基礎(chǔ)及應(yīng)用,888-999,43.68

        5、Coder

        class Book:
        def __init__(self,name,No,price):
        self.sName=name
        self.sNo=No
        self.fPrice=price
        def name(self):
        return self.sName
        def number(self):
        return self.sNo
        def price(self):
        return self.fPrice
        def __del__(self):
        print("Book destroyed-%s,%s,%.2f" %(self.sName,self.sNo,self.fPrice))

        創(chuàng)建對(duì)象后,python 解釋器默認(rèn)調(diào)用__init__()方法。當(dāng)刪除一個(gè)對(duì)象時(shí),python解釋器也會(huì)默認(rèn)調(diào)用一個(gè)方法,這個(gè)方法為_(kāi)_del__()方法。在python中,對(duì)于開(kāi)發(fā)者來(lái)說(shuō)很少會(huì)直接銷毀對(duì)象(如果需要,應(yīng)該使用del關(guān)鍵字銷毀)。Python的內(nèi)存管理機(jī)制能夠很好的勝任這份工作。也就是說(shuō),不管是手動(dòng)調(diào)用del還是由python自動(dòng)回收都會(huì)觸發(fā)__del__方法執(zhí)行:

        import time


        class Animal(object):
        # 初始化方法
        # 創(chuàng)建完對(duì)象后會(huì)自動(dòng)被調(diào)用
        def __init__(self, name):
        print('__init__方法被調(diào)用')
        self.__name = name

        # 析構(gòu)方法
        # 當(dāng)對(duì)象被刪除時(shí),會(huì)自動(dòng)被調(diào)用
        def __del__(self):
        print("__del__方法被調(diào)用")
        print("%s對(duì)象馬上被干掉了..." % self.__name)


        # 創(chuàng)建對(duì)象
        dog = Animal("哈皮狗")

        # 刪除對(duì)象
        del dog
        cat = Animal("波斯貓")
        cat2 = cat
        cat3 = cat
        print("---馬上 刪除cat對(duì)象")
        del cat
        print("---馬上 刪除cat2對(duì)象")
        del cat2
        print("---馬上 刪除cat3對(duì)象")
        del cat3
        print("程序2秒鐘后結(jié)束")
        time.sleep(2)

        「6-3?設(shè)計(jì)一元二次方程求解類(高教社,《Python編程基礎(chǔ)及應(yīng)用》習(xí)題9-4)?(4分)」

        設(shè)計(jì)一個(gè)類 Root 來(lái)計(jì)算 ax+bx+c=0 的根。該類包括:a、b、c 共 3 個(gè)屬性表示方程的 3 個(gè)系數(shù),getDiscriminant() 方法返回 b-4ac getRoot1() 和 getRoot2() 返回方程的兩個(gè)根。其中,getRoot1()返回的根對(duì)應(yīng):getRoot2()返回的根對(duì)應(yīng):?

        1、類接口定義:

        class Root:
        def __init__(self,a,b,c):
        ...

        2、裁判測(cè)試程序樣例:

        a=float(input()) #請(qǐng)輸入二次項(xiàng)系數(shù)
        b=float(input()) #請(qǐng)輸入一次項(xiàng)系數(shù)
        c=float(input()) #請(qǐng)輸入常數(shù)項(xiàng)系數(shù)

        root=Root(a,b,c)
        if root.getDiscriminant()>0:
        print("{:.2f}".format(root.getRoot1()))
        print("{:.2f}".format(root.getRoot2()))
        elif root.getDiscriminant()==0:
        print("{:.2f}".format(root.getRoot1()))
        else:
        print("No Root!")

        3、輸入樣例:

        2.1
        10.2
        3.0

        4、輸出樣例:

        -0.31
        -4.54

        5、Coder

        from math import sqrt


        class Root:
        def __init__(self, a, b, c):
        self.two = a
        self.one = b
        self.cs = c

        def getDiscriminant(self):
        return b ** 2 - 4 * a * c

        def getRoot1(self):
        m = b ** 2 - 4 * a * c
        n = b * (-1) + sqrt(m)
        return n / (2 * a)

        def getRoot2(self):
        m = b ** 2 - 4 * a * c
        n = b * (-1) - sqrt(m)
        return n / (2 * a)

        「6-4?設(shè)計(jì)一個(gè)股票類

        設(shè)計(jì)一個(gè)名為 Stock 的類來(lái)表示一個(gè)公司的股票,包括以下內(nèi)容:1)股票代碼、股票名稱、前一天股票價(jià)格、當(dāng)天股票價(jià)格4個(gè)「私有」屬性;2)構(gòu)造方法,需初始化代碼、名稱、前一天價(jià)格和當(dāng)天價(jià)格等屬性;3)返回股票名字的 get 方法; 4)返回股票代碼的 get 方法; 5)獲取和設(shè)置股票前一天價(jià)格的get和set方法; 6)獲取和設(shè)置股票當(dāng)前價(jià)格的get和set方法; 7)名為getChangePercent()方法,返回前日收市價(jià)至當(dāng)前價(jià)格的變化百分比;8). 包括文檔字符串,其內(nèi)容為:"Stock Information Class" 說(shuō)明:各方法的名稱及參數(shù)要求請(qǐng)參見(jiàn)測(cè)試程序。

        1、類接口定義:

        class Stock:
        ...

        2、裁判測(cè)試程序樣例:

        # 股票代碼、股票名稱、前一天股票價(jià)格、當(dāng)天股票價(jià)格 4 個(gè)私有屬性;
        sCode = input() #輸入股票代碼
        sName = input() #輸入股票名稱
        priceYesterday = float(input()) #輸入前一天股票價(jià)格
        priceToday = float(input()) #輸入今日股票價(jià)格

        # 類:Stock
        s = Stock(sCode,sName,priceYesterday,priceToday) # 初始化代碼

        print("代碼:", s.getCode())
        print("名稱:", s.getName())
        print("昨日價(jià)格:%.2f\n今天價(jià)格:%.2f" % (s.getPriceYesterday(),s.getPriceToday()))
        s.setPriceYesterday(50.25)
        print("修正昨日價(jià)格為:%.2f" % 50.25)
        print("價(jià)格變化百分比:%.2f%%" % (s.getChangePercent()*100))
        print(Stock.__doc__)

        3、輸入樣例:

        601318
        中國(guó)平安
        63.21
        64.39

        4、輸出樣例:

        代碼: 601318
        名稱: 中國(guó)平安
        昨日價(jià)格:63.21
        今天價(jià)格:64.39
        修正昨日價(jià)格為:50.25
        價(jià)格變化百分比:28.14%
        Stock Information Class

        5、Coder

        class Stock:
        '''Stock Information Class'''

        def __init__(self, sCode, sName, priceYesterday, priceToday):
        self.sCode = sCode
        self.sName = sName
        self.priceYesterday = priceYesterday
        self.priceToday = priceToday

        def getCode(self):
        return self.sCode

        def getName(self):
        return self.sName

        def getPriceYesterday(self):
        return self.priceYesterday

        def getPriceToday(self):
        return self.priceToday

        def setPriceYesterday(self, new):
        self.priceYesterday = new

        def setPriceToday(self, new):
        self.priceToday = new

        def getChangePercent(self):
        return (self.priceToday - self.priceYesterday) / self.priceYesterday

        「6-5?設(shè)計(jì)Shape基類及Circle, Rectangle繼承類

        設(shè)計(jì)一個(gè)基類 Shape,包括:

        1. 名為 sName 的屬性(圖形名稱);

        2. 構(gòu)造函數(shù)應(yīng)對(duì) sName 屬性進(jìn)行初始化。

        設(shè)計(jì) Shape 的繼承類 Rectangle , ? 包括:

        1. 長(zhǎng),寬兩個(gè)屬性;

        2. 構(gòu)造函數(shù)調(diào)用 Shape 的構(gòu)造函數(shù),并初始化長(zhǎng),寬兩個(gè)屬性;

        3. getArea() 成員函數(shù)計(jì)算并返回矩形面積。

        設(shè)計(jì) Shape 的繼承類 Circle, 包括:

        1. 半徑屬性;

        2. 構(gòu)造函數(shù)調(diào)用 Shape 的構(gòu)造函數(shù),并初始化半徑屬性;

        3. getArea() 成員函數(shù)計(jì)算并返回圓形面積。

        注意:請(qǐng)注意閱讀測(cè)試樣例程序以理解題目對(duì)類的接口的要求。

        1、類接口定義:

        class Shape:
        ...

        class Rectangle(Shape):
        ...

        class Circle(Shape):
        ...

        2、裁判測(cè)試程序樣例:

        s1 = Shape("shape0")
        s = input() #矩形名稱
        w = float(input()) #矩形寬度
        h = float(input()) #矩形高度
        r1 = Rectangle(s,w,h)
        s = input() #圓的名稱
        r = float(input()) #圓的半徑
        c1 = Circle(s,r)

        print(s1.sName)
        print("矩形%s面積: %.2f" % (r1.sName,r1.getArea()))
        print("圓形%s面積: %.2f" % (c1.sName,c1.getArea()))

        3、輸入樣例:

        Jupyter
        12.1
        9.9
        Moon
        3.3

        4、輸出樣例:

        shape0
        矩形Jupyter面積: 119.79
        圓形Moon面積: 34.21

        5、Coder

        from math import pi


        # 設(shè)計(jì)一個(gè)基類Shape,包括:
        class Shape:
        def __init__(self, sName=""):
        # 名為 sName 的屬性(圖形名稱);
        # 構(gòu)造函數(shù)應(yīng)對(duì) sName 屬性進(jìn)行初始化。
        self.sName = sName


        # 設(shè)計(jì) Shape 的繼承類 Rectangle , 包括:
        class Rectangle(Shape):
        # 長(zhǎng),寬兩個(gè)屬性;
        # 構(gòu)造函數(shù)調(diào)用 Shape 的構(gòu)造函數(shù),并初始化長(zhǎng),寬兩個(gè)屬性;
        def __init__(self, sName='', h=0.0, w=0.0):
        Shape.__init__(self, sName="")
        self.h = h
        self.w = h
        self.sName = sName

        # getArea() 成員函數(shù)計(jì)算并返回矩形面積。
        def getArea(self):
        return h * w

        # 設(shè)計(jì) Shape 的繼承類 Circle ,包括:
        class Circle(Rectangle):
        # 半徑屬性;
        # 構(gòu)造函數(shù)調(diào)用 Shape 的構(gòu)造函數(shù),并初始化半徑屬性;
        def __init__(self, sName='', r=0.0):
        Shape.__init__(self, sName="")
        self.r = r
        self.sName = sName
        # getArea()成員函數(shù)計(jì)算并返回圓形面積。
        def getArea(self):
        area = pi * r ** 2
        return area

        「6-6?設(shè)計(jì)學(xué)生類,使用類對(duì)象屬性來(lái)記錄學(xué)生對(duì)象的數(shù)量」

        設(shè)計(jì)一個(gè)名為 Student 的學(xué)生類:

        1. 使用名為 count 的類對(duì)象屬性來(lái)記錄 Student 對(duì)象的個(gè)數(shù);

        2. 構(gòu)造函數(shù)中初始化學(xué)號(hào)及姓名兩個(gè)屬性,并對(duì) count 屬性加 1;

        3. 析構(gòu)函數(shù)(「del」)中對(duì)類對(duì)象屬性 count 減1。說(shuō)明:請(qǐng)閱讀測(cè)試樣例程序來(lái)理解題目對(duì)類的接口要求。

        1、類接口定義:

        class Student
        ....

        2、裁判測(cè)試程序樣例:

        n = int(input())  #輸入學(xué)生數(shù)量,數(shù)量大于1
        s = []
        for i in range(n):
        s.append(Student("Code"+str(i),"Name"+str(i)))
        del s[0] #刪除一個(gè)學(xué)生,導(dǎo)致count減1
        print("學(xué)生數(shù)量:",Student.count)
        for x in s:
        print(x.code,x.name)

        3、輸入樣例:

        3

        4、輸出樣例:

        學(xué)生數(shù)量: 2
        Code1 Name1
        Code2 Name2

        5、Coder

        # 設(shè)計(jì)一個(gè)名為 Student 的學(xué)生類:
        class Student:
        # 使用名為 count 的類對(duì)象屬性來(lái)記錄 Student 對(duì)象的個(gè)數(shù);
        count = 0

        def __init__(self, scode, sname):
        # 造函數(shù)中初始化學(xué)號(hào)及姓名兩個(gè)屬性,并對(duì) count 屬性加 1;
        self.code = scode
        self.name = sname
        Student.count += 1

        # 析構(gòu)函數(shù)(__del__)中對(duì)類對(duì)象屬性 count 減1。
        def __del__(self):
        Student.count = Student.count - 1

        6-7?設(shè)計(jì)計(jì)數(shù)集合類,記錄各元素加入集合的次數(shù)

        從 set 類型繼承,并設(shè)計(jì)一個(gè)名為 CountedSet 的子類型。通過(guò)重載 set 類型的某些函數(shù),使得 CountedSet 對(duì)象 可以統(tǒng)計(jì)并記錄各個(gè)元素被放入集合的總次數(shù)。請(qǐng)通過(guò)裁判測(cè)試程序了解該類的接口。

        1、類接口定義:

        class CountedSet(set):
        ...

        2、裁判測(cè)試程序樣例:

        s = CountedSet()
        while True: #用q表示輸入結(jié)束
        v = input() #輸入一個(gè)字符串
        if (v!="q"):
        s.add(v)
        else:
        break
        #將集合轉(zhuǎn)換成列表,排序遞增輸出
        t = sorted(list(s))
        print("元素值 次數(shù)")
        for x in t:
        print(x,"-",s.getCount(x))
        print("集合內(nèi)元素個(gè)數(shù):",len(s))

        3、輸入樣例:

        a
        b
        a
        q

        4、輸出樣例:

        在這里給出相應(yīng)的輸出。例如:

        元素值 次數(shù)
        a - 2
        b - 1
        集合內(nèi)元素個(gè)數(shù): 2

        5、Coder

        class CountedSet(set):
        def __init__(self):
        set.__init__(self)
        self.jishu = {}

        def add(self, x):
        set.add(self, x)
        self.jishu[x] = self.jishu.get(x, 0) + 1

        def getCount(self, x):
        return self.jishu[x]
        image.png
        上一篇文章,歸學(xué)會(huì)了,這道題也就會(huì)了。冒泡排序

        可以點(diǎn)擊閱讀原文,即可獲得更好的閱讀體驗(yàn)!

        長(zhǎng)按識(shí)別下方二維碼,和眾多位島民一起

        把別人的頓悟,變成你的基本功


        ?花半秒鐘就看透事物本質(zhì)的人,
        ? 和花一輩子都看不清的人,
        ? 注定是截然不同的命運(yùn)。

        瀏覽 104
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产人妻 | 嗯啊慢点视频 | 91爱爱网站 | 一级黄色性生活视频 | 爱逼爱操综合 | 国产无遮挡 | 免看一级a一片成人久久最新章节 | 女人自摸视频 | 欧美操B在线 | 雷谢一级毛片 |