简体   繁体   中英

error in Python: Global name not defined

I keep getting error global name not defined "sizeGreater".

Here is my program that I've come up with so far:

import random

def main():
    another = 'y'

    while another == 'y' or another == 'Y':
        again = raw_input("Would you like to generate 1000 random numbers? (Enter y for yes and n for no)")

        generate_numbers()
        difference_numbers(sizeGreater, sizeLess)


def generate_numbers(): 
    numbers = []
    for value in range (1000):
       numbers.append(random.randint(1,100))
    print (numbers)

    numbers2 = [i for i in numbers if i>=50]

    sizeGreater = len(numbers2)
    print ("The numbers at or above fifty are:", sizeGreater)

    numbers3 = [i for i in numbers if i <=50]

    sizeLess = len(numbers3)
    print ("The numbers at or below fifty are:", sizeLess)

    return sizeLess
    return sizeGreater

def difference_numbers(sizeGreater, sizeLess):

    total = sizeGreater - sizeLess
    print total


main()

You haven't assigned the variables when you call generate_numbers() . Also, your return statements don't do what you think they do.

Instead, do sizeLess, sizeGreater = generate_numbers() and make generate_numbers() return return (sizeLess, sizeGreater) (a tuple).

So, now you unpack the tuple that is returned from generate_number() by setting them again. You can then call difference_numbers with the newly assigned variables:

import random

def main():
    another = 'y'

    while another == 'y' or another == 'Y':
        again = raw_input("Would you like to generate 1000 random numbers? (Enter y for yes and n for no)")

        sizeLess, sizeGreater = generate_numbers() #unpack the tuple
        difference_numbers(sizeGreater, sizeLess)


def generate_numbers(): 
    numbers = []
    for value in range (1000):
       numbers.append(random.randint(1,100))
    print (numbers)

    numbers2 = [i for i in numbers if i>=50]

    sizeGreater = len(numbers2)
    print ("The numbers at or above fifty are:", sizeGreater)

    numbers3 = [i for i in numbers if i <=50]

    sizeLess = len(numbers3)
    print ("The numbers at or below fifty are:", sizeLess)

    return (sizeLess, sizeGreater) #return a tuple

def difference_numbers(sizeGreater, sizeLess):

    total = sizeGreater - sizeLess
    print total


main()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM