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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

2回答

4629閲覧

Pythonで野球ゲーム(簡易)

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2019/01/15 15:38

編集2019/01/15 17:29

前提・実現したいこと

前提:各打者の打率を設定し、3アウト9イニング攻撃のみの簡易野球ゲームの作成

①一番から順に打席結果を表示する。
②3アウトになった時点で次の回へ
③次の回は前の回の最後にアウトになった打者の次の打者から
④得点も入るようなコードを書きたい
ex)4人連続ヒットで1点入る、2人連続ツーベースヒットで1点入る、ランナー1,2塁でホームランが出たら3点入る
⑤イニング詳細(誰がどのような打撃結果か)と最終的な得点を出力したい

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

3アウトになったら次のイニングへ行くのはできたのですが、次の回また一番から打つことになってしまっています。

該当のソースコード

Python

1import random 2 3o = 0#アウトカウント 4cnt = 0 5order = [b1 , b2 , b3 , b4 , b5 , b6 , b7 , b8 , b9]#各打者の打率 6ining = [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9]#イニング 7b1 = random.choices(["アウト" , "ヒット" , "ツーベースヒット" , "スリーベースヒット" , "ホームラン"], k=1,weights=[0.3, 0.3, 0.1 , 0.1 , 0.2]) 8b2 = random.choices(["アウト" , "ヒット" , "ツーベースヒット" , "スリーベースヒット" , "ホームラン"], k=1,weights=[0.3, 0.3, 0.1 , 0.1 , 0.2]) 9b3 = random.choices(["アウト" , "ヒット" , "ツーベースヒット" , "スリーベースヒット" , "ホームラン"], k=1,weights=[0.3, 0.3, 0.1 , 0.1 , 0.2]) 10b4 = random.choices(["アウト" , "ヒット" , "ツーベースヒット" , "スリーベースヒット" , "ホームラン"], k=1,weights=[0.3, 0.3, 0.1 , 0.1 , 0.2]) 11b5 = random.choices(["アウト" , "ヒット" , "ツーベースヒット" , "スリーベースヒット" , "ホームラン"], k=1,weights=[0.3, 0.3, 0.1 , 0.1 , 0.2]) 12b6 = random.choices(["アウト" , "ヒット" , "ツーベースヒット" , "スリーベースヒット" , "ホームラン"], k=1,weights=[0.3, 0.3, 0.1 , 0.1 , 0.2]) 13b7 = random.choices(["アウト" , "ヒット" , "ツーベースヒット" , "スリーベースヒット" , "ホームラン"], k=1,weights=[0.3, 0.3, 0.1 , 0.1 , 0.2]) 14b8 = random.choices(["アウト" , "ヒット" , "ツーベースヒット" , "スリーベースヒット" , "ホームラン"], k=1,weights=[0.3, 0.3, 0.1 , 0.1 , 0.2]) 15b9 = random.choices(["アウト" , "ヒット" , "ツーベースヒット" , "スリーベースヒット" , "ホームラン"], k=1,weights=[0.3, 0.3, 0.1 , 0.1 , 0.2]) 16 17for a in ining:#イニング 18 print(str(a) + "回の攻撃") 19 while True: 20 21 for z in order: 22 c = order[cnt%len(order)]#そのアウトカウントでの打者 23 if o == 3: 24 if a == 1 or a == 2 or a == 3 or a == 4 or a == 5 or a == 6 or a == 7 or a == 8 : 25 print("3アウトチェンジ") 26 else: 27 print("ゲームセット") 28 o = o - 3 29 30 break 31 print(z) 32 cnt += 1 33

試したこと

while文などを使いましたがよくわからないことになっていしまいました。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答2

0

ベストアンサー

そのコードだと打順が2回以上回っても困ったことになりそうですね。

基本的にはこんなループとして作ればよいのではないでしょうか。

python

1cnt = 0 2for a in ining: 3 while True: 4 c = order[cnt%len(order)] 5 ... 6 cnt += 1

投稿2019/01/15 16:10

hayataka2049

総合スコア30933

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

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

退会済みユーザー

退会済みユーザー

2019/01/15 16:26

返信ありがとうございます! 教えていただいた通りにしたらできました! ありがとうございます! ここからさらに発展させたのですが、ヒットの中でもホームランやツーベースヒットなど、内容を確率で変化させたい場合はどのようにするべきでしょうか?
hayataka2049

2019/01/15 16:36 編集

この回答の方法で書く場合は、breakのタイミングでcntの更新を忘れちゃわないようにだけ注意してください。 >ヒットの中でもホームランやツーベースヒットなど、内容を確率で変化させたい場合はどのようにするべきでしょうか? 打者ごとにこんな感じで表現します。 [単打の確率, 二塁打の確率, 三塁打の確率, ホームランの確率, アウトの確率] orderは小数のリストのリストになります。 random.choicesを使ってその確率に応じて結果を選択することができます。文字列のリストをpopulationとして、上記確率のリストをweightsとして渡せば良いですね。 https://docs.python.jp/3/library/random.html#random.choices
退会済みユーザー

退会済みユーザー

2019/01/15 17:17

質問本文のところに現在のコードを載せてみました。 もしよろしければまたアドバイスいただけるとありがたいです・・・。
guest

0

いきなり複雑なルールで作ろうとすると混乱します。
まずは単純かつ確実に打者を交代させる動きを作るところから始めましょう。

Python

1cur_member = 1 # 現在の打者 2 3for ining in range(1,10):# 1~9回まで 4 print('{}回の攻撃-----'.format(ining)) 5 out_cnt = 0 6 while out_cnt < 3: 7 print('{}番の打席'.format(cur_member)) 8 if True: # ここを打率で制御 9 out_cnt += 1 10 print('{}アウト--'.format(out_cnt)) 11 else: 12 print('ヒット') 13 14 # 次の打者に交代 15 cur_member += 1 16 if cur_member > 9: 17 cur_member = 1 18 19 print('チェンジ') 20 21print('ゲームセット')

投稿2019/01/15 16:25

can110

総合スコア38262

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

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

退会済みユーザー

退会済みユーザー

2019/01/15 17:18

この書き方ならやりやすそうですね! 組み込んでみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問