Python検定試験準備 Q21

Python検定試験と云うのがあるらしいと別項に上げましたが、学習して損することは無いので始めて見ましょう。

まず基本的な事のおさらいですね、Q & A形式で書いてみたいと思います。 自分の学習に都合の良いQ&Aにしてあります。

新しいQ&Aが上に来ます。

 

Q22:リストの要素の取り出し方を簡単に示します。
 果物 = [“リンゴ”, “ミカン”, “バナナ”, “オレンジ”, “ボンタン”, “スイカ”] –>0,1,2,3,4,5の6個が有ります。
   –>逆から指定するときのindex番号は、-6, -5, -4, -3, -2, -1となります。
 要素の取り出し方は、0番からスタートするインデック番号で指定します。
 print(果物[1]) —> ミカン
 print(果物[-3]) —> オレンジ
 print(果物[1]) #ミカン
  
 続く
 

 

———————————–

Q21:整数の入ったリストをrange()関数で作ります
 thelist1 = list(range(-5, 6)) #-5~5の入ったリスト
 print(thelist1) # [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

 thelist2 = list(range(0, 10, 2)) #偶数のリストを作ります
 print(thelist2) #[0, 2, 4, 6, 8]

 では、0~20の中から3の倍数だけ抽出しなさい。

A21:
 thelist3 = list(range(3, 20, 3))
 print(thelist3)  –> [ 0, 6, 9, 12, 15, 18]
 このやり方だと、0も3の倍数として抽出されてしまう。

 

 別のやり方

 thelist4 = [n for n in range(1, 20) if n % 3 == 0] #3で割った余りがなければ、3の倍数である
    print(thelist4)  # [3, 6, 9, 12, 15, 18]

 このやり方はスマートだね。 覚えよう!

———————————–

Q20:リストを簡潔に高速で生成する方法として内包表記があります。
 次のように書きます。
 prime = [2, 3, 5, 7, 11, 13]   # いわゆる素数のリストですね。
 prime_square = [x**2 for x in prime] #上の素数を二乗する内包表記です。
    print(prime_square)  —> [4, 9, 25, 49, 121, 169]

    では、上の例の変数を全て日本語で書け。 <—絶対に試験に出ない設問。

A20:
 素数 = [2, 3, 5, 7, 11, 13] 
 素数の二乗 = [二乗**2 for 二乗 in 素数]
 print(素数の二乗)

 こうして日本語で書かれると、意味が分かり易くないですか?
 

———————————–

Q19:continue文とbreak文

 ある条件が満たされる場合はそのまま続け(continue)、満たされないときはbreakで終わらせる。
 では、100までの数字が偶数でかつ5で割り切れる数字を列挙するプログラムを書け。
 

A19:
  for i in range(1,100):
   if i % 2 == 1:
    print(i, end= ‘ ‘)
    continue
   if i % 20 == 0:
    break

    —> 1 3 5 7 9 11 13 15 17 19  
   結果的には、単に1~19までの数字の書き出しだが、for文・continue文・break文を使った。

———————————–

Q18:Pythonでイテレータを使用する反復を記述するときには、for文を使用する。
   では、次のリストをfor文を使い順番に取り出す式を書け。
   districts = [‘北海道’, ‘東北’, ‘関東’, ‘中部’, ‘近畿’, ‘中国’, ‘四国’, ‘九州’ ]

 A18:
  for district in districts:
    print(district, end=’ ‘) —> 北海道 東北 関東 中部 近畿 中国 四国 九州

   このやり方はよく使われるので理解が必須です。

おまけ:
 ・リスト名は複数形(districtsのように)で書き、取り出される要素を入れる変数は単数形(districtのように)で書くのが分かり易いです。
 ・イテレータとは、リスト、タプルなど要素を持つデータ型のことであり、順に要素を取り出せるオブジェクトである。 なんかよく分からない説明が有りますね。 またイテレータを作る関数をジェネレータと云います。

 

———————————–

 

Q17: While文を使って1から10まで出力するプログラムを書け。

 A17:
  x=1
  while x<11:
   print(x, end=’ ‘)
   x +=1
  else:
   print(‘END’)

   x +=1までで、1 2 3 4 5 6 7 8 9 10 と出力される。
  else項があると、1 2 3 4 5 6 7 8 9 10 ENDと出力される。

———————————–

 

