【问题标题】:using return to show grades使用 return 显示成绩
【发布时间】:2021-03-25 14:56:23
【问题描述】:

我写了一个 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())

【问题讨论】:

  • 我觉得没问题,虽然不需要括号。
  • @Llna 之后,而不是之前。
  • 我会说这取决于您的功能的性质。如果您打算仅将其用于打印成绩,我会将 return("text") 替换为 print("text")。否则我认为没有问题。此外,您可以将“Your Grade is:”定义为变量,然后在每次返回/打印字符串时重用它。记住 DRY 原则——不要重复自己。
  • @MikaelsSlava 在这样的函数中打印几乎永远不会是一个好主意:输出和逻辑应该完全分开:一个函数来计算成绩,另一个函数来格式化它们,a第三个打印它们。您的建议将混合所有三个步骤,或者至少是第二步和第三步。这通常被认为是一种反模式。

标签: python function return


【解决方案1】:

返回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}")

请注意,这消除了很多复制和粘贴——文本 Your Grade is: 不需要在函数内重复,因为现在调用者负责将字母等级格式化为用户的最终消息。

以这种方式构建代码还可以更容易地测试:

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

【讨论】:

    【解决方案2】:

    是的,它做得对。 return 用于函数,干得好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 2021-04-19
      • 1970-01-01
      相关资源
      最近更新 更多