Select Language

AI Technology Community

2.16、Python失われた数を見つける

1から100までの整数が100個含まれるリストlistがありますが、順序は乱れています。今、ランダムに1つの値を削除します。削除された数値を計算してください。

1. 直接的な解法

1から100までの数のうち、入力されたリストに含まれていない数を順番に調べます。コードは以下の通りです。

コピーを整形する
import random                        # 疑似乱数モジュールをインポートする
def find_missing_num(list):          # 欠落した数を探す
    for candidate in range(1, 101):  # すべての数について、結果のキューに含まれているかどうかを調べる
        if candidate not in list:    # 結果のキューに含まれていない場合、それが欠落した数である
            return candidate         # 欠落した数を返す
    return None                      # 見つからない場合はNoneを返す
def test():  # テストコード
    list_a = range(1, 101)  # 100個の数を取得する
    random.shuffle(list_a)  # 順序をシャッフルする
    drop_val = list_a.pop(49)  # 1つの数を削除する
    print("削除された項目は %d です" % drop_val)
    ret = find_missing_num(list_a)  # 欠落した数を探す
    print("答え: %d" % ret)
if __name__=='__main__':  # スクリプトとして実行された場合、テストコードを実行する
    test()

実行結果:

$ python listdemo3.py
削除された項目は 77 です
答え: 77
$ python listdemo3.py
削除された項目は 97 です
答え: 97

2. 合計を求める方法

リスト内のすべての要素の合計sを求めます。削除された要素をxとすると、s + x = 1 + 2 + 3 + … + 100となります。これにより、xの値を求めることができます。コードは以下の通りです。

import random  # ランダムライブラリをインポートする
    def find_missing_num(list):
        expected_sum = ((1 + 100) * 100) / 2
        real_sum = sum(list)
        return (expected_sum - real_sum)
    def test():
        list_a = range(1, 101)
        random.shuffle(list_a)
        drop_val = list_a.pop(49)
        print("削除された項目は %d です" % drop_val)
        ret = find_missing_num(list_a)
print("答え: %d" % ret)
    if __name__=='__main__':
        test()

実行結果:

$ python listdemo4.py
削除された項目は 87 です
欠落した数 = 87
$ python listdemo4.py
削除された項目は 79 です
答え: 79


post
  • 26

    item of content
Pythonの基本データ型は全部で26章あります。
この章では、整数型、浮動小数点数、文字列、ブール型、リスト、タプル、セットおよび辞書など、Pythonが提供する基本的なデータ型について紹介します。また、これらのデータ型に対する演算操作についても解説します。
私たちはPythonが強タイプ言語であることを知っています。つまり、各変数の型は特定の時点でのみ確定します。言い換えれば、Pythonにおける任意の生存しているオブジェクトの型は一意です。異なる型のオブジェクトには異なる属性があり、異なる操作を実行できます。
さらに、この章の最後では変数やオブジェクトなどの概念についても触れられます。それぞれのオブジェクトには確定した型があり、各変数は特定のオブジェクトを指し示します。