Q16: 反復処理用にはWhileとforがある。まずはwhile文。

  x=input(‘Enter between 1 to 9’ )
  x=int(x)

  while x<10:
   print(x, end=’ ‘)


  このプラグラムは、次の場合それぞれどのような出力をするか?
  1.5を入力したとき
  2.19を入力したとき
  3.x=int(x)は何のためあるか


    A16:
  1.5555555555・・・と出力し、^cが入力されると終了する。
  2.範囲外の入力に値する処理がなので、何も出力されない。
  3.input(x)は文字列なので、printの場合はintで整数化する必要がある。 

 こんな簡単な問題は出ないが、段々難しくなります。 
  

———————————–

 

Q15: 前問題では辞書の最初から読みだしたが、今度は乱数で取り出すプログラムを作れ。
  import random
  words = {
   ’cant ‘: ‘御託、専門語、傾ける、角、堤防、傾斜 ‘,
   ’gaunt ‘: ‘やせた ‘,
   ’ransack ‘: ‘くまなく捜す ‘,
   ’clarion ‘: ‘明るく響き渡る ‘,
   ’chasm ‘: ‘深い割目 ‘,
   }

    A15:
  print(‘ Enter to start, or CTRL+c to finish.’) #ユーザーの入力待ち
  input() # 見かけよくするための改行

  while True:
   word = random.choice(list(words.keys()))
   print(word, end = ”)

  try: # 例外が発生するかもしれないが、実行したい処理。
   input() #enterでstart 
  except KeyboardInterrupt: #KeyboardInterruptはエラー名で、例外発生時に行う処理
  # CTRL+cが押されたらループ終了
   break
  else: # CTRL+Cが押されなかったら答えを表示
   print(‘ : ‘ + words[word] + ‘\n’)

 

  runすると、
  ransack
   : くまなく捜す
  cant
   : 御託、専門語、傾ける、角、堤防、傾斜
  clarion
   : 明るく響き渡る
  chasm
   : 深い割目
        と、^c入力するまで延々と続く。

  これで簡単なQ&Aプログラムが作れる。一度codeの意味を理解したら、この構図を必要に応じてコピペして使用するのが効率的!

———————————–

Q14:リストからfor~inで要素を取り出すには次のようにする
  locations =[‘Tokyo’,’Sendai’,’Osaka’,’kochi’,’kumamoto’]
  for location in locations:
   print(location) —>
    Tokyo
    Sendai
    Osaka
    kochi
    kumamoto

  では次のような辞書がある。順番に出力するcodeを書け(ヒント: for~inを使う)
  words = {
   ’cant ‘: u’御託、専門語、傾ける、角、堤防、傾斜 ‘,
   ’gaunt ‘: u’やせた ‘,
   ’ransack ‘: u’くまなく捜す ‘,
   ’clarion ‘: u’明るく響き渡る ‘,
   ’chasm ‘: u’深い割目 ‘,
   }

    A14:  
  for 英単語, 意味 in words.items():
   print(英単語, 意味)   

 —>cant 御託、専門語、傾ける、角、堤防、傾斜
gaunt やせた
ransack くまなく捜す
clarion 明るく響き渡る
chasm 深い割目

   list.items()関数を使うのがミソ! 非常に有益な関数です。 俳句、百人一首、単語集などすべてこの関数を使ってます。

 

———————————–

Q13:辞書とは、キーと値をペアとして格納できるデータ型です。ただし、順番を持たないのでキーの重複は認められない。
  locations = {‘Tokyo’,’Sendai’,’Osaka’,’kochi’,’kumamoto’}
  print(locations)   –> {‘Tokyo’, ‘Sendai’, ‘Osaka’, ‘kochi’, ‘kumamoto’}
  
  では、次の場合はどのように同表示されるか?
  print(locations[3])   –> ?
  print(locations(3))   –> ?

    A13: 
  print(locations[3])   –> Osaka
  print(locations(3))   –> ’dict’ object is not callable

  要素の取り出しは、リストのように[ ]を使用するのでしたね。 いつもerrorで気が付きます。

 

———————————–

Q12:タプルの結合
  numbers = (1,2,3,4,5)*2
  print(numbers) –> (1, 2, 3, 4, 5, 1, 2, 3, 4, 5) 

  では、次の場合はどうか?
  locations = (‘Tokyo’,’Sendai’,’Osaka’,’kochi’,’kumamoto’)*2
  print(locations)

    A12     
  print(locations) –> (‘Tokyo’, ‘Sendai’, ‘Osaka’, ‘kochi’, ‘kumamoto’, ‘Tokyo’, ‘Sendai’, ‘Osaka’, ‘kochi’, ‘kumamoto’)

  いずれもタプルを2回結合したものとなる。

