LoginSignup
3
4

More than 5 years have passed since last update.

いくつかの質問に答えると、次の回答を予想するプログラム

Last updated at Posted at 2013-12-08

ユーザーに3つの質問をして、その後ユーザーが答えるであろう回答を予想するプログラムを作ってみた。

ソース

quiz.py
# -*- coding: utf-8 -*-
import random
questions = ["犬より猫が好き",
        "理系",
        "男",
        "パンよりご飯が好き",
        ]
ourAnswers = [[0,1,1,1],
             [1,1,1,0],
             [0,0,1,0],
             [0,1,0,1],
             [1,0,0,1],
             ]


def quiz():
    u"""いくつか質問をします。その後、あなたが答えるであろう回答を予想します。
    """
    target = random.randint(0,len(questions)-1)
    yourAnswer = len(questions)*[0]
    rates = len(questions)*[0]

    for i, question in enumerate(questions):
        if i == target:
            continue
        yourAnswer[i] = int(raw_input(question+"ですか? 1.はい,0.いいえ  :"))

    for i in xrange(len(questions)):
        i_is1count = 0
        target_is1count = 0
        for ourAns in ourAnswers:
            if ourAns[i] == yourAnswer[i] or i == target:
                i_is1count += 1
                if ourAns[target] == 1:
                    target_is1count += 1
        if i_is1count == 0:
            rates[i] = 0.5
        else:
            rates[i] = float(target_is1count) / i_is1count
    rate = sum(rates)/len(rates)
    if rate >= 0.5:
        yourAnswer[target] = int(raw_input("★あなたは{0}ですね?(確率{1:.2f}%) 1.はい,0.いいえ  :".format(questions[target],rate*100)))
    else:
        yourAnswer[target] = 1 - int(raw_input("★あなたは{0}ではないですね?(確率{1:.2f}%) 1.はい,0.いいえ  :".format(questions[target],100-rate*100)))
    ourAnswers.append(yourAnswer[:])


if __name__ == "__main__":
    while(True):
        quiz()

実行結果

犬より猫が好きですか? 1.はい,0.いいえ  :1
理系ですか? 1.はい,0.いいえ  :1
パンよりご飯が好きですか? 1.はい,0.いいえ  :1
★あなたは男ですね?(確率52.50%) 1.はい,0.いいえ  :

お、おう...

冒頭のquestions(質問リスト)とourAnswers(回答リストのリスト)を書き換えて遊んでください。
少しずつ賢くなっていきます。
判断基準はこんな感じ。

質問XがYESである確率=回答Yが[YES/NO]である時に回答XがYESだった割合

どの問いが核心に迫る問いなのかという重み付けはしてません。

3
4
0

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
3
4