2桁の正の整数をランダムに20個ずつ2回発生させ,両者に共通する数値を表示するプログラムを作成しましょう.
[21, 24, 84, 67, 67, 50, 62, 32, 33, 96, 76, 25, 19, 71, 25, 82, 28, 49, 47, 33]
[51, 69, 52, 39, 85, 79, 30, 34, 71, 98, 43, 66, 49, 34, 91, 27, 94, 32, 82, 88]
{32, 49, 82, 71}
|
見たらわかるように,上の出力は普通にリストや集合をそのまま出しているだけです.解答例
10, 100, 1000, 10000, 100000, 1000000のどれかの整数を乱数を用いて発生させ,1 からその数までの整数を乱数によりその数分発生させることを考えます.どのくらいの頻度で乱数の重複が起こるのかを調べるプログラムを作成しましょう.
Total numbers: 1000000 Elements of set: 632093 Overlapped frequency: 36.8 % |
リストを集合にすると,要素が何個重複していたかがわかります.解答例
日本政府の統計などで国内の都道府県別の情報を扱うときには1番を北海道として,北から順に番号を振っていって最後47番が沖縄県となる表が使用されます.以下の都道府県名のリストをもとに番号と都道府県名を対応させた辞書を作成して表示させましょう.最後に 1 から 47 の整数のどれか一つを発生させ,その都道府県名を答えるようにしましょう.
pref = ['Hokkaido', 'Aomori', 'Iwate', 'Miyagi',
'Akita', 'Yamagata', 'Fukushima', 'Ibaraki',
'Tochigi', 'Gumma', 'Saitama', 'Chiba',
'Tokyo', 'Kanagawa', 'Niigata', 'Toyama',
'Ishikawa', 'Fukui', 'Yamanashi', 'Nagano',
'Gifu', 'Shizuoka', 'Aichi', 'Mie', 'Shiga',
'Kyoto', 'Osaka', 'Hyogo', 'Nara', 'Wakayama',
'Tottori', 'Shimane', 'Okayama', 'Hiroshima',
'Yamaguchi', 'Tokushima', 'Kagawa', 'Ehime',
'Kochi', 'Fukuoka', 'Saga', 'Nagasaki',
'Kumamoto', 'Oita', 'Miyazaki', 'Kagoshima',
'Okinawa']
|
{1: 'Hokkaido', 2: 'Aomori', 3: 'Iwate', 4: 'Miyagi', 5: 'Akita', 6: 'Yamagata', 7: 'Fukushima', 8: 'Ibaraki', 9: 'Tochigi', 10: 'Gumma', 11: 'Saitama', 12: 'Chiba', 13: 'Tokyo', 14: 'Kanagawa', 15: 'Niigata', 16: 'Toyama', 17: 'Ishikawa', 18: 'Fukui', 19: 'Yamanashi', 20: 'Nagano', 21: 'Gifu', 22: 'Shizuoka', 23: 'Aichi', 24: 'Mie', 25: 'Shiga', 26: 'Kyoto', 27: 'Osaka', 28: 'Hyogo', 29: 'Nara', 30: 'Wakayama', 31: 'Tottori', 32: 'Shimane', 33: 'Okayama', 34: 'Hiroshima', 35: 'Yamaguchi', 36: 'Tokushima', 37: 'Kagawa', 38: 'Ehime', 39: 'Kochi', 40: 'Fukuoka', 41: 'Saga', 42: 'Nagasaki', 43: 'Kumamoto', 44: 'Oita', 45: 'Miyazaki', 46: 'Kagoshima', 47: 'Okinawa'}
Number of prefecture: 26 Name of prefecture: Kyoto |
教科書 p.229 にあるように辞書も内包表記で作成できます.都道府県名の取り出しは教科書 p.220 の get でできます.解答例1 zip 使用
1月5日の演習 iv. でリストを使用してサイコロのそれぞれの目の頻度を調べるプログラムを作成しましたが,今回は辞書を使用して行ってみましょう.リストでは先頭のインデックスが 0 となってしまいますが,辞書ではサイコロの目の通りに 1 から 6 までのキーでできます.
5 4 3 2 1 3 3 5 3 1 2 5 6 1 4 6 2 4 4 1 1 2 6 5 1 2 2 3 3 6 1 6 6 4 1 2 1 6 3 1 5 5 6 1 5 1 4 5 1 4 5 3 5 2 1 6 3 3 6 4 4 3 5 3 2 5 4 4 2 6 3 1 2 1 4 2 2 5 3 6 3 6 3 4 2 1 3 6 6 2 5 4 3 3 5 2 2 6 6 6
1 2 3 4 5 6 17 17 19 14 15 18 |
教科書の p.228 の List 8-15 を参考にして,頻度の出力では教科書 p.227 の List 8-13 にある keys() と values() 関数を使用しています.
解答例2(教科書 p.228 List 8-15 にある not in を使用)
解答例2ではさいころの目は小さい順にはなりません.並べ替えることも可能ではありますが,その際には教科書 p.288 に出てくるラムダ式が必要です. (解答例)
1から100の範囲の整数を乱数を用いて100個発生させ,小さい順に表示させます.次に,先ほど乱数で出なかった整数を表示するプログラムを作成しましょう.
|
Random numbers: 1 2 2 4 5 6 7 7 7 8 9 9 10 11 12 14 15 15 17 18 18 22 23 23 23 24 25 27 29 29 29 30 32 32 32 34 34 36 36 39 39 40 40 41 42 43 43 46 47 49 49 56 56 58 58 58 59 61 62 62 63 64 65 65 67 67 72 72 73 74 75 75 76 77 77 78 79 80 80 83 84 84 85 85 86 87 87 87 88 88 94 95 97 98 99 99 99 100 100 100 Numbers not appeared above: 3 13 16 19 20 21 26 28 31 33 35 37 38 44 45 48 50 51 52 53 54 55 57 60 66 68 69 70 71 81 82 89 90 91 92 93 96 |