———————————–

Q11:タプルのアンパック。
  ・タプルやリストの要素を展開して複数の変数に代入することができる。
  ・シーケンスのアンパック (sequence unpacking) やアンパック代入などと呼ばれる。  

  次の場合はどのような出力となるか?    
  a, b, c, d, e = (‘Tokyo’, ‘Sendai’, ‘Osaka’, ‘kochi’, ‘kumamoto’)
  print(c+d) ???

    A11     
  print(c+d) –> Osakakochi

———————————–

Q10:タプルの要素は変更不可(イミュータブル)なので、生成後に要素の追加や削除は出来ない。
  numbers = (1, 4, 9, 16, 25)
  では print(numbers(3)) の結果は? 

    A10     
  print(numbers(3)) –> TypeError: ‘tuple’ object is not callable
  要素を取り出す時はリストのように[ ]を使用する
   print(numbers[3]) –> 16 

 

  タプルはリストと同じように、複数の値を一つにまとめて扱いたい場合に手軽に使えるオブジェクトです。
  タプルは、辞書などのキーとして使用するのに適している。

———————————–

 

Q9:リストのメソッド
  主なものには下記があるが、必要な時の覚書として載せておきます。

  list.append(x)リストの末尾に要素を追加する
 list.extend(x)xのすべての要素をリストに追加し、リストを拡張する
 list.insert(i, x)iの位置にxを挿入する
 list.remove(x)xと等しい値の最初の要素を削除する
 list.del(i)iの位置の要素を削除する
 list.pop([i])iの位置にある要素を削除し、その要素を返す、iがない時は末尾要素削除
 list.clear()全ての要素の削除
 list.index(x)xと等しい値もつ最初の要素の位置を添字で返す
 list.count(x)xの出現回数を返す
 list.sort(key, reverse)インプレース演算でソートする
 list.reverse()インプレース演算で逆算する


   list = [1, 2, 3, 4, 5]
   del lsit[2]の出力は?


    A9 :
  del lsit[2] –> [1, 2, 4, 5]  3番目の要素が先所される

 

———————————–

Q8:リスト要素の変更は、要素の位置を指定して行う。 

  リストは、他の言語では配列に相当する機能です。
  languages = [‘Python’ , ‘Jave’ , ‘VBA’ , ‘PHP’ ,’C++’]
  languages[1:4] = [‘HTML’,’C’,’VB’]  <–これで2~4番目の値が’HTML’,’C’,’VB’に変更される。
  print(languages) = [‘Python’, ‘HTML’, ‘C’, ‘VB’, ‘C++’]

  ではprint(languages = [] )はどう出力されるか?
 

    A8:     
  languages = [‘Python’, ‘HTML’, ‘C’, ‘VB’, ‘C++’]
  languages = []
  print(launguages) –> [ ] 全要素を削除、初期化と同じになります。
       

  一寸引っ掛け問題みたいだね。

———————————–

Q7:要素を持つデータ型の代表的なものに、リスト・タプル・辞書・集合がある。
  最も汎用性が高く、よく使われる型がリストである。

  まずリストの問題。
 
  要素の取り出しからは次のように行う。
  添字は前部から 0, 1, 2, 3, 4となり、後ろから数えるときは-5, -4, -3, -2, -1となる。
  前から数えるときは添字は0から始まるが、後ろからは-1で始まる。 <– 重要

 

    A7: では次の呼び出し方で要素はどのように表示されるか?    
        languages = [‘Python’ , ‘Jave’ , ‘VBA’ , ‘PHP’ ,’C++’]
        print(languages) –> [‘Python’, ‘Jave’, ‘VBA’, ‘PHP’, ‘C++’]
        print( languages[3])     –> PHP 文字列として取り出される
        print(languages[2:4])  –> [‘VBA’, ‘PHP’] リストとして取り出される
        print(languages[-3])   –>  VBA

        リストを使うと間違いなくエラーを連発します。 簡単な例で練習が必要です。

———————————–

