<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          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ì)直接銷(xiāo)毀對(duì)象(如果需要,應(yīng)該使用del關(guān)鍵字銷(xiāo)毀)。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)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线精品一区豆花 | 国产久久这里只有精品视频 | 亚洲成人AV电影在线观看 | av亚洲产国偷v产偷v自拍牛牛 | 色综合久久88色综合天天看泰 |