2017-10-13 6 views
-5

Donc, j'écris un programme qui, une fois terminé, aura un utilisateur lancer 2 dés et ensuite garder une somme courante des valeurs affichées et assigner quelques points aux valeurs qui sont roulés, mais je suis confronté à un problème au démarrage. C'est ce que j'ai jusqu'à présent:Affectation d'un nom de variable à une fonction en Python 3

def diceOne(): 
    import random 
    a = 1 
    b = 6 
    diceOne = (random.randint(a, b)) 

def diceTwo(): 
    import random 
    a = 1 
    b = 6 
    diceTwo = (random.randint(a, b)) 

def greeting(): 
    option = input('Enter Y if you would like to roll the dice: ') 
    if option == 'Y': 
     diceOne() 
     diceTwo() 
     print('you have rolled a: ' , diceOne, 'and a' , diceTwo) 



greeting() 

(après, je prévois de faire des calculs comme diceTwo + diceOne et faire toutes les autres choses - je sais que cela est très difficile)

Mais quand il court, il ne donne pas de bonnes valeurs entières comme attendu, il retourne function diceOne at 0x105605730> and a <function diceTwo at 0x100562e18> Est-ce que quelqu'un sait comment contourner cela tout en étant capable d'assigner des noms de variables pour pouvoir ensuite effectuer des calculs?

+1

La création de variables avec le même nom qu'une fonction est une mauvaise pratique de programmation. – eyllanesc

+2

Parce que vous référencez les fonctions, pas les valeurs qu'elles ont renvoyées (que vous avez complètement ignorées). Aussi vos deux fonctions sont identiques, donc * pourquoi avez-vous deux fonctions? * Vous devriez avoir quelque chose de plus comme "rollOne = dice()" et "rollTwo = dice()". – jonrsharpe

+1

Les variables n'existent que dans le contexte où elles sont créées, dans le cas où les variables n'existent que dans la fonction, donc si vous imprimez diceOne depuis l'extérieur de la fonction, cela sera considéré comme une fonction. Votre code me semble ridiculement idiot. – eyllanesc

Répondre

1

Il y a plusieurs problèmes avec votre code. Je posterai cela comme une réponse parce qu'il est plus facile à lire qu'un commentaire

  1. importer uniquement au hasard une fois, pas dans toutes les méthodes
  2. diceOne() et diceTwo() faire la même chose, donc il suffit de définir une méthode dice()
  3. retourner une valeur de dice(), pas attribuer dice() à random.randint()
  4. Vous pouvez appeler directement dice() dans votre déclaration d'impression

    import random 
    
    def dice(): 
        a = 1 
        b = 6 
        return random.randint(a, b) 
    
    def greeting(): 
        option = input('Enter Y if you would like to roll the dice: ') 
        if option == 'Y': 
        print('you have rolled a ' , dice(), 'and a ', dice()) 
    
    greeting() 
    
+0

Merci beaucoup !! Je comprends où je me suis trompé maintenant! – Bro

-1

Vous avez à return quelque chose de vos fonctions pour qu'ils aient une influence sur quoi que ce soit en dehors des fonctions elles-mêmes. Ensuite, dans votre fonction greeting() vous devez call les fonctions en appelant diceOne() au lieu de diceOne.

Essayez:

def diceOne(): 
    import random 
    a = 1 
    b = 6 
    return (random.randint(a, b)) 

def diceTwo(): 
    import random 
    a = 1 
    b = 6 
    return (random.randint(a, b)) 

def greeting(): 
    option = input('Enter Y if you would like to roll the dice: ') 
    if option == 'Y': 
     diceOne() 
     diceTwo() 
     print('you have rolled a: ' , diceOne(), 'and a' , diceTwo()) 

greeting() 
+1

copié directement à partir de mon éditeur de texte où cela fonctionne très bien. –

+0

jamais vous avez raison. ça a été foiré. Merci, je n'ai même pas remarqué. –