# Scope of variables # As mentioned before, the "scope" of something is just # "where can this thing be accessed". # More detailed reading about scope: https://realpython.com/python-scope-legb-rule/ # Highly Recommended: Details about Mutable vs. Immutable # https://realpython.com/python-mutable-vs-immutable-types/ # Let's declare a couple global variables MAX_TEACHERS = 30 MAX_STUDENTS_PER_TEACHER = 25 # Let's create a couple functions to get values # This function makes use of the MAX_TEACHERS global variable # This is also an example of a "docstring". A docstring is text # that is displayed in the IDE and provides additional information # to the coder about what the function does and what it returns. def get_teacher_count() -> int: """ Returns the number of teachers at the school. Returns: int: The number of teachers as provided by user input. Value restricted to MAX_TEACHERS. """ count = 0 while count == 0: # Get a value from the user response = input(f"How many teachers at the school (1-{MAX_TEACHERS})? ") # If response is just a number if response.isdigit(): # Convert to an int count = int(response) # If count is out of range, show an error and reset count if count == 0 or count > MAX_TEACHERS: print(f" Error: Number of teachers must be greater than zero and no greater than {MAX_TEACHERS}!") count = 0 # Otherwise show an error else: print(f" Error: Please enter a value between 1 and {MAX_TEACHERS}!") return count # This function makes use of the MAX_STUDENTS_PER_TEACHER global variable # and is passed the number of teachers obtained from get_teacher_count() def get_student_count(teacher_count: int) -> int: """ Get the number of students at the school from user input. Number will be restricted to: * teacher_count at a minimum, * (teacher_count * MAX_STUDENTS_PER_TEACHER) as a maximum. Arguments: teacher_count (int): The number of teachers at the school. Returns: int: The number of students at the school. """ count = 0 # Can't have fewer students than teachers min_students = teacher_count # Can't have more than MAX_STUDENTS_PER_TEACHER average max_students = teacher_count * MAX_STUDENTS_PER_TEACHER while count == 0: response = input(f"How many students at the school ({min_students}-{max_students})? ") if response.isdigit(): count = int(response) if count < min_students or count > max_students: print(f" Error: Number of teachers must be between {min_students} and {max_students}!") count = 0 else: print(f" Error: Please enter a value between {min_students} and {max_students}!") return count # Some program logic teachers = get_teacher_count() students = get_student_count(teachers) print() print(f"Teachers: {teachers}") print(f"Students: {students}") print("Average class size: " + str(students // teachers))