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

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

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

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

Q&A

解決済

1回答

1001閲覧

指スマ(いっせーので)

Konya

総合スコア10

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

0グッド

0クリップ

投稿2022/10/24 05:50

編集2022/10/31 07:11

前提

前回、長すぎてアドバイスをいただき短くしました!

ただ、このコードだとCPUの番の際ランダムでコンピューターが出す本数よりも合計のほうが小さいということが発生します。その解消の方法を考えてたんですがいい方法が思いつきません;; 答えでなくてもアドバイスでも全然いいので教えてください。

実現したいこと

・CPUの番の際ランダムでコンピューターが出す本数よりも合計のほうが必ず大きくする)
・なんでもいいのでアドバイス(もっと短くする方法があれば)

該当のソースコード

#関数のインポート import random import time #指の本数の定義 people_fin = 2 com_fin = 2 #関数作成 def people_yubisuma(): global people_fin global com_fin print("あなたの番!") print("何本出すか入力してね。") people_stand = int(input("あげる本数")) print(" ") print("合計全員で何本あげるか予想してね。") people_all = int(input("みんなとの合計")) print("ゆびすま、、") time.sleep(1) com_stand = random.randint(0, com_fin) if com_stand + people_stand == people_all: print("CPUは", com_stand, "本あげたよ。") print("あたり。一本のけてね。") people_fin -= 1 if com_stand + people_stand != people_all: print("CPUは", com_stand, "本あげたよ。") print("残念。") def com_yubisuma(): global people_fin global com_fin print("CPUの番!") print("何本出すか入力してね。") people_stand_up = int(input("あげる本数")) print("ゆびすま、、") time.sleep(1) com_stand_up = random.randint(0, com_fin) com_all = random.randint(0, com_fin + people_fin) if com_stand_up + people_stand_up == com_all: print("CPUは", com_stand_up, "本あげたよ。") print("CPUは", com_all, "本といったよ。") print("あたので一本のけるよ。") com_fin -= 1 if com_stand_up + people_stand_up != com_all: print("CPUは", com_stand_up, "本あげたよ。") print("CPUは", com_all, "本といったよ。") print("残念。") #関数動かす while True: print(" ") print(" ") people_yubisuma() if people_fin != 0 and com_fin != 0: print(" ") print(" ") com_yubisuma() if people_fin == 0: print(" ") print(" ") print("あなたの勝ち!") 3 break if com_fin == 0: print(" ") print(" ") print("CPUの勝ち!") break if people_fin == 0: print(" ") print(" ") print("あなたの勝ち!") break if com_fin == 0: print(" ") print(" ") print("CPUの勝ち!") break

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

googlecolaboratory使用。
anacondaでも大丈夫です(多分)。

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

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

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

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

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

bsdfan

2022/10/24 10:16

if people_fin == 0: と if com_fin == 0: のブロックが、 if people_fin != 0 and com_fin != 0: の中と外で2回書かれていますが、中のほうは要りますか?
Konya

2022/10/31 07:14 編集

回答が遅くなってすみません。 いりませんねw ifをそれぞれで考えてましたw 順次処理ではいりませんね! 意見感謝です!
guest

回答1

0

ベストアンサー

python

1 com_stand_up = 1#random.randint(0, com_fin) 2 com_all = 1#random.randint(0, com_fin + people_fin)

上記の「random.randint(0, com_fin + people_fin)」を0始まりでなく、自分の出す指の数=com_stand_up にすればいいのでは?

python

1 com_stand_up = 1#random.randint(0, com_fin) 2 com_all = 1#random.randint(com_stand_up, com_fin + people_fin)

ちなみに終了値ももう一息工夫したほうがよさそうですけどね。

投稿2022/10/24 05:58

編集2022/10/24 05:59
TakaiY

総合スコア12765

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

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

Konya

2022/10/24 06:11

ほんとですねw 難しく考えすぎたかもしれませんw TakaiYさん、いつもありがとうございます。ほんとに助かります;; 終了値のもう一工夫とは具体的にどう工夫すればいいのでしょうか? 個人的には問題なさそうに思えるのですがどういうことなんでしょうか? よかったら教えてください
TakaiY

2022/10/24 06:27

終了値は、com_fin + people_fin になってますよね。 これ、2本ずつだとして、最大4本ということになりますが、com が 1本も出していなかった場合、最大は2にしたほうがいいですよね。 ということです。
Konya

2022/10/24 06:29

あと、もう一つ質問できたのでよかったら教えてください。 追加でinputで自分の指の本数以上もしくは、全員の合計以上のときにやり直させらるようにしたいです。この場合、さらif関数を細かくしないといけないのでしょうか?
Konya

2022/10/24 06:32

逆のことですか!?! 気づかなかったw ほんとですね。 理解しました。ありがとうございます! if関数で何とかなりそうな気もするのでちょっと頑張ってみます。無理だったら質問にまた入れると思います。
TakaiY

2022/10/24 06:43

今の構造のままでやるのであれば、 print("あなたの番!") print("何本出すか入力してね。") people_stand = int(input("あげる本数")) ここの部分をwhileでかこって、 矛盾の無い入力値になるまで入力させることになるでしょう。 ただ、そうすると、com側にも同じような処理を入れることになりますね。 さらにたとえば中断機能を入れたいときには... というようにだんだんごちゃごちゃしたプログラムになってくると思います。 ここで一度、機能を追加していく前にプログラムの構造を見直すのをお勧めします。 - ユーザの入力を関数化する。 (ここに値のチェックを入れれば1箇所で済む) - 他にも共通の処理があれば関数化する。 - 勝敗の判定はちょっとわかりにくいので見直したほうがいいと思います。
TakaiY

2022/10/24 06:46

「if関数で何とかなりそうな気もする」 if関数不要です。 com が予測として言える範囲の 最低は 自分が出した本数ですが、 最高はどのような本数でしょうか? という質問です。 自分の指の本数、 相手の指の本数、 自分の出す本数 が使えますよね。 やってみればわかります。
Konya

2022/10/24 08:15

わかりました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問