2016-02-02 4 views
2

Я создаю простую систему регистрации. Как мне получить оценки от моей функции get_grade_points(): для переноса в мою функцию check_graduation():?Ошибка параметров функции - отсутствует 1 требуемый позиционный аргумент

Вот код:

CS100 = 'CS100 - Introduction to Programming' 
CS200 = 'CS200 - Advanced Programming' 
CS300 = 'CS300 - Super Advanced Programming' 

student_name = input('What is the students name?') 

def main(): 
    prompt1 = input('Has the student taken CS100? (enter y or n)') 
    if prompt1 == 'n': 
    print('The student needs to take all three CS courses') 
    total_courses = 1 

def is_course_taken(): 
    prompt2 = input('Has the student taken CS200(enter y or n)') 
    if prompt2 == 'n': 
     print('The student needs to take all three classes') 
     total_courses = 2 

    prompt3 = input('Has the student taken?(enter y or n)') 
    if prompt3 == 'n': 
     print('The student needs to take all three classes') 
     total_courses = 3 

    def get_grade_points(): 
    A = 4 
    B = 3 
    C = 2 
    D = 1 
    F = 0 
    grade1 = input('What grade did the student recieve in CS100?' \ 
        '(enter letter grade)') 
    grade2 = input('What grade did the student recieve in CS200?' \ 
        '(enter letter grade)') 
    grade3 = input('What grade did the student recieve in CS300?' \ 
        '(enter letter grade)') 

def check_graduation(grade1, grade2, grade3): 
    gpa = (grade1 * grade2 * grade3) // 3 
    if gpa >= 2.5: 
     print('Graduation approved') 
    else: 
     print('Graduation not approved, GPA too low') 

    print(student_name) 
    print(total_courses) 
    print(gpa) 

main() 

is_course_taken() 

get_grade_points() 

check_graduation() 

Я не могу понять, как получить имя студенты с самого начала и как получить оценки, чтобы умножать и рассчитать средний балл.

Если изменить функцию следующим образом:

def check_graduation(student_name, grade1, grade2, grade3) 

интерпретатор Python дает мне:

TypeError: check_graduation() missing 1 required positional argument: 'get_grade_points' 

ответ

3

Я вижу 2 вещи сразу.

Первый - get_grade_points - с отступом неправильно. Я не уверен, как найти что-нибудь для этого, не говоря уже об ошибках. Может быть, код не имеет отступов так же, как в редакторе кода?

Вторая, последняя строка, check_graduation() не передает никаких аргументов check_graduation. Вы, вероятно, хотите, чтобы вызвать его, используя check_graduation(grade1, grade2, grade3)

Я бы переписать код следующим образом:

CS100 = 'CS100 - Introduction to Programming' 
CS200 = 'CS200 - Advanced Programming' 
CS300 = 'CS300 - Super Advanced Programming' 


def main(): 
    student_name = input('What is the students name?') 
    prompt1 = input('Has the student taken CS100? (enter y or n)') 
    if prompt1 == 'n': 
     print('The student needs to take all three CS courses') 
    total_courses = 1 
    return total_courses, student_name 

def is_course_taken(): 
    prompt2 = input('Has the student taken CS200(enter y or n)') 
    if prompt2 == 'n': 
     print('The student needs to take all three classes') 
     total_courses = 2 

    prompt3 = input('Has the student taken?(enter y or n)') 
    if prompt3 == 'n': 
     print('The student needs to take all three classes') 
     total_courses = 3 
    return total_courses 

def get_grade_value(grade_string): 
    if grade_string == 'A': 
     return 4.0 
    elif grade_string == 'B': 
     return 3.0 
    elif grade_string == 'C': 
     return 2.0 
    elif grade_string == 'D': 
     return 1.0 
    elif grade_string == 'F': 
     return 0.0 
    return None 

def get_grade_points(): 
    grade1 = None 
    while grade1 is None: 
     g1_str = input('What grade did the student recieve in CS100?' \ 
         '(enter letter grade)') 
     grade1 = get_grade_value(g1_str) 
    #Repeat updates for other grades as well 
    grade2 = input('What grade did the student recieve in CS200?' \ 
        '(enter letter grade)') 
    grade3 = input('What grade did the student recieve in CS300?' \ 
        '(enter letter grade)') 
    return grade1, grade2, grade3 

def check_graduation(grade1, grade2, grade3, total_courses): 
    gpa = (grade1 * grade2 * grade3) // 3 
    if gpa >= 2.5: 
     print('Graduation approved') 
    else: 
     print('Graduation not approved, GPA too low') 

    print(student_name) 
    print(total_courses) 
    print(gpa) 


total_courses, student_name = main() 
#TODO: Put all course questions into is_course_taken function 
total_courses = is_course_taken() 
grade1, grade2, grade3 = get_grade_points() 
check_graduation(grade1, grade2, grade3, total_courses) 

Таким образом get_grade_points возвращает ранги, и check_graduation получает их в качестве входов для проверки

EDIT: Вы также хотите вернуть total_courses. Я бы также не сделал student_name глобальным - это часто приводит к ошибкам, когда вы неожиданно используете неправильную переменную.

EDIT 2: Показать пример кода, который преобразует ввод строки в числовое значение.

+0

Я пропустил это. Он получает вход, который является просто строкой ввода пользователем. Это не преобразование строк в числа. –

1

Как работают параметры, вы используете их во время выполнения кода. Например:

def printHello(stuff): 
    print('Hello' + stuff) 
def main(): 
    printHello(world!) 
main() 

возвращает Hello world! Кроме того, переменные являются локальными (остаются внутри функции), если не указано иное. Например:

def defineX(): 
    x = 10 
defineX() 
print(x) 

сообщит вам, что x не определено. Чтобы этого избежать, поставьте global x прямо ниже, когда вы определяете свою функцию. Вы также можете в конце функции положить return x. Кроме того, убедитесь, что вы положили правильный отступ!

Смежные вопросы