2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

誰に投票するかをくじ引きで決める

Last updated at Posted at 2020-07-05

今日は都知事選ですね!

今年はすでに出来レースとなっていて、「誰に投票してもかわらないや」と思う人も多くいそうですし、投票率が下がるかもしれません。

https://www.amazon.co.jp/dp/4887597126
若者は、選挙に行かないせいで、四〇〇〇万円も損してる!? (ディスカヴァー携書) (日本語) 新書

なんて本もありますが、

  • 投票しない
  • 白票を投じる

となりますと、
支持基盤を持った人たちがただ有利になるだけ、
つまり つまらない政治がずっと続く ことになるので是非投票したいですね。

上記の書籍にもありますが、選びたい人がいない場合はエンピツ転がして選んでもいいんですよね。

目的は

  • 投票率を上げる
  • 候補者に支持基盤だよりにさせない

ことなので。

ただ、選びたい人がいなくても選びたくない人はいる、ということはあります。

候補者のリストを渡したらその中で一人を選んでくれる
といったプログラムを用意しました。

given_lottery.py
import secrets
import sys

def draw_lots(data=None):
    if data is None:
        return -1

    lot_member = data.split(',')
    r = secrets.randbelow(len(lot_member))

    return lot_member[r]

if __name__ == '__main__':
    args = sys.argv
    print(draw_lots(args[1]))

というくらいですね。

  1. 引数をカンマ区切りで分ける
  2. 0~要素数のなかでランダム値を出力する
  3. ランダム値でリストを引けば、名前が出力される

といった動きになります。

追記

コメントで「choice関数あるよ」と指摘を受けました。

というわけでリファクタリング。

given_lottery.py
import secrets
import sys

def draw_lots(data=None):
    if data is None:
        return -1

    return secrets.choice(data.split(','))

if __name__ == '__main__':
    args = sys.argv
    print(draw_lots(args[1]))
  1. 引数をカンマ区切りで分ける
  2. ランダムに名前を出力

と、スッキリしましたね。

ソースファイルは
https://github.com/atworks/given-lottery
に置きました。

あとは

image.png

> python .\given_lottery.py a,b,c,d,e,g
e

のように、カンマ区切りで文字列を渡したらランダムで1つを選んで出力します。
(fさんへは投票したくないので除いたリストを投入して選ぶ、といった動きを想定してます)

よい投票ライフを送りたいものです。

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?