2017-08-26 1 views
0

J'essaie de créer une application autonome comme le rouleau de dés sur Roll20.net, en commençant par simple et comme je vais mieux, je peux ajouter plus de fonctionnalités, y compris une interface graphique, mais revenir à ce projet après avoir abandonné il y a des mois, je ne peux toujours pas obtenir la forme la plus basique même sortie.Le programme s'exécute mais ne produit aucune sortie lors de l'impression

import random 
from random import randint 

d20 = randint(1,20) 

str1 = "You rolled a " 
str2 = "Congrats Critical Hit" 
str3 = "Uh Oh, Critical Fail" 

def roll(d20): 
    roll(d20) 
    print (str1 + roll(d20)) 

    if (d20 == 1): 
     print (str3) 

    elif (d20 == 20): 
     print (str3) 

    else: 
     print ("") 

I soit obtenir une sortie complètement vide, ce qui implique que le programme se déroule sur le plan technique, ou je vais obtenir un « rouleau de fonction à 0x02A3B078 » ou je vais obtenir une réponse que quelque chose n'est pas défini.

Comment résoudre ce problème?

Répondre

0
  1. Vous définissez une fonction, mais vous ne l'appelez pas? Ajoutez cette ligne au bas de votre programme:

    roll(d20) 
    
  2. Ne pas appeler votre fonction à l'intérieur lui-même. Cela conduit à une récursion infinie.


Qu'est-ce que vous avez besoin est quelque chose comme ceci:

... 

def roll(d20): 
    print(str1, d20) 

    if d20 == 1: 
     print(str3)  
    elif d20 == 20: 
     print(str3) 

roll(d20) 

Est-ce que vous voulez faire de votre programme interactif? Vous pouvez initialiser une boucle while et la répéter tant que l'utilisateur souhaite jouer.

while True: 
    d20 = randint(1, 20) 
    roll(d20) 

    if input('Keep playing? ') not in {'y', 'Y'}: 
     break 
+0

Merci pour la réponse, j'ai essayé votre suggestion mais maintenant je reçois l'erreur "RecursionError: profondeur de récursivité maximale dépassée", que je ne comprends pas car j'appelle la fonction en dehors de la fonction? donc je ne devrais pas recevoir une telle erreur. Ou est-ce que je viens de me tromper complètement? A propos de l'interaction, mon plan était de créer une interface graphique à un moment donné, où en appuyant sur un bouton dans les appels GUI la fonction de roulement de dés – Tedwyn

+0

@Tedwyn Vous appelez la fonction plus d'une fois mon pote. Avez-vous copié mon code tel quel? –

+0

@Tedwyn Je vous recommande de copier mon mot de code pour mot ou de coller votre solution mise à jour dans la question afin que nous puissions déboguer cela ensemble. –

0

Essayez que

import random 
from random import randint 

str1 = "You rolled a " 
str2 = "Congrats Critical Hit" 
str3 = "Uh Oh, Critical Fail" 

def roll(d20): 

    print (str1 + str(d20)) 

    if (d20 == 1): 
     print (str3) 

    elif (d20 == 20): 
     print (str3) 


num_of_rolls = 10  
while num_of_rolls: 
    d20 = randint(1,20) 
    roll(d20) 
    num_of_rolls -= 1 

Certaines choses que vous pouvez prendre en compte à l'avenir. Vous n'avez pas appelé la fonction. Il imprime parfois pas de sortie, car il a 18:20 chance à print(""). Vous ne devriez pas commencer avec la gamme (1,20). Testez (1,2) et mettez print déclaration partout où vous le pouvez. C'est la seule façon d'être sûr de ce qui se passe dans votre fonction. Vous n'avez pas besoin de print("") si vous n'en avez pas besoin.

+0

Merci pour la réponse, la gamme de test était quelque chose que j'avais complètement oublié test, très apprécié – Tedwyn

+0

@Tedwyn Pas de problème. Bonne chance –