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

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

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

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python

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

Q&A

解決済

1回答

2455閲覧

python じゃんけんゲーム

iiiii1111

総合スコア1

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python

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

0グッド

0クリップ

投稿2021/04/24 00:29

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
じゃんけんゲームにあいこの回数をデポジットして次の勝負で負けた方から引くという仕様を追加したいのですが上手くいきません

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

エラーメッセージ ``` name 'count' is parameter and global ### 該当のソースコード ```ここに言語名を入力 ソースコード ```import random hands = ['グー', 'チョキ', 'パー'] results = {'win':'【勝ち】', 'lose':'【負け】', 'draw':'【あいこ】'} lifes = {'my':5, 'you':5} count = 0 def initialize(): global lifes lifes = {'my':5, 'you':5} def start_message(): print('じゃんけんスタート') def show_life(): print(f"ライフ 自分:{lifes['my']} / 相手:{lifes['you']}") def is_hand(string): if string.isdigit(): number = int(string) if number >= 0 and number <= 2: return True else: return False else: return False def get_my_hand(): print('自分の手を入力してください') input_message = '' index = 0 for hand in hands: input_message += str(index) + ':' + hand if index < 2: input_message += ', ' index += 1 return input(input_message) def get_you_hand(): return random.randint(0, 2) def get_hand_name(hand_number): return hands[hand_number] def view_hand(my_hand, you_hand): print('自分の手は ' + get_hand_name(my_hand)) print('相手の手は ' + get_hand_name(you_hand)) def get_result(hand_diff): if hand_diff == 0: return 'draw' elif hand_diff == -1 or hand_diff == 2: return 'win' else: return 'lose' def view_result(result): print(results[result]) show_life() def deposit_draw(result): global count if result == 'draw': count += 1 print('☆あいこの回数は: ' + str(count)) def minus_draw_count(count,result): global count if not result == 'draw': if count >= 1: if result == 'win': lifes['my'] -= count elif result == 'lose': lifes['you'] -= count count = 0 def update_life(result): global lifes if result == 'win': lifes['you'] -= 1 elif result == 'lose': lifes['my'] -= 1 def get_replay(): replay_message = '再戦しますか?:(Y or N)' input_replay = input(replay_message) while not enable_replay(input_replay): input_replay = input(replay_message) if input_replay == 'Y': return True else: return False def enable_replay(string): if string == 'Y' or string == 'N': return True else: return False def play_once(): my_hand = get_my_hand() while not is_hand(my_hand): my_hand = get_my_hand() my_hand = int(my_hand) you_hand = get_you_hand() hand_diff = my_hand - you_hand view_hand(my_hand, you_hand) result = get_result(hand_diff) update_life(result) view_result(result) deposit_draw(result) minus_draw_count(count,result) if lifes['my'] > 0 and lifes['you'] > 0: play_once() else: if get_replay(): initialize() play() def play(): start_message() show_life() play_once() play() ### 試したこと あいこが連続した場合はカウントし一回でも勝ちor 負けを挟んだ場合はあいこのカウントををリセットしたいので何回か関数を書き直しました。 ### 補足情報(FW/ツールのバージョンなど) pythonを始めて二ヶ月目なので分かりやすく書いていただけると幸いです。

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

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

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

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

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

1T2R3M4

2021/04/24 00:33

インデントつけないでpythonのプログラミングしているのですか。
jbpb0

2021/04/24 00:55

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
meg_

2021/04/24 02:28

コードは「コードの挿入」で記入してください。
BeatStar

2021/04/24 11:29

『編集』時に、"<code>"または"<コード>"っていうボタンがあるので、それを押してからそこに書きましょう。
guest

回答1

0

ベストアンサー

def minus_draw_count(count,result):
global count

の部分で、関数の引数をglobal宣言しているのがエラーの原因です。

質問の部分ではありませんが、気がついたことです。

play関数からplay_once関数を呼び出し、play_once関数からplay関数を呼び出すのはやめておいた方が良いでしょう。
また、全体構成でいうと、ゲームの継続処理、5点を競う一回のゲーム、ゲームの各ターン(ジャンケン一回)というように階層化した構造にしておく方が、可読性が高く、機能追加も楽になります。

投稿2021/04/24 01:31

編集2021/04/24 01:35
ppaul

総合スコア24666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問