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>

        新教材習(xí)題解析之python自定義函數(shù)(2)

        共 3256字,需瀏覽 7分鐘

         ·

        2021-08-18 12:45

        說(shuō)在前面

        受《新時(shí)代領(lǐng)航技術(shù)同步用書(shū)》編委會(huì)的邀請(qǐng),我也嘗試著編制了一些題目,盡可能按照新課標(biāo)的要求,力求能夠激發(fā)學(xué)生思考和考查學(xué)生的計(jì)算思維。

        上次已經(jīng)和大家分享了2道公民身份證號(hào)碼為背景的題目,試圖從設(shè)計(jì)自定義函數(shù)的角度,幫助學(xué)生初步掌握模塊化編程的方法。由于自定義函數(shù)是編程教學(xué)的重、難點(diǎn),必須多加練習(xí)才能掌握,所以今天繼續(xù)和大家分享2道相同類型的題目。

        由于新教材是塊新大陸,我們都是在摸索前行,加之本人水平有限,在描述題目用語(yǔ)和控制題目難度方面都存在不足,敬請(qǐng)大家批評(píng)指正。



        8.(開(kāi)放題)小美參加環(huán)保知識(shí)競(jìng)答比賽,回答結(jié)果存儲(chǔ)在字符串中,其中回答正確用'T'表示,回答錯(cuò)誤用'F'表示?;卮疱e(cuò)誤不得分,連續(xù)答對(duì)k題,則第k題加k分。
        下面的自定義函數(shù)能根據(jù)答案字符串計(jì)算小美的總分?jǐn)?shù)。它的形式參數(shù)ans是一個(gè)只包含'F''T'兩種字符的字符串,函數(shù)根據(jù)得分規(guī)則和答案字符串計(jì)算出的總分?jǐn)?shù)。
        例如,當(dāng)ans='FTTTFTTFFT'時(shí),函數(shù)返回10;當(dāng)ans='TTTTFFTFTF'時(shí),函數(shù)返回12。
        請(qǐng)認(rèn)真閱讀代碼,回答如下問(wèn)題:
        1)將缺失的代碼補(bǔ)充完整;
        2)當(dāng)ans='FFFTTTTTFF'時(shí),函數(shù)返回值是多少?
        (3)除了題目給出的代碼,你能用其他方式實(shí)現(xiàn)自定義函數(shù)get_score(ans)嗎?
        def get_score(ans):
           k, s = 0, 0
           for c in ans:
                if c == 'T':
                    k = k + 1 
                    s =           
                else:
                    k =         
           return s
        #主函數(shù)部分
        ans = 'FFFTTTTTFF'
        print(get_score(           ))



        解析:本題考查自定義函數(shù)、字符串處理和計(jì)數(shù)方法。
        1)根據(jù)題意可知變量ks分別用來(lái)存儲(chǔ)當(dāng)前答題得分和總分?jǐn)?shù),它們的初始值均為0。因?yàn)檫B續(xù)答對(duì)k題,第k題加k分,最終返回總分,故第①空答案為s + k,第②空答案為0
                 調(diào)用函數(shù)時(shí),我們只需在函數(shù)名后面的圓括號(hào)里填寫(xiě)實(shí)參ans即可。
        2)當(dāng)ans='FFFTTTTTFF'時(shí),s = 1+2+3+4+5 = 15,即函數(shù)返回值為15。
        答案:(1)① s + k   ans
        215
        3)根據(jù)連續(xù)連續(xù)答對(duì)k題,則第k題加k分的算法,我們可以使用公式s = k * (k +1) / 2來(lái)計(jì)算連續(xù)答對(duì)k題的總分。我們可以存儲(chǔ)字符串的總長(zhǎng)度,設(shè)置外層while循環(huán)條件為i < n,然后在內(nèi)層循環(huán)中跳過(guò)字符'F',然后使用while循環(huán)記錄連續(xù)出現(xiàn)子串'T'的數(shù)量,并根據(jù)公式計(jì)算得分,參考代碼如下:
        算法1:存儲(chǔ)字符串的總長(zhǎng)度,設(shè)置外層while循環(huán)條件為i < n
        def get_score2(ans):    s, i, n = 0, 0, len(ans)    while i < n:        while i < n and ans[i] == 'F':            i += 1        p = i #記錄當(dāng)前'T'子串的起始位置        while i < n and ans[i] == 'T':            i += 1        s += (i - p) * (i - p + 1) // 2    return s

         

        為了進(jìn)一步提高程序效率,我們可以為字符串增加一個(gè)結(jié)束符'.'(或除'FT'以外的其他字符)作為“哨兵”,這樣在遍歷字符串時(shí),就可以將外層while循環(huán)條件寫(xiě)成ans[i] !='.'。有了“哨兵”以后,在內(nèi)層循環(huán)中就無(wú)需判斷下標(biāo)是否越界,提高了程序效率。

        算法2:為字符串增加一個(gè)結(jié)束符,可以進(jìn)一步提高程序效率。

        def get_score3(ans):   ans += '.' #為字符串增加一個(gè)結(jié)束符   s, i = 0, 0   while ans[i] != '.':       while ans[i] == 'F':#跳過(guò)'F'子串           i += 1       p = i #記錄當(dāng)前'T'子串的起始位置       while ans[i] == 'T':           i += 1       s += (i - p) * (i - p + 1) / 2   return s


        拓展思考:
        10.(開(kāi)放題)隨機(jī)數(shù)可以用于數(shù)學(xué),游戲,安全等領(lǐng)域中,還經(jīng)常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。Python提供了random模塊來(lái)生成隨機(jī)數(shù),它的randint(),randrange(),choice()sample()等方法都可以生成一個(gè)或多個(gè)隨機(jī)數(shù)。

        例如下面的列表生成式就可以很方便的生成一個(gè)長(zhǎng)度為10的隨機(jī)數(shù)序列,其元素值為[1, 10]區(qū)間的隨機(jī)整數(shù):a = [random.randint(1,10) for i in range(10)]

        可是,這樣的一個(gè)隨機(jī)數(shù)列表中的元素值常常會(huì)出現(xiàn)重復(fù)。現(xiàn)在我們需要提高難度,要求生成一個(gè)長(zhǎng)度為n的列表,其元素值為[a, b]區(qū)間的不重復(fù)的隨機(jī)整數(shù)。

        請(qǐng)根據(jù)以下對(duì)自定義函數(shù)特征的描述,寫(xiě)出完整代碼,實(shí)現(xiàn)函數(shù)功能。

        提示:可充分使用random模塊中各種生成隨機(jī)數(shù)的方法,爭(zhēng)取寫(xiě)出3-4種不同的算法。

        '''
        函數(shù)功能:生成n個(gè)[a, b]區(qū)間的的隨機(jī)整數(shù),并存儲(chǔ)到列表中
        函數(shù)名:rand_int_1(n, a, b)
        參數(shù)表:n--不重復(fù)隨機(jī)整數(shù)的數(shù)量,即列表長(zhǎng)度
             a, b--不重復(fù)的隨機(jī)整數(shù)分布區(qū)間的左右邊界值
        返回值:返回存儲(chǔ)了n個(gè)不重復(fù)隨機(jī)整數(shù)的列表
        '''


        需要本文word版和拓展思考答案的,可以加入“Python算法之旅”知識(shí)星球參與討論和下載文件,Python算法之旅”知識(shí)星球匯集了數(shù)量眾多的同好,更多有趣的話題在這里討論,更多有用的資料在這里分享。

        我們專注Python算法,感興趣就一起來(lái)!

        相關(guān)優(yōu)秀文章:

        閱讀代碼和寫(xiě)更好的代碼

        最有效的學(xué)習(xí)方式

        函數(shù)與模塊典型例題

        字符串專題之中文大寫(xiě)金額數(shù)字轉(zhuǎn)換工具

        新教材習(xí)題解析之python循環(huán)結(jié)構(gòu)

        新教材習(xí)題解析之python循環(huán)結(jié)構(gòu)(2)

        新教材習(xí)題解析之python自定義函數(shù)

        瀏覽 66
        點(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>
            69AV在线视频 | 久久性生活视频 | 91快射| 国产黄色片在线看 | 精品无码国产污污污在线观看 | 亚洲欧洲日韩综合 | 亚洲AV导航 | freehdxxxxmoviejapan | 中文字幕第32页 | 午夜精品一区二区三区在线播放 |