Python 使用return显示成绩

Python 使用return显示成绩,python,function,return,Python,Function,Return,我编写了一个python代码,其中有一个函数,该函数将总分作为输入,并计算分数,我想知道我是否做得对,并在代码中正确使用了返回值: def get_grades(): marks = round(float(input('Your Current Marks: '))) if marks in range(0,101): if marks >=90: return("Your Grade is: A+")

我编写了一个python代码,其中有一个函数,该函数将总分作为输入,并计算分数,我想知道我是否做得对,并在代码中正确使用了返回值:

def get_grades():
    marks = round(float(input('Your Current Marks: ')))
    if marks in range(0,101):
        if marks >=90:
            return("Your Grade is: A+")
        elif marks >=86:
            return("Your Grade is: A")
        elif marks >=82:
            return("Your Grade is: A-")
        elif marks >=78:
            return("Your Grade is: B+")
        elif marks >=74:
            return("Your Grade is: B")
        elif marks >=70:
            return("Your Grade is: B-")
        elif marks >=66:
            return("Your Grade is: C+")
        elif marks >=62:
            return("Your Grade is: C")
        elif marks >=58:
            return("Your Grade is: C-")
        elif marks >=54:
            return("Your Grade is: D+")
        elif marks >=50:
            return("Your Grade is: D")
        else:
            return("Your Grade is: F")
    else:
        return("sorry, your input is out of range")
print(get_grades())

是的,做对了
return
用于函数,做得很好。

返回
print
调用所需的结果是正确的,但请注意,函数不将标记作为输入(在函数将参数作为输入并将结果作为输出返回的意义上)。以下是如何构造函数,使其将标记作为输入,并返回等级(且仅返回等级)作为其输出:

def get_grade(marks: int) -> str:
    """Given marks from 0 to 100, return a letter grade from F to A+."""
    if marks not in range(0, 101):
        raise ValueError(f"{marks} is out of range (expected 0-100)")
    if marks >= 90:
        return "A+"
    if marks >= 86:
        return "A"
    if marks >= 82:
        return "A-"
    if marks >= 78:
        return "B+"
    if marks >= 74:
        return "B"
    if marks >= 70:
        return "B-"
    if marks >= 66:
        return "C+"
    if marks >= 62:
        return "C"
    if marks >= 58:
        return "C-"
    if marks >= 54:
        return "D+"
    if marks >= 50:
        return "D"
    return "F"


try:
    grade = get_grade(round(float(input('Your Current Marks: '))))
    print(f"Your Grade is: {grade}")
except ValueError as e:
    print(f"Sorry, invalid input!  {e}")
请注意,这消除了大量的复制和粘贴--文本
您的等级是:
不需要在函数中重复,因为现在调用者负责将字母等级格式化为用户的最终消息

以这种方式构造代码也使测试更容易:

assert get_grade(90) == "A+"
assert get_grade(10) == "F"
assert get_grade(77) == "B"
try:
    get_grade(-42)
    raise AssertionError("get_grade should raise on invalid input")
except ValueError:
    pass

我同意,虽然不需要妄想症。@Llna之后,而不是之前。我会说这取决于你函数的性质。如果你打算只在打印成绩时使用它,我会用打印(“文本”)替换返回(“文本”)。否则我看没问题。此外,您可以将“您的成绩是:”定义为一个变量,然后在每次返回/打印字符串时重新使用它。记住枯燥的原则-不要重复。@MikaelsSlava在这样一个函数中打印几乎从来都不是一个好主意:输出和逻辑应该完全分开:一个函数用于计算成绩,另一个函数用于格式化成绩,第三个函数用于打印成绩。您的建议将混合所有三个步骤,或者至少第二步和第三步。这通常被认为是一种反模式。