0

I'm new to programming and I'm working on a program that I want to use variables from another function. I understand you can't use local variables from another function, so I added a new variable in the main function to create a copy of the variable for the next function to use. The problem is that when I use BirthYear = get_Input() in the main function, it repeats the get_Input function aswell, creating 2 input prompts. Is there any way to return a variable and pull it into the next function without having to repeat my input function? I have read many articles on StackOverflow that say to use classes(I don't want to use classes) and to call the input function within my Calculations function, but I still get prompted for 2 copies of input there too.

I am also getting this error when trying to pass a variable to a function from the main. TypeError: get_Calculations() missing 1 required positional argument: 'BirthYear'

Here is my Code:

# Declare variables: name, data type and purpose
MinYear = 0 # integer, start year in zodiac table
MaxYear = 0 # integer, final year in zodiac table
BirthYear = 0 # integer, year of birth entered by user
Index = 0 # integer, calculated position (column) in zodiac table
Prompt = "" # string, used to build input prompts
Sign = "" # string, calculated zodiac sign
AnimalsOfZodiac = [""] # list of zodiac signs
Result = "" # string, holds output

# list of zodiac signs in chronological order
AnimalsOfZodiac = ["Rat","Ox","Tiger","Rabbit","Dragon","Snake","Horse","Sheep","Monkey","Rooster","Dog","Pig"]

# Display name of program, any instructions
def get_Instructions():
    print("Chinese Zodiac Calculator")
    print("Find the Chinese zodiac sign for birth years between 1924 and 2031\n")

# Input: get values
MinYear = 1924
MaxYear = 2031

def get_Input():
    Prompt = "Enter a birth year between " + str(MinYear) + " and " +\
              str(MaxYear) + ": "
    BirthYear = int(input(Prompt))
    while BirthYear < MinYear or BirthYear > MaxYear:
        print("Invalid Birth year.")
        BirthYear = int(input(Prompt))

    return BirthYear

# Processing: carry out calculations
def get_Calculations(BirthYear):
    Index = (BirthYear - MinYear) % 12
    Sign = AnimalsOfZodiac[Index]

    return Sign

# Output: report result(s)
def get_Results(SignCopy, BirthYear):
    print("A person born in " + str(BirthYear) +\
    " was born under the sign of the " + Sign + ".")

def Main():

    get_Instructions()
    get_Input()
    BirthYear = get_Input()
    get_Calculations(BirthYear)
    SignCopy = get_Calculations()
    get_Results(SignCopy, BirthYear)

Main()

3 Answers 3

1

3 Simple changes to your code. comment out line's 48 and 50, and change the Sign variable in 43 to SignCopy.

Making your code:

# Declare variables: name, data type and purpose
MinYear = 0 # integer, start year in zodiac table
MaxYear = 0 # integer, final year in zodiac table
BirthYear = 0 # integer, year of birth entered by user
Index = 0 # integer, calculated position (column) in zodiac table
Prompt = "" # string, used to build input prompts
Sign = "" # string, calculated zodiac sign
AnimalsOfZodiac = [""] # list of zodiac signs
Result = "" # string, holds output
# list of zodiac signs in chronological order
AnimalsOfZodiac = ["Rat","Ox","Tiger","Rabbit","Dragon","Snake","Horse","Sheep","Monkey","Rooster","Dog","Pig"]
# Display name of program, any instructions
def get_Instructions():
    print("Chinese Zodiac Calculator")
    print("Find the Chinese zodiac sign for birth years between 1924 and 2031\n")
# Input: get values
MinYear = 1924
MaxYear = 2031
def get_Input():
    Prompt = "Enter a birth year between " + str(MinYear) + " and " +\
              str(MaxYear) + ": "
    BirthYear = int(input(Prompt))
    while BirthYear < MinYear or BirthYear > MaxYear:
        print("Invalid Birth year.")
        BirthYear = int(input(Prompt))
    return BirthYear
# Processing: carry out calculations
def get_Calculations(BirthYear):
    Index = (BirthYear - MinYear) % 12
    Sign = AnimalsOfZodiac[Index]
    return Sign
# Output: report result(s)
def get_Results(SignCopy, BirthYear):
    print("A person born in " + str(BirthYear) +\
" was born under the sign of the " + SignCopy + ".")
def Main():
    get_Instructions()
    #get_Input()
    BirthYear = get_Input()
    #get_Calculations(BirthYear)
    SignCopy = get_Calculations(BirthYear)
    get_Results(SignCopy, BirthYear)
Main()
Sign up to request clarification or add additional context in comments.

Comments

0

If you assign the return value of get_Input to a variable named BirthYear in main(), you do not need to call get_Input() twice.

You then need to pass BirthYear to get_Calculations()

def Main():

    get_Instructions()
    BirthYear = get_Input()
    get_Calculations(BirthYear)
    SignCopy = get_Calculations(BirthYear)
    get_Results(SignCopy, BirthYear)

2 Comments

Thank you! it worked! I am new to python and I couldn't find a well written tutorial on functions.. I'll have to see if I can find a website that has a better explanation than my textbook. I appreciate your help!
glad I could help; here are good resources for self learning: diveintopython3.net/table-of-contents.html , and here too: python-course.eu/python3_course.php
0

Your problem is that you are calling the same function twice, for some reason.

def Main():

    get_Instructions()
    # get_Input() - no need for this
    BirthYear = get_Input()
    SignCopy = get_Calculations(BirthYear)
    # SignCopy = get_Calculations() - no need for this
    get_Results(SignCopy, BirthYear)

Comments

Your Answer

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.