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

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

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

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

Q&A

解決済

3回答

1113閲覧

初心者です。文法の間違いがわかりません

massa55

総合スコア6

Python

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

1グッド

1クリップ

投稿2020/03/15 03:49

編集2020/03/15 04:07

さいころを投げて先に20に到達した人が勝ちというゲームを関数を使って作ったのですがうまくいきません。どこが間違ってますか?必ずyou winになります。

import random your=0 me=0 def saikoro(player): daiz=random.randrange(1,7) if(player=='you'): input('push enter') global your your+=daiz else: global me me+=daiz return True def checker(counter): if(your or me >=20): if(your>=20): print('you win') else: print('i win') while(True): saikoro('you') checker(your) saikoro('me') checker(me) コード
s.k👍を押しています

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

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

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

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

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

guest

回答3

0

グローバル変数を使わないようにしてみました。

wc.py

python3

1import random 2 3def play(name, point): 4 daiz = random.randrange(1, 7) 5 if player == 0: 6 input('push enter') 7 return point + daiz 8 9def check_winer(player, point, name): 10 print( " ", name, point) 11 if point >= 20: 12 print(name + " win") 13 return name 14 15 16player_infos = { 17 0: {'name': 'you', 'point': 0, 'winer_name': 'you'}, 18 1: {'name': 'me', 'point': 0, 'winer_name': 'i'} 19} 20player = 0 21while(True): 22 player_infos[player]['point'] = play(player, player_infos[player]['point']) 23 if check_winer(player, player_infos[player]['point'], player_infos[player]['winer_name']): 24 break 25 player = (player + 1) % 2

実行例
イメージ説明

投稿2020/03/15 06:31

編集2020/03/15 06:32
katoy

総合スコア22324

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

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

0

ベストアンサー

if(your or me >=20):は、if(your >0 or me >=20):と同じことになるので、yourが小さいうちは常にi winですね。

Python

1def checker(counter): 2 if(your >=20 or me >=20): 3 if(your>=20): 4 print('you win') 5 else: 6 print('i win')

が正しいです。
これだと冗長なので、冗長な部分と無意味な部分(引数と括弧)を削って、

Python

1def checker(): 2 if your>=20: 3 print('you win') 4 elif me>=20: 5 print('i win')

あと、勝負がついたら、プログラムを終了させた方がよくないですか?

投稿2020/03/15 04:35

編集2020/03/15 04:36
otn

総合スコア84798

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

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

massa55

2020/03/15 04:47

ありがとうございます。本当に助かります。 この場合ってプログラムの終了をbreakで行うことはできるのですか?
otn

2020/03/15 04:56

whileループの中でbreakすれば可能です。
massa55

2020/03/15 04:58

ありがとうございます。やってみます
guest

0

グローバル変数に代入するのであれば、global宣言をしてください。

PythonプログラミングFAQ: なぜ変数に値があるのに UnboundLocalError が出るのですか?
https://docs.python.org/ja/3/faq/programming.html#id9

投稿2020/03/15 03:54

編集2020/03/15 03:56
shiracamus

総合スコア5406

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

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

massa55

2020/03/15 04:09

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問