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

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

ただいまの
回答率

88.34%

pythonで別のpythonファイルを読み込みたい。

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 191

前提・実現したいこと

Pythonでブラックジャックを作っているのですが、ソースコードが非常に長くなってしまい、別のファイルに処理を移して必要に応じて読み込むことで、ソースコードを短縮したいと思いました。

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

関数やクラスをimportする方法は見つかったのですが、どうしてもファイル自体をimportする方法が見つかりませんでした。

該当のソースコード

import random
import sys
import time
import pygame
import mutagen
serect='99'
ranking =[]
playerlist =''
text =''
mainmenu = 'main'
play = open('playerlist.txt','r+', encoding="utf-8")
text = play.read()
for text in play:
playerlist = (playerlist) + (text)
playerlist = text
print('ブラックジャック')
print('メインメニューです。')
while mainmenu ==('main'):
mainmenu =input('ランキングを表示する場合は1、データをロードする場合は2を、新規作成の場合は3、データを削除する場合は4、終了する場合は5を入力してください。:')
if mainmenu ==('1'):
print(playerlist)
mainmenu ='main'
if mainmenu ==('2'):
name =input('プレイヤーネームを入れて下さい')
if name in playerlist:
print(name+"さん、ゲームを開始します。")
elif name not in playerlist:
print("プレイヤーが見つかりませんでした。メインメニューに戻ります。")
mainmenu ='main'
if mainmenu ==('3'):
name = input('登録するプレイヤーネームを入力してください。')
play = open('playerlist.txt','r+', encoding="utf-8")
text = play.read()
playerlist = text
playerlist.write(str(name))
print('登録できました。')
mainmenu ='main'
if mainmenu ==('4'):
name = input('削除したいプレイヤーの名前を入力してください。')
playerlist.remove(name)
print('削除できました。')
mainmenu ==('menu')
if mainmenu == ('5'):
sys.exit()
if mainmenu == ('256'):
serect == ('yes')
while serect ==('yes'):
serect='No'
hand = 0
hand = random.randint(1,10)
hand = hand+random.randint(1,10)
dillerhandA = random.randint(1,10)
dillerhand = dillerhandA+random.randint(1,10)
print('相手の手札')
print(dillerhandA)
print('自分の手札')
print(hand)
serect = input('hitかstandどちらにしますか?')
while serect == ('a'):
hand =21
while serect == ('hit'):
hand = hand+random.randint(1,10)
print('自分の手札')
print(hand)
if hand>21:
print('バースト')
sleep(1)
hand=0
serect = input('続けますか?')
break
serect = input('hitかstandどちらにしますか?')
while serect ==('stand'):
while dillerhand <= 16:
dillerhand = dillerhand+random.randint(1,10)
print('相手の手札')
print(dillerhand)
if dillerhand >=16:
if dillerhand>21:
print('バーストしました')
print('相手の手札')
print(dillerhand)
serect = input('続けますか?')
continue
if dillerhand>hand:
print('あなたの負け')
print('相手の手札')
print(dillerhand)
serect = input('続けますか?')
if dillerhand<hand:
print('あなたの勝ち')
print('相手の手札')
print(dillerhand)
serect = input('続けますか?')
if hand == dillerhand:
print('引き分けです')
print('相手の手札')
serect = input('続けますか?')
while serect == ('no'):
print('お疲れさまでした。')
sleep(3)
sys.exit()
上のソースコードの中の
while serect ==('yes'):
serect='No'
hand = 0
hand = random.randint(1,10)
hand = hand+random.randint(1,10)
dillerhandA = random.randint(1,10)
dillerhand = dillerhandA+random.randint(1,10)
print('相手の手札')
print(dillerhandA)
print('自分の手札')
print(hand)
serect = input('hitかstandどちらにしますか?')
while serect == ('a'):
hand =21
while serect == ('hit'):
hand = hand+random.randint(1,10)
print('自分の手札')
print(hand)
if hand>21:
print('バースト')
sleep(1)
hand=0
serect = input('続けますか?')
break
serect = input('hitかstandどちらにしますか?')
while serect ==('stand'):
while dillerhand <= 16:
dillerhand = dillerhand+random.randint(1,10)
print('相手の手札')
print(dillerhand)
if dillerhand >=16:
if dillerhand>21:
print('バーストしました')
print('相手の手札')
print(dillerhand)
serect = input('続けますか?')
continue
if dillerhand>hand:
print('あなたの負け')
print('相手の手札')
print(dillerhand)
serect = input('続けますか?')
if dillerhand<hand:
print('あなたの勝ち')
print('相手の手札')
print(dillerhand)
serect = input('続けますか?')
if hand == dillerhand:
print('引き分けです')
print('相手の手札')
serect = input('続けますか?')
while serect == ('no'):
print('お疲れさまでした。')
sleep(3)
sys.exit()
ここまでを別のファイルに移し、ブラックジャックの処理が終わったらこれより上の処理に戻したいと思っています。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

まず、コードはコードブロックで囲んでください。
インデントが崩れて見づらいですし、Pythonの場合はインデント自体にも意味のあるので実行できないです。

関数やクラスをimportする方法は見つかったのですが、どうしてもファイル自体をimportする方法が見つかりませんでした。

そもそもこの解釈自体間違っています。
importした場合、指定したファイルのコードが最後まで実行されます。
そうすることで、そのファイルに書かれた関数やクラスが使えるようになります。

なので、以下のようにすると、「test」という文字列が表示されます。

# coding: utf-8
# Main.py

import file1
# coding: utf-8
# file1.py

print('test')

paiza.ioでの実行結果

ただ、普通はこういうことはせず、関数やクラスにして、それを適宜実行するというのが普通です。
詳しいところまで見れていないですが、今回のケースでも関数などで済む内容なのではないでしょうか。
「処理が終わったらこれより上の処理に戻したい」のであれば、なおさら関数のほうが便利だと思いますが。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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