0

I have to make a dice game in Python, but I'm getting hung up on getting the functions to work properly.

from random import randint
def rollAll5Die():
 dice = []
 for c in range(0,5):
 dice.append(randint(1,6))
 return dice
def outputUpdate(oTitle, diceList):
 print(oTitle)
 print(diceList)
 print('')
def whichRoll():
 rollWhich = input("Enter dice/die you want to roll again--1 2 3 4 or 5: ")
 lRollAgain = rollWhich.split()
 print(lRollAgain)
 print('')
def rollSelected():
 for i in lRollAgain:
 rolledDice[int(i) - 1] = randint(1,6)
def dicePokerGame():
 keepPlaying = True
 while keepPlaying:
 isPlay = input('Please enter "y" if you want to play another round of the dice game or "q" if you want to quit game: ')
 print('')
 if isPlay == 'y':
 rolledDice = rollAll5Die()
 outputUpdate("Roll of five dice", rolledDice)
 nRollAgain = whichRoll()
 rollSelected()
 outputUpdate("Second Roll", rolledDice)
 nRollAgain = input("Enter Dice you want to roll for final roll: ")
 lRollAgain = nRollAgain.split()
 print(lRollAgain)
 print('')
 for i in lRollAgain:
 rolledDice[int(i) - 1] = randint(1,6)
 print("Final Roll")
 print(rolledDice)
 print('')
 #Score the hand Function
 counts = [0] * 7
 for value in rolledDice:
 counts[value] = counts[value] + 1
 if 5 in counts:
 score = "Five of a Kind", 30
 elif 4 in counts:
 score = "Four of a Kind", 25
 elif (3 in counts) and (2 in counts):
 score = "Full House", 15
 elif 3 in counts:
 score = "Three of a Kind", 10
 elif not (2 in counts) and (counts[1] == 0 or counts[6] == 0):
 score = "Straight", 20
 elif counts.count(2) == 2:
 score = "Two Pair", 5
 else:
 score = "No Winnings", 0
 print("Score")
 print(score)
 print('')
 else:
 keepPlaying = False
def main():
 dicePokerGame()
main()

When I run this program, it works properly until it gets to the function rollSelected() and gives me an error. The error says that lRollAgain is not defined in the rollSelected function.

Could somebody maybe explain why it says lRollAgain is not defined in the rollSelected functions? Because it is in the whichRoll function. I guess I just don't know what it's asking.

Blorgbeard
104k50 gold badges237 silver badges276 bronze badges
asked Sep 15, 2015 at 23:12
1
  • 2
    variables have "scope". Just because you defined a variable in one function, doesn't make it appear in other functions. You might need to pass lRollAgain as a parameter to rollSelected (like you do with oTitle and diceList for the outputUpdate function. Commented Sep 15, 2015 at 23:17

2 Answers 2

2

You are using your variables as if they are global. Albeit your syntax makes them local. (I propose to look up these terms.) As a result, they only exist within their narrow scope (e. g. the function they are used in). Setting a variable in one function and using it in another function does only work for global variables.

A quick solution would be to make all your variables global like this:

lRollAgain = None
def anyFunction():
 global lRollAgain
 # now use lRollAgain or assign a new value to it ...

A much better approach would be to learn about scopes, locals, and function arguments and return values. Then you should pass values from function to function via parameters and return values instead of doing so by global variables.

But StackOverflow is not a platform for teaching such elementary things, I'm sorry.

answered Sep 15, 2015 at 23:22
Sign up to request clarification or add additional context in comments.

Comments

0

It says that because IRollAgain is just a name for a variable. you declared it in the whichRoll function which means that it only means something in the whichRoll function. Since the rollSelected function is not in the whichRoll function, IRollAgain means nothing in rollSelected. You will have to declare it again as what you want it to be by passing in IRollAgain as an argument in the rollSelected function. ie

rollSelected(thisRoll)

EDIT:

I also think you mean your whichRoll function to look more like this:

def whichRoll():
 return input("Enter.... etc")

this way, you are returning the value that you input. I would also suggest a few checks to ensure the input is right

Blorgbeard
104k50 gold badges237 silver badges276 bronze badges
answered Sep 15, 2015 at 23:20

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.