2017-08-18 5 views
0

Je fais un programme de dés et j'ai un problème. J'ai 2 dossiers dans mon programme: "lancer de dés" et "dés". Le lancer de dés a des dés à l'intérieur. dés rouleau a également un fichier python appelé roll.py dés:ouverture du fichier python dans le mauvais dossier

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

Le dossier de dés a un fichier python appelé DiceCrop.py:

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") 

Le dossier de dés a également un fichier image « dés. png ". Cependant, quand je lance dice roll.py, il n'y a pas de fichier comme "dice.png". Je sais pourquoi cela arrive, mais je ne sais pas comment le réparer. Cela arrive parce qu'il s'ouvre dans le dossier des dés et non dans le dossier des dés. Comment puis-je l'ouvrir dans le dossier des dés et non dans le dossier des dés? Voici le message d'erreur:

error message

+0

Lorsque vous exécutez le code à partir du fichier DiceCrop.py dans le fichier dice roll.py, il utilise le chemin du fichier dans DiceCrop.py. Mais puisque le fichier roll.py est exécuté dans un dossier différent de celui des fichiers png, il ne parvient pas à les trouver. Vous devriez juste mettre tout dans le même dossier ou regarder dans 'import 'en python pour gérer les importations relatives comme celle-ci. – somil

+5

Pourquoi sur terre faites-vous 'exec (open (" ./ dice/DiceCrop.py "). Read() ...' ??? Si vous avez vraiment besoin d'utiliser ce fichier, 'import'. – DyZ

Répondre

0

Faisant suite à la suggestion de 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)) 

Ce qui précède est d'utiliser le fichier DiceCrop.py comme un module python qui expose l'interface create_dice. Vous pouvez ensuite réutiliser la fonction create_dice dans d'autres fichiers python si nécessaire. Nous avons également ajouté un test rapide pour nous assurer que nous ne reproduisions pas les images de dés à chaque passage. Bonne chance!