0
ChainNumber = 0
StartingNumber = 0
HighestNumber = 0
SequenceNumber = 0
def runSequence(startingNumber):
    StartingNumber = startingNumber
    if StartingNumber%2 == 0:
        StartingNumber = SequenceNumber/2
        ChainNumber += 1
    else:
        StartingNumber = SequenceNumber*3+1
        ChainNumber += 1
    while not(SequenceNumber == 1):
        if SequenceNumber%2 ==0:
            SequenceNumber = SequenceNumber/2
            ChainNumber += 1
        else:
            SequenceNumber = SequenceNumber*3
            ChainNumber += 1
def testHighest():
    if HighestNumber <= ChainNumber:
        HighestNumber = ChainNumber
x = 2
while x <= 1000000:
    runSequence(x)
    testHighest()

The error

Traceback (most recent call last):
  File "C:/Users/augus/PycharmProjects/untitled/train.py", line 26, in <module>
    runSequence(x)
  File "C:/Users/augus/PycharmProjects/untitled/train.py", line 8, in runSequence
    StartingNumber = SequenceNumber/2
UnboundLocalError: local variable 'SequenceNumber' referenced before assignment
tdelaney
  • 73,364
  • 6
  • 83
  • 116
auugst
  • 1
  • 1
    Does this answer your question? [Using global variables in a function](https://stackoverflow.com/questions/423379/using-global-variables-in-a-function) – pppery Jun 10 '20 at 22:04
  • Where have you added SequenceNumber?? Add these inside your function block """ ChainNumber = 0 StartingNumber = 0 HighestNumber = 0 SequenceNumber = 0""" – High-Octane Jun 10 '20 at 22:38

1 Answers1

1

You assign sequence_number in the function. During compilation, python makes this a local variable, masking the like-named global variable defined outside of the function. If you want the assignment

SequenceNumber = SequenceNumber/2

to update the global variable, declare it global in the function.

ChainNumber = 0
StartingNumber = 0
HighestNumber = 0
SequenceNumber = 0
def runSequence(startingNumber):
    global SequenceNumber
    StartingNumber = startingNumber
    if StartingNumber%2 == 0:
        StartingNumber = SequenceNumber/2
        ChainNumber += 1
    else:
        StartingNumber = SequenceNumber*3+1
        ChainNumber += 1
    while not(SequenceNumber == 1):
        if SequenceNumber%2 ==0:
            SequenceNumber = SequenceNumber/2
            ChainNumber += 1
        else:
            SequenceNumber = SequenceNumber*3
            ChainNumber += 1
def testHighest():
    if HighestNumber <= ChainNumber:
        HighestNumber = ChainNumber
x = 2
while x <= 1000000:
    runSequence(x)
    testHighest()
tdelaney
  • 73,364
  • 6
  • 83
  • 116