Q6:次は数値演算子と呼ばれるものである。 +、-、/、*は周知なので説明商省略。
  a//b a/bの商の整数値(小数点以下切捨て)
  a%b a/bの割り切れれなかった余り(剰余)
  a**n aのn乗, pow(a,n)とも書ける

   では箱にボ-ルが350個入っている箱が有り、12個づつに分けると何個の箱と端数が出きるか?

 A5:・balls=350, per=12の変数を作る
    ・出来る箱数は balls//per=29で29箱 表示はprint(balls//per)と書く
    ・剰余はballs%per=2で2個の端数が出来る 表示はprint(balls%per)と書く

———————————–

Q5:文字列メソッドの主なものに、次のようなものがある。
 ・str.lstrip() 文字列の先頭の空白を除去する
 ・str.rstrip() 文字列の末尾の空白を除去する
 ・str.strip()  文字列の先頭及び末尾の空白を除去する
 ・str.lower() 文字列の大文字を全て小文字にする
 ・str.upper() 文字列の小文字を全て大文字にする
 ・str.split(sep) 文字列をsepを区切りに分離してリストにする
 では、次の文字列をこれらのメソッド(上の関数)で実行したときの結果をどうなるか?
  str=’_ aBc_ ,_deF_’   _は半角空白を意味している

  A5:
  print(str.lstrip()) –> aBc_ , _deF_ 
  print(str.rstrip())    –> _aBc_ , _deF
  print(str.strip())      –> aBc_ , _deF
  print(str.lower())    –> _ abc_ , _def_
  print(str.upper())    –> _ ABC_ , _DEF_
  print(str.split(‘,’))    –> [‘ aBc ‘, ‘ deF ‘]

  文字列メソッドの英文スペルを見れば、関数の意味が理解できるでしょう。
  ・str.strip()  — strはstringで文字列ですね。 strip()は削除ですね。
  ・lstrip() — 先頭のlはleftのlなので、一番左即ち先頭を意味します。
  ・rstrip() — 先頭のrはrightのrなので、一番右即ち最後を意味します。
  ・lower() — lowerは小文字を意味します。
  ・upper() — upperrは大文字を意味します。
  ・sprit(sep) — sep=separation(区切り文字)を使って分離してリストにするという意味です。

  これが分かれば、Q5の答えも納得ですね。

———————————–

Q4:ビット演算の基本は次のようになっている。
   bit単位の論理和 = x | y <– ANDと同じ
   bit単位の論理積 = x & y <– ORと同じ
   bit単位の排他的論理和 = x ^ y  <– XORと同じ
   xのビット反転 = ~x <– NOTと同じ   
   xのnビット左シフト = x << n  <– 桁上げ
   xのnビット右シフト = x >> n <– 桁下げ

  x=0b10101000, y=0b1111000の論理積は幾らか?

 

 A4:論理積はANDだから、両ビットが共に1の場合に1となる(それぞれのビットの掛け算 x|y)ので、答えは、0b10100000 となる。

ビット演算は画像の合成などに使われているらしい。

———————————–

Q3:10進数の19を2進数、8進数、16進数で表すとどうなるか?

 A3:bin(19)–> 0b10011 
    oct(19)–> 0o23 
    hex(19)–> 0x23
 いつどう使うのかまだ不明。

———————————–

Q2:2進数、8進数、16進数の11を10進数で表せ

 A2:2進数では、0b11と書き10進数では3となる
   8進数では、0o11と書き10進数では9となる
   16進数では、0x11と書き10進数では17となる
 使ったことない。

———————————–

Q1:Pythonの主なデータ型は何か? 

 A1: 1.数値型(number) – 整数リテラル(int) 及び 浮動小数点型(float)がある
    2.文字列型(string)
    3.論理型(boolean)
    4.リスト型(list)
    5.タプル型(tuple)
    6.辞書型(dict)
    7.集合型(set)
    8.バイナリー(byte)
    9.数値シーケンス(range)
 今まで出てきたのは1-6までだったので、他も学習必要らしい。

 

 

 

 

 

Python別館
AI言語用参考書(Python)の図書館開設!

— 4/26/2019 —-孫が大学でコンピュータ言語のPythonを習い始 …

Python別館
Python別館 目次

2020年・Python検定試験準備・ラムダ(λ)式とは・Pythonプログラムを配布用ファイル(e …

Python別館
ラムダ(λ)式と云う不思議な関数

そもそもlambda(ラムダ)という用語について、ビギナーの私には名前しか知りませんでしたが、どうも …