0

I have to design the following program: design a program with a loop that lets the user enter a series of numbers. the user should enter -99 to signal the end of the series. After all the numbers have been entered, the program should display the largest and the smallest number entered.

This is what I have gotten so far:

def main():
    inputNum = 0
    largest = 1
    smallest = 10000
    while inputNum != -99:
        inputNum = int(input("enter a number"))
        if inputNum == -99:
            break
        lgsm(inputNum, largest, smallest)
    print("The largest value is",largest, "the smallest value is",smallest)


def lgsm(inputNum, largest, smallest):
    if inputNum > largest:
        largest = inputNum

    elif inputNum < smallest:
        smallest = inputNum
main()

When I try to run it the values for smallest and largest remain the same I don't really know what to do from here

Expected output:

enter a number 1

enter a number 2

enter a number 5

enter a number 6

enter a number -99

The largest value is 1 the smallest value is 10000

WhatsThePoint
  • 3,395
  • 8
  • 31
  • 53

1 Answers1

0

Python does not use "call by reference", but "call by assignment". That means that the variables you've changed within the scope of lgsm are not passed to the outer scope of main automatically. To do so, you should return the changed values:

def main():
    inputNum = 0
    largest = 1
    smallest = 10000
    while inputNum != -99:
        inputNum = int(input("enter a number"))
        if inputNum == -99:
            break
        largest, smallest = lgsm(inputNum, largest, smallest)
    print("The largest value is",largest, "the smallest value is",smallest)


def lgsm(inputNum, largest, smallest):
    if inputNum > largest:
        largest = inputNum

    elif inputNum < smallest:
        smallest = inputNum
    return (largest, smallest)
main()
Nico Haase
  • 11,420
  • 35
  • 43
  • 69