2017-08-18 9 views
0

私はサイコロのプログラムを作っていますが、問題があります。私のプログラムには2つのフォルダがあります: "dice roll"と "dice"です。サイコロにはサイコロがあります。pythonファイルが間違ったフォルダに開かれています

サイコロフォルダは、画像ファイルを持っている
from PIL import Image 

dice = Image.open("dice.png") 

dice1 = dice.crop((0, 50, 65, 150)) 
dice1.save("one.png") 

dice2 = dice.crop((64, 50, 131, 150)) 
dice2.save("two.png") 

dice3 = dice.crop((130, 50, 196, 150)) 
dice3.save("three.png") 

dice4 = dice.crop((196, 50, 262, 150)) 
dice4.save("four.png") 

dice5 = dice.crop((262, 50, 328, 150)) 
dice5.save("five.png") 

dice6 = dice.crop((328, 50, 394, 150)) 
dice6.save("six.png") 

「サイコロ:

from random import randint 
exec(open("./dice/DiceCrop.py").read(), globals()) 
print(randint(1,6)) 

サイコロフォルダがDiceCrop.pyと呼ばれるPythonのファイルを持っている:サイコロのロールもサイコロroll.py呼ばれるPythonのファイルを持っています。 png "と表示されます。しかし、私がdice roll.pyを実行すると、 "dice.png"というファイルは存在しないと言います。なぜこれが起こるのか知っていますが、それを修正する方法はわかりません。これは、サイコロのフォルダではなく、サイコロのフォルダに開くために起こります。どのように私はサイコロのフォルダではなく、サイコロのロールフォルダでそれをオープンにするのですか?ここでは、エラーメッセージは次のとおりです。

error message

+0

ダイスroll.pyファイル内のDiceCrop.pyファイルからコードを実行すると、DiceCrop.pyのファイルパスが使用されます。しかし、サイコロは、pngファイルとは別のフォルダで実行されるため、それらを見つけることができません。同じフォルダにすべてを置くか、Pythonで 'import 'を調べて、このような相対的なインポートを処理するだけです。 – somil

+5

なぜ地球上で 'exec(open(" ./ dice/DiceCrop.py ")。read()...' ???本当にそのファイルを使う必要があれば 'import'してください。 – DyZ

答えて

0

Dyzの提案にフォローアップ:

DiceCropy.py

from PIL import Image 

def create_dice(): 
    dice = Image.open("dice.png") 

    dice1 = dice.crop((0, 50, 65, 150)) 
    dice1.save("one.png") 

    dice2 = dice.crop((64, 50, 131, 150)) 
    dice2.save("two.png") 

    dice3 = dice.crop((130, 50, 196, 150)) 
    dice3.save("three.png") 

    dice4 = dice.crop((196, 50, 262, 150)) 
    dice4.save("four.png") 

    dice5 = dice.crop((262, 50, 328, 150)) 
    dice5.save("five.png") 

    dice6 = dice.crop((328, 50, 394, 150)) 
    dice6.save("six.png") 

roll.py

from random import randint 
from .DiceCrop import create_dice 
import os 

if not os.path.exists('one.png'): 
    create_dice() 
print(randint(1,6)) 

上記のことはDiceCrop.pyファイルをcreate_diceインターフェイスを公開するPython モジュールとして使用することです。その後、必要に応じてcreate_dice関数を他のPythonファイルで再利用することができます。また、毎回の実行時にサイコロのイメージを再作成しないようにするための簡単なテストを追加しました。がんばろう!

関連する問題