中国電子協会 2023 年 5 月青少年ソフトウェア プログラミング Python レベル試験用紙レベル 4 の実際の質問 (解答を含む)

2023-05 Python レベル 4 の実際の試験問題

スコア: 100

题数:38

テスト時間: 60分

1. 選択問題(全25問、合計50点)

1. 次のプログラム セグメントの結果は何ですか? (A) (2点)

def s(n):
    if n==0:
        return 1
    else:
        return n +s(n-1)
print(s(7))

A.29

B.27

C.1

D.0

2. n が 6 の場合、次の Python プログラムを実行すると結果はどうなりますか? (B) (2点)

def f(n):
    if n<=2:
        return 1
    else:
        return f(n-1)+f(n-2)
n=int(input("请输入一个正整数:"))
print(f(n))

A.5

B.8

C.11

D.13

3. 毎年初めに未経産牛を出産する牛がいます。各未経産牛は、4 年目から毎年初めに 1 頭の未経産牛を出産します。n年目に牛は何頭いますか? 再帰法から、年数が 4 以下の場合、その年には数頭の牛が存在する、つまり、a[1]=1; a[2]=2; a[3] と推測できます。 ]=3、a[4]=4。nが4より大きい場合、1年目に生まれた未経産牛も未経産牛を産むことができる、つまり未経産牛が産めるかどうかを検討する時期になるので、n>4の場合、a[n] =? (A) (2点)

A. a[n-1]+a[n-3]

B. a[n-1]+a[n-4]

C. a[1]+a[3]

D. a[-1]+a[-3]

回答分析: 最初の 4 年間は 4 頭でしたが、5 年目からは 2 年目に生まれた未経産牛も牛を産みます (今後は毎年初めに牛が生まれます)。 1 頭の牛から生まれた未経産牛を加えて 6 頭とし、6 年目には 3 年目に同じ牛から生まれた未経産牛を加えて合計 9 頭とします。すぐ。

4. 二分探索は半探索とも呼ばれますが、二分探索アルゴリズムに適した順序は次のうちどれですか? (D) (2点)

A. 11 99 4 25 3 39

B. 43 71 78 81 6 55

C. 67 62 68 4 1 17

D. 85 78 59 53 19 18

回答分析: 二分探索の実装原則によれば、まずシーケンス要素が順序どおりである必要があります。

5. 32 枚の新品金貨の中に、本物の金貨にそっくり(質量が小さい)の偽金貨があり、残高は 1 枚だけです。二分法?(B) (2点)

A.4

B.5

C.6

D.7

解答分析: 二分探索法。区間の中央の要素と比較するたびに、検索対象の要素が見つかるまで、または区間が 0 になるまで、検索対象の区間を前の半分に減らします。 。

6. あるプログラムに a という名前のグローバル変数があることがわかります。プログラム中の関数内で変数aが再定義されていますが、その変数は結合型変数ではありません。

次の記述のうち正しいものはどれですか? (B) (2点)

A. この関数で a がグローバルとして宣言されている場合、a に対する操作はグローバル変数 a とは何の関係もありません。

B. この関数で a がグローバルとして宣言されていない場合、a に対する操作はグローバル変数 a とは何の関係もありません。

C. この関数で a がグローバルとして宣言されていない場合、a に対する操作はグローバル変数 a に対する操作になります。

D. この関数内で a がグローバルとして宣言されているかどうかに関係なく、 a に対する操作はグローバル変数 a に対する操作になります。

回答分析: グローバルとして宣言されていない場合、それはローカル変数であるため、グローバル変数 a とは何の関係もありません。

7. プログラム内のリストについて、range()の横線にパラメータが埋められており、最もアルゴリズムの実行効率が高いオプションはどれですか? (C) (2点)

a=[1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1]
for i in range _____:
    if a[i]==1:
        print(i)

A. (0,16,1)

B. (0,16,2)

C. (0,16,3)

D. (0,16,4)

8. 次の関数のうち、直接呼び出すことができない関数はどれですか? (B) (2点)

A. print()

B.sqrt( )

C.str()

D.dict( )

回答分析: sqrt() 関数は数学モジュール内の関数であり、直接呼び出すことはできません。最初に数学モジュールをインポートする必要があります。

9. return ステートメントに関して、次のステートメントのうち正しいものはどれですか? (A) (2点)

A. return ステートメントの戻り値のデータ型はリストにすることができます。

B. return ステートメントに式を含めることはできません

