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

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

ただいまの
回答率

87.94%

超簡単なサイコロゲームを実行するコード

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 7,481

score 12

python3.3勉強中の初心者です。
以下のコードはコマンドプロンプト→シェルから
import dice_gameと入力すれば動きますが、一度きりしか動きません。シェルを閉じてもう一度入力すれば実行できますが、2度、3度と連続して実行するにはどんなコードを入力すれば良いですか? ファイルは2つあります。
以下dice.py
import random

class Dice:
def init(self,val=6):
if val not in [4,6,8,12,20]:
raise Exception("そんな正多面体はありません。")
self.face_num = val

def shoot(self):
return random.randint(1,self.face_num)

以下は、dice_game.py

import dice

num = eval(input('4,6,8,12,20のどれで勝負しますか?:')) # input関数を使って値を受け取る
my_dice = dice.Dice(num)    # ユーザー用のサイコロ
cpu_dice = dice.Dice(num)   # コンピュータ用のサイコロ

my_pip = my_dice.shoot()    # pipはサイコロの目の意味
cpu_pip = cpu_dice.shoot()  # コンピュータの出た目

 出目を画面に出力 数字はstr関数を使って文字列に変更

print('CPU:' + str(cpu_pip) + ' あなた:' + str(my_pip))

 状況によってメッセージを変える

if my_pip > cpu_pip:
print('おめでとうございます。あなたの勝ちです!')
elif my_pip < cpu_pip:
print('残念!あなたの負けです。')
else:
print('引き分けです')
python3.3勉強中の超初心者です。以下の2つの
ファイルをコマンドプロンプト→シェルでimport dice_game
と入力すると実行できるのですが、一度しか実行できません。シェルを閉じてもう一度立ち上げれば実行はできます。
連続して実行するにはどんなコードを入力すれば良いですか? もしくはコードそのものの改造が必要ですか?
このコードはある初心者向けの本のコードです。
以下、1つ目のファイルdice.py

import random

class Dice:
    def __init__(self,val=6):
        if val not in [4,6,8,12,20]:
            raise Exception("そんな正多面体はありません。")
        self.face_num = val

    def shoot(self):
        return random.randint(1,self.face_num)

#以下はdice_game.pyです。別ファイルに記載。
import dice

num = eval(input('4,6,8,12,20のどれで勝負しますか?:')) 
my_dice = dice.Dice(num)    
cpu_dice = dice.Dice(num)   

my_pip = my_dice.shoot()    # pipはサイコロの目の意味
cpu_pip = cpu_dice.shoot()  # コンピュータの出た目

# 出目を画面に出力 数字はstr関数を使って文字列に変更
print('CPU:' + str(cpu_pip) + ' あなた:' + str(my_pip))
# 状況によってメッセージを変える
if my_pip > cpu_pip:
    print('おめでとうございます。あなたの勝ちです!')
elif my_pip < cpu_pip:
    print('残念!あなたの負けです。')
else:
    print('引き分けです')
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Zuishin

    2016/07/25 17:52

    インデントなくなってますよ

    キャンセル

  • argius

    2016/07/25 20:17

    コード部分は``` ```で囲んで(それぞれ改行する)、正しく表示されるかをプレビューで確認してください。詳しくは質問画面のmarkdownをクリックしてみて下さい。これをしないと、Pythonではインデントが維持されずに致命的に読みにくくなります。また__ __で囲んだ箇所が「強調」になり__が消えてしまうので、__init__がinitに見えます。

    キャンセル

  • monta

    2016/07/27 14:35

    argiusさん、有り難うございます。
    初心者なのでとても参考になります!

    キャンセル

回答 3

checkベストアンサー

0

import が .py を実行する方法として正しいかどうかは置いておいて・・・

初回 import dice_game で実行できたものは、
python2系では、2回目以降 reload(dice_game) で実行できます。
python3系では、 import imp を予めしておいた上で、 imp.reload(dice_game) で実行できます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/27 14:32

    hiro-kさん、有り難うございます。
    import dice_gameの後にimp.reload入力でうまく動きました。

     しかし、、、import impを最初に入力するとエラーでます、、。
    import dice_gameの後でimp.reloadでないと動きません。
    テキストにはpython dice_game.pyと入力するようになっていますが、
    当然エラーになります。 少し、しっくり来ないのですが、問題は解決しました
    のでベストアンサーに選びました。

    キャンセル

0

質問とは関係ないですが、numintにするには、eval()関数でなくint()関数を使いましょう。

ループを使って、ゲーム後に終了するかどうかを判定するのはどうですか?
それか、ゲーム数を決めておいて、for文でループでも良いです。

while True:
    # メイン処理

    if input("続けますか?[Y/n]") != "Y":
        break

print("ゲームを終了します")

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

一度目をimport dice_gameと入力し、2度目以降はimp.reload(dice_game)で
目的の動きは達成しましたが、何かしっくり来ないです。

テキストにはpython dice_game.pyと入力してありますが、エラー出ます。
その他、色々試しましたfが、上記の方法しかできませんでした。
ちなみに一度目、二度目の実行に関わらず,import impとするとエラー出ます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.94%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る