各種SNSで投票を募るアカウントを見る日は多いです。
%表記で投票比率を見たときに、
その比率は最低何人いてその%なのか
が気になった次第
そこで、投票率から最低限必要な票数を算出するプログラムを書きました。
- 二択の投票の片方の得票率を整数値で入力
- 得票率の最大公約数からそれぞれの最低票数を算出
という流れ。
学習過程の成果、記録として上げました。
ration_voters.py
# -*- coding: utf-8 -*-
import math
a = int(input("1~100の整数 "))
b = int(100 - a)
a_s, b_s = str(a), str(b)
print("投票比率 " + a_s + ' : ' + b_s)
a_div = []
b_div = []
def divisor(side):
# 約数を算出、リストに挿入
n = int(side)
div = []
for i in range(2, n+1):
num = float(n)
ni = num / i
f = math.modf(ni)
if f[0] == 0:
div.insert(0, i)
return div
a_div = divisor(a)
b_div = divisor(b)
a_set = set(a_div)
b_set = set(b_div)
t = a_set & b_set
# 約数から最低限必要な投票人数を算出、出力
if t == set():
print("最低、100人による投票です。")
else:
max_divisor = max(t)
a_max_div, b_max_div = a / max_divisor, b / max_divisor
saitei = str(a_max_div + b_max_div)
print("最低、" + saitei + "人による投票です。")
str_a_max_div, str_b_max_div = str(a_max_div), str(b_max_div)
print("投票比率 " + str_a_max_div + ' : ' + str_b_max_div)
##学習内容
pythonの基本文法から、諸々調べつつ書きました。
約数の算出部分は自力で考えましたが、ライブラリがあることに書き終わってから気付きました。
これも勉強の一環ということで。
日本語コメントの挿入、math.modfの扱い、複数リストから共通部分取得から配列作成あたりは勉強になりました。
##改善点
内容として、
- 投票率をfloat型で扱えるようにする。
- 投票の選択肢を4つくらいまでは扱えるようにする。
上記は実装したいです。
命名規則、処理手順など、もっとスマートにできるようにしたいです。
初投稿で何かと未熟ですが、最後まで見ていただき、ありがとうございました。
以上、記録です。