C. 関数には少なくとも 1 つの return ステートメントがある

D. return は 1 つの値のみを返すことができます

回答分析: return ステートメントには式を含めることができ、複数の値を返すこともできます。関数には戻り値がある場合もあれば、戻り値がない場合もあります。

10. 機能の説明で間違っているものはどれですか? (C) (2点)

A. 関数内の return ステートメントを通じて結果を返します。

B. 関数によりコードの再利用を改善できる

C. グローバル変数は関数内で使用できません

D. 関数の定義は、メインプログラムの関数呼び出しステートメントの前にある必要があります。

11. Xiaofang は、長方形の面積を計算する無名関数を作成しています。次の記述のうち正しいものはどれですか? (A) (2点)

A. rst = ラムダ a,b : a * b

B. ラムダ a,b:a*b

C. ラムダ a,b,a*b

D. rst = ラムダ a,b,a*b

回答分析: キーワード lambda は匿名関数を表します。コロンの前のパラメータは関数のパラメータを表し、コロンの後の戻り値は戻り値を表します。匿名関数を定義するときは、それを変数に割り当てる必要があります。

12. 次のプログラムを実行します。出力結果は何ですか? (A) (2点)

s = 1
def sums(n):
    global s
    s = 0
    s = s + n
    print(s)
sums(5)
print(s)

A. 5 5

B. 5 1

C. 1 1

D.1 5

回答分析: 関数内で関数外の変数を操作したい場合は、関数内でグローバルとして宣言する必要があります この質問では、 s は関数内でグローバルとして宣言されているため、関数内での変更は関数外に影響します, したがって、出力結果は 5 になります。

13. シャオ ミンは、教師が 10 歳の生徒の数を数えるのを手伝います。教師は学年のすべての生徒の ID 番号とその他の情報を持っています。彼は次のようにプログラムを書きました。

#列表stud存储每位学生的身份证号码,如
stud = ['110726201205261117','120718201209011101']
def cj(xs):
    c = 0
    for s in xs:
        age = int(   ①   )
        if 2023 - age == 10:
            c += 1
    return c
print(cj(stud) )

次のコードのうち、統計機能を実装するために選択できない下線部①はどれですか? (D) (2点)

A.s[6:10]

B.s[6:-8]

C.s[-12:-8]

D.s[-12:11]

解答分析:ID番号から生まれ年のコードを切り出し、A、B、Cの3つの選択肢のコードはすべて正解です。

14. 再帰に関する次の説明のうち、正しいものはどれですか? (C) (2点)

A. 再帰関数にはループ構造が必要です。

B. 再帰は「大きなものを小さなものに還元する」という考えを反映していません。

C. 再帰には再帰を終了するための明確な境界条件がある

D. 再帰的な実行がより効率的になる

解答分析: 再帰には、再帰を終了するための明確な境界条件と、最後の境界値があり、「大きなものを小さなものに還元する」という考えを体現しています。

15. シャオファンの母親は次のようにリンゴを分けます。最初の日に半分を分けてリンゴを加え、2日目に残りの半分を分けてリンゴを加え、残りの半分を分けてそれ以降毎日リンゴを加えます。8日目、母はリンゴが1個だけ残っていることに気づきました。シャオファンのお母さんは最初にリンゴを何個持っていましたか? この問題を解決するには、次のアルゴリズムのうちどれを使用できますか? (B) (2点)

A. 探す

B. 再帰

C. 列挙

D. 並べ替え

解答分析:8日目以降7日目の残りのリンゴの数を計算し、6日目のリンゴの数を計算して順番に問題を解きます。これは再帰問題です

16. 自然の法則: 花びらの数

ほとんどの花びらの花びらの数は、1、1、2、3、5、8、13、21、...です。これらの数字の順序を注意深く観察すると、これらの数字の配置が規則的であることがわかります。それは、ボナッチ数列です。学生のシャオ・リーは、シーケンスの n 番目の項目の値を見つけるプログラムを作成します。

 

ボックス内のコードは次の 3 つの部分で構成されています: ① a=b ② b=c ③ c=a+b コードの順序が正しいのは次のうちどれですか? (D) (2点)

A.①②③

B. ①③②

C. ③②①

D. ③①②

17. 生徒は二等分検索と逐次検索を使用して、「1、3、5、8、15、21、35、65」という数列の中から 15 という数字を見つけます。両方の方法でアクセスできる数字は次のどれですか? (C) (2点)

A.3

B.5

C.8

D.34

