Python 使用return显示成绩
我编写了一个python代码,其中有一个函数,该函数将总分作为输入,并计算分数,我想知道我是否做得对,并在代码中正确使用了返回值: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+")
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在这样一个函数中打印几乎从来都不是一个好主意:输出和逻辑应该完全分开:一个函数用于计算成绩,另一个函数用于格式化成绩,第三个函数用于打印成绩。您的建议将混合所有三个步骤,或者至少第二步和第三步。这通常被认为是一种反模式。