質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

179閲覧

pythonで百発百中の大砲一門と百発一中の大砲百門撃ちあったらどちらが勝つかというコードを書いています。結果を表すグラフの作成方法がわかりません。教えていただけないでしょうか。

asg

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/06/04 07:53

実現したいこと

コードの結果をグラフで表示したいです。

前提

pythonで百発百中の大砲一門と百発一中の大砲百門撃ちあったらどちらが勝つかというコードを書いています。先に撃った場合と同時に攻撃した場合でどの程度結果が変わるかを検証しているのですがその結果を表すグラフを作成していたらエラーが起きてしまいました。グラフの作成方法を教えていただけないでしょうか。

発生している問題・エラーメッセージ

実行結果とエラーメッセージはこんな感じになりました

先行有利時の勝率: 1.0 同時攻撃時の勝率: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-10-6582a67af622> in <cell line: 74>() 72 73 ax.plot(rate_range, win_rates_same, label='same') ---> 74 ax.plot(y=win_rate_pre, color='red', label='Advantage') 75 76 plt.xlabel('Rate') 1 frames /usr/local/lib/python3.10/dist-packages/matplotlib/axes/_base.py in __call__(self, data, *args, **kwargs) 244 for pos_only in "xy": 245 if pos_only in kwargs: --> 246 raise _api.kwarg_error(self.command, pos_only) 247 248 if not args: TypeError: plot() got an unexpected keyword argument 'y' ### 該当のソースコード ```ここに言語名を入力 ソースコード import random import matplotlib.pyplot as plt c1num = 1 rate1 = 1.0 c2num = 100 rate2 = 0.01 def sim1(c1num, rate1, c2num, rate2): def shoot_cannon(rate): if rate > random.random(): return True else: return False c1num_copy = c1num c2num_copy = c2num while c1num_copy > 0 and c2num_copy > 0: for _ in range(c1num_copy): if shoot_cannon(rate1): if c2num_copy > 0: c2num_copy -= 1 else: break for _ in range(c2num_copy): if shoot_cannon(rate2): if c1num_copy > 0: c1num_copy -= 1 else: break if c1num_copy == 0 and c2num_copy == 0: return 0 elif c1num_copy == 0: return 1 elif c2num_copy == 0: return 2 else: return 3 # 先行有利時のシミュレーションとグラフ results_pre = [] for _ in range(10000): result = sim1(c1num, rate1, c2num, rate2) results_pre.append(result) # 先行有利時の勝率 win_rate_pre = results_pre.count(1) / len(results_pre) # 同時攻撃時のシミュレーションとグラフ rate_range = [i * 0.01 for i in range(101)] win_rates_same = [] for rate in rate_range: results_same = [] for _ in range(10000): result = sim1(c1num, rate, c2num, rate2) results_same.append(result) # 同時攻撃時の勝率 win_rate_same = results_same.count(1) / len(results_same) win_rates_same.append(win_rate_same) # 結果の比較の表示 print("先行有利時の勝率:", win_rate_pre) print("同時攻撃時の勝率:", win_rates_same) # グラフの表示 fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot(rate_range, win_rates_same, label='same') ax.plot(y=win_rate_pre, color='red', label='Advantage') plt.xlabel('Rate') plt.ylabel('Win Rate') plt.legend() plt.show() ### 試したこと グラフを表示させるために資料を見ながらやってみたのですがよくわかりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問