解答分析: 数字 15 を順番に検索する場合、アクセスされる数字は 1、3、5、8、および 15 です。数字 15 の二分検索を使用する場合、アクセスされる数字は順番に 8、21、および 15 です。 8 には両方の方法でアクセスできます。したがってCを選択します。

18. Xiao Li は、コンピュータにインストールされている Python ライブラリを確認します。次のコマンドのうち、実行可能なものはどれですか? (B) (2点)

A. pip インストール

B. ピップリスト

C.ピップショー

D.ピップヘルプ

19. 次のプログラムを実行します。出力結果は何ですか? (A) (2点)

a = [0] * 10
def tj(n):
    while n>0:
        a[n%10] += 1
        n //= 10        
    return sum(a)
print(tj(20230113))

A.8

B.12

C.4

D.6

解答分析:関数 tj は、整数 n に各桁が出現する回数を数えます。n=20230113 のとき、0 が 2 回、1 が 2 回、2 が 2 回、3 が 2 回出現するので、答えは A です。

20. 通常、関数を定義するとき、関数には最大でいくつのパラメータが含まれますか? (D) (2点)

A.3

B.4

C.5

D. 好きなだけ

21. ドキュメントを表示するために呼び出すことができる関数は次のうちどれですか? (A) (2点)

A. help()

B. range()

C.のみ()

D.print()

回答分析: help() 関数でドキュメントを表示できます。

22. 次のコードの出力結果は何ですか? (C) (2点)

def sum(a):
    a+=1
a=6
sum(a)
print(a)

A.8

B.7

C.6

D.2

23. 次のコードの出力は何ですか? (B) (2点)

def py(a,b=2):
  a=a%b
  return(a)
print(py(7))

A.1、2

B.1

C.3,2

D.3

24. 次のコードの出力は何ですか? (B) (2点)

def py(b):
    b+=3
    return(b)
print(py(3))

A.3

B.6

C.0

D.9

25. Python で中国語の単語を分割するためのサードパーティ ライブラリは次のうちどれですか? (D) (2点)

A.パンダ

B. 美しいスープ4

C.python-docx

D.ジェバ

回答分析: jieba は Python 中国語単語分割方向のサードパーティ ライブラリに属します

2. 正誤問題(全10問、合計20点)

26. 再帰のより深いレベルに入るたびに、問題のサイズは前の再帰と比較して増加するはずです。( 間違っている)

回答分析: 再帰のより深いレベルに入るたびに、問題のサイズは最後の再帰と比較して小さくなるはずです。

27. 位置パラメータとキーワードパラメータは関数を呼び出す際の概念であり、これらが混在する場合はキーワードパラメータを不明なパラメータより前に書かないと構文エラーが発生します。(間違っている)

正しい、間違っている

回答分析: 2 つが共存する場合、キーワード パラメーターは位置パラメーターの後に記述する必要があります。そうしないと、構文エラーが発生します。

28. 関数にはパラメーターを含めないか、複数のパラメーターを含めることができますが、パラメーターの数を決定する必要があります。(間違っている)

回答分析: 関数のパラメーターの数は不確実な場合があります。

29. 内部実装の詳細を理解せずにこの関数を使用する方法はありません。( 間違っている)

回答分析: 関数を呼び出すときに必要なのは、関数名とその入出力だけであり、関数の実装の詳細を知る必要はありません。

30. Xiao Ming は次の関数を作成します。

def jiafa(x,y=0): 
    return x+y 

jiafa(10) ステートメントを使用して関数を呼び出すと、プログラムは実行エラーを表示します。(間違っている)

回答分析: 関数が呼び出されるとき、関数パラメータのデフォルト パラメータに値を渡す必要はありません。したがって、関数が呼び出されるとき、結果 10 が返され、実行エラーは表示されません。

31. 次のプログラムを実行すると、出力結果は 4 になります。(間違っている)

def fun(n):
    if n == 1:
        return 1
    else:
        fun(n-1) * 2
print(fun(3))

回答分析: 再帰関数には、返す return ステートメント、つまり return fun(n-1)*2 が必要です。

32. スペース複雑度とは、アルゴリズムがプログラムに書き込まれ、コンピューター上で実行されるときに必要な記憶スペースの測定値を指し、S(n) として記録されます (n は問題の規模またはサイズ)。( 右)

回答分析: スペースの複雑さは、アルゴリズムがプログラムに書き込まれてコンピューター上で実行されるときに必要なストレージ スペースの測定値を指し、S(n) として記録されます。ここで、n は問題の規模またはサイズです。

33. カスタム関数にはパラメータを含めることはできません。( 右)

34. 分割統治アルゴリズムでは間違いなく再帰が使用されます。( 間違っている)

回答分析: 分割統治アルゴリズムは必ずしも再帰を使用するわけではありません。たとえば、分岐検索も分割統治に属しますが、再帰は使用しません。

35. ライブラリを呼び出すときにその後のコード記述を容易にするために、matplotlib plt という名前を付けるなど、ライブラリに別名を付けることができます。( 右)

3. プログラミング問題(全3問、合計30点)

36. ある c の n 項の計算手順は次のとおりであることが知られています。

 

Xiao Ming は、n 番目の項目の結果を計算するプログラムを作成します。まずキーボードから n を入力し、上記の再帰関係を使用して結果を計算します。下線部分のコードを改善してください。

def fc(n):
    if n ==1:
                 ①        
    else:
        a=6*n-1
        b=8*n+3
        return          ②        
m=int(input("请输入一个整数:"))
if not isinstance(m,int):     #判断输入的m是否为整数
    print('请输入一个整数')
else:
    print(        ③        )

参考手順:

def fc(n):
    if n ==1:
        return 1 
    else:
        a=6*n-1
        b=8*n+3
        return  a*fc(n-1)/b
m=int(input("请输入一个整数:"))
if not isinstance(m,int):     #判断输入的m是否为整数
    print('请输入一个整数')
else:
    print(fc(m))

注: この問題では、c の n 番目の項目の計算式がわかっています。1 番目の項目の c の値は 1 です。1 番目の項目の計算式に基づいて 2 番目の項目を計算できます。関数 fc は次のように記述されます。 c の計算結果を実現するプログラム 関数 fc では、1 番目の項目が 1 を返すので、①のコードは return 1、関数 fc の②のコードは、n 番目のデータを計算することになります。コードが a*fc(n-1 )/b であることがわかります。③のコードは関数 fc を呼び出して m 番目の入力項目を計算するものであるため、そこにあるコードは fc(m) です。

グレーディング:

(1) 1 を返す; (3 ポイント)

(2)a*fc(n-1)/b;(3分)

(3)fc(m)。(2分)

37. 九九を再帰的に出力するには、次のコードとプログラムを完成させてください。

  

 

def get_result(num):
    if num == 1: 
        print("        ①        ") 
     else: 
        get_result(        ②        ) 
        for i in range(1,        ③        ): 
            print("%d * %d = %d" % (i, num, i * num), end="  ") 
        print()
get_result(        ④        )

参考手順:

def get_result(num): 
    if num == 1:
        print("1 * 1 = 1") 
    else:
        get_result(num - 1)
        for i in range(1,num + 1): 
            print("%d * %d = %d" % (i, num, i * num), end="  ")
        print()
get_result(9)

グレーディング:

(1)1*1=1; (3 点)

(2)num-1; (3 点)

(3) num+1; (2 点)

(4)9.(2分)

   

38. 深さ n メートルの井戸の底にカタツムリがいます。カタツムリは毎日 1 メートル上昇し、b メートル下降します。

キーボードから整数 n、a、b をスペースで区切って入力してください。

そして、次の手順を実行して、カタツムリが井戸から這い上がるまでにかかる日数を計算します。

n,a,b=input("请输入井深,蜗牛每天往上爬几米,蜗牛滑下几米:").        ①        
n,a,b=        ②        
pos=0
i=0
while        ③        :
             ④        
             ⑤        
print("第%d天,蜗牛距离井口%d米;"%(i,n-pos))
print("第%d天,蜗牛成功离开了深井!!"%(        ⑥        ))

参考手順:

n,a,b=input("请输入井深,蜗牛每天往上爬几米,蜗牛滑下几米:").split()
n,a,b=int(n),int(a),int(b)
pos=0
i=0
while pos+a<n:
    i+=1
    pos+=(a-b)
print("第%d天,蜗牛距离井口%d米;"%(i,n-pos))
print("第%d天,蜗牛成功离开了深井!!"%(i+1))

グレーディング:

(1)split();(2分)

(2)int(n),int(a),int(b);(2分)

(3)pos+a<n;(2分)

(4)i+=1;(2分)

(5) pos+=(ab); (2 点)

(6)i+1。(2分)

   

おすすめ

転載: blog.csdn.net/m0_46227121/article/details/131207814