ショック!人生は短いです、私は天地競馬をするためにパイソンを使います

タイトルを読んで笑ったハハハ最近、ピッグ兄弟(よく遊んだペンユー)から宿題の解決を手伝ってほしいと頼まれましたハハハ、自社でテスト質問を書いています。ハハハ、これが将来ハハハで遭遇するテストの質問である場合に備えて、豚の兄弟が言ったことを思い出してください。突然、私は半年間Pythonをプレイしていないことに気づき、手を出産しました。
ここに写真の説明を挿入

python関数を使用してTianJi競馬を実現します

1つリクエストしてください

ここで、
Tian Jiの馬をリスト[2,5,8]として抽象化し、
Qi Wangの馬を別のリスト[3,6,9]として抽象化し
、それぞれの下、中、上馬を表します(私は自分で読んだこの時点で、値が高いほど馬が良くなることを覚えておいてください。そうすれば、理解が間違ってしまうことはありません)。
関数race()を設計し、2つのリストをパラメーターとしてrace()に渡し、戦略をコードとして抽象化してTian Jiがゲームに勝つようにします。関数は、試合の各ラウンドの状況を返し
ます。上記のコード

# coding=utf-8
from typing import *


def race(tian: List[int], qi: List[int]) -> List[List[int]]:
    # 给两个列表的数排序
    tian.sort()
    qi.sort()

    # 把最弱的放到最后
    # 这里运用了索引的知识,第一个索引是除了第一个元素不取(也就是索引为0的)其他的都取;
    # 第二个是取到第一个元素,然后作为一个列表里面的一个元素
    tian = tian[1:] + [tian[0]]

    # 返回每轮对阵情况
    return list(zip(tian, qi))


if __name__ == '__main__':
    tianji = [2, 5, 8]
    qiwang = [3, 6, 9]
    result = race(tianji, qiwang)
    print(result)

2つリクエスト

次に、馬を悪い、下、中、上、優れなどの5つに分割します。リスト[2,4,6,8,10]および[1,3,5,7,9]として抽象化された、3勝システムの5ラウンド。他の条件は変更されません(King Qiは引き続きルールに従い、Tian Jiはルーチンに従わずにカードをプレイし続けます)、TianJiがゲームに勝つために必要な可能性の数を計算します。
コードに移動します。

# coding=utf-8
import itertools


def race(qiwang, tianji):
    # 用迭代获取田忌所有派遣马匹的方式(['13579',5])
    tianji_l = list(itertools.permutations(tianji, len(tianji)))
    # 全部赛果
    result = []
    # 遍历所有的赛马方式
    for i in tianji_l:
        # 一轮的比赛结果
        result_1 = []
        # 一轮比拼中,双方马匹对阵情况,i为tianji(i是从tianji_l获取的)
        for horses in zip(i, qiwang):
            # 如果田忌的马值比齐王的小
            if horses[0] < horses[1]:
                # 那这一轮就是田忌输
                result_1.append('lose')
            else:
                # 反之,这一轮就是田忌赢
                result_1.append('win')
        # 如果这一轮赢三次及以上
        if result_1.count('win') >= 3:
            # 田忌就赢了,将赢了的追加到result里面
            result.append('win')
    return len(result)


if __name__ == '__main__':
    tian = [1, 3, 5, 7, 9]
    qi = [2, 4, 6, 8, 10]
    all_result = race(qi, tian)
    print(all_result)

リクエスト3

チー王なら、同じレベルのティアンジの馬よりも自分の馬の方が優れていることを知っているので、事前に相手の派遣の順番はわかりませんが、前のラウンドで派遣された相手の馬に基づいて、このラウンドを選択できます。ゲームに勝つ可能性を最大化するディスパッチ戦略を開発します。

3番目の質問については、どうすればよいかわかりません(この脳は草が生えていると思います。これは、私が一晩中起きていたときに父が思いついたものです。これは最善ではないかもしれません。賢い脳が必要です。もっと良いアイデアがあれば、私を信頼してください。 、議論へようこそ)

問題解決のアイデア
Tian Jiの劣等生で勝つための戦略は、負けるともっと負けるが、勝つとアドバンテージが弱く
、10-1 8-9 6-7 4-5 2-3(Qi Wang 1:Frog 4)
チー王を可能な限り勝利させる方法は、この「弱いアドバンテージ」を開くことです。

方法
チー王は初めて2位にランクインし、
毎回2つの状況に分けられました
。1。ティアン・ジが勝ったら、和田ジのx-1を取り出して次のラウンドに参加できます。
2. Tian Jiは負けて、最小のものを取り出し続けることができます。
x-1がなくなると、最悪の馬が出ます。

この方法はまだ失敗します。RuTianJiは35 7 91に従いました。

コードをアップロード

# coding=utf-8

from itertools import permutations
from typing import *

tian = [1, 3, 5, 7, 9]
qi = [2, 4, 6, 8, 10]


def play() -> float:
    global qi
    win_count = 0
    cnt = 0
    for a, b, c, d, e in permutations(tian, 5):
        qi = [2, 4, 6, 8, 10]  # 复原
        cnt += 1
        tian_rank = [a, b, c, d, e]
        qi_rank = [qi.pop(0)]  # 初始化
        for index, last_tian in enumerate(tian_rank[:4]):
            qi_rank.append(strategy(last_tian, qi_rank[index] > tian_rank[index]))  # 每次根据上一次tian的和输赢制定策略
        # 根据两个rank算输赢
        win_count += winner(qi_rank, tian_rank)
    # 返回概率
    return float(win_count) / float(cnt)


def strategy(last_tian: int, is_win: bool) -> int:
    global qi
    # 如果齐王上轮赢了,继续拿最小的出来
    if is_win:
        return qi.pop(0)
    # 如果齐王上轮输了
    else:
        # 如果x-1的存在,就拿出来
        if last_tian - 1 in qi:
            return qi.pop(qi.index(last_tian - 1))
        # 否则还是拿最小的
        else:
            return qi.pop(0)


def winner(qi: List[int], tian: List[int]) -> bool:
    cnt = 0
    for q, t in zip(qi, tian):
        cnt += q > t
    return cnt >= 3


if __name__ == '__main__':
    print(play())

この方法で計算された確率は0.075です。
ここに写真の説明を挿入

最初の2つのアルゴリズムの問​​題は、脳に燃料を追加することで記述できると思います。3つ目の問題は、非常に困難です(もちろん、大物にとっては些細なことです)。

https://blog.csdn.net/hanhanwanghahaこの超無敵でかわいいアヒルをフォローすることを歓迎します。質問がある場合は、プライベートメッセージを残して、それを見つけたら返信します。
作成は簡単ではありません。転載する場合は、出典を明記してください

おすすめ

転載: blog.csdn.net/hanhanwanghaha/article/details/110846070