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

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

          共 3256字,需瀏覽 7分鐘

           ·

          2021-08-18 12:45

          說在前面

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

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

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



          8.(開放題)小美參加環(huán)保知識競答比賽,回答結(jié)果存儲在字符串中,其中回答正確用'T'表示,回答錯誤用'F'表示。回答錯誤不得分,連續(xù)答對k題,則第k題加k分。
          下面的自定義函數(shù)能根據(jù)答案字符串計算小美的總分?jǐn)?shù)。它的形式參數(shù)ans是一個只包含'F''T'兩種字符的字符串,函數(shù)根據(jù)得分規(guī)則和答案字符串計算出的總分?jǐn)?shù)。
          例如,當(dāng)ans='FTTTFTTFFT'時,函數(shù)返回10;當(dāng)ans='TTTTFFTFTF'時,函數(shù)返回12
          請認(rèn)真閱讀代碼,回答如下問題:
          1)將缺失的代碼補充完整;
          2)當(dāng)ans='FFFTTTTTFF'時,函數(shù)返回值是多少?
          (3)除了題目給出的代碼,你能用其他方式實現(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ù)、字符串處理和計數(shù)方法。
          1)根據(jù)題意可知變量ks分別用來存儲當(dāng)前答題得分和總分?jǐn)?shù),它們的初始值均為0。因為連續(xù)答對k題,第k題加k分,最終返回總分,故第①空答案為s + k,第②空答案為0。
                   調(diào)用函數(shù)時,我們只需在函數(shù)名后面的圓括號里填寫實參ans即可。
          2)當(dāng)ans='FFFTTTTTFF'時,s = 1+2+3+4+5 = 15,即函數(shù)返回值為15。
          答案:(1)① s + k   ans
          215
          3)根據(jù)連續(xù)連續(xù)答對k題,則第k題加k分的算法,我們可以使用公式s = k * (k +1) / 2來計算連續(xù)答對k題的總分。我們可以存儲字符串的總長度,設(shè)置外層while循環(huán)條件為i < n,然后在內(nèi)層循環(huán)中跳過字符'F',然后使用while循環(huán)記錄連續(xù)出現(xiàn)子串'T'的數(shù)量,并根據(jù)公式計算得分,參考代碼如下:
          算法1:存儲字符串的總長度,設(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)一步提高程序效率,我們可以為字符串增加一個結(jié)束符'.'(或除'FT'以外的其他字符)作為“哨兵”,這樣在遍歷字符串時,就可以將外層while循環(huán)條件寫成ans[i] !='.'。有了“哨兵”以后,在內(nèi)層循環(huán)中就無需判斷下標(biāo)是否越界,提高了程序效率。

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

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


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

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

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

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

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

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


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

          我們專注Python算法,感興趣就一起來!

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

          閱讀代碼和寫更好的代碼

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

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

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

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

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

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

          瀏覽 66
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产做爰XXXⅩ久久久精华液 | 嗯~啊~乖~进去了~h~乖视频网站免费 | 91成人免费无码视频 | 天天干天天日一本着 | 丁香人人六月综合查询 |