StackOverflow的新功能所以请原谅我的错别字。我刚刚开始学习Python,因此当我练习编写一些代码时,我在脚本中遇到了这些非常不寻常的错误,它不应该存在。请帮助我理解为什么以及如何摆脱它。我尝试制作成绩计算器,这是我写的脚本:
def ComputeGrade(Score):
if score < 0 or score > 1:
print ("Bad Score")
elif score == 10.0:
print ("Bad Score")
elif score < 10.0:
print ("A")
elif score >= 0.8:
print ("B")
elif score >= 0.7:
print ("C")
elif score >= 0.6:
print ("D")
elif score < 0.6:
print ("F")
try:
score = float(input("Enter Score: "))
print (ComputeGrade(score))
except ValueError as e:
print ("Bad Score")
`不是将输出作为“等级”或错误消息“坏分数”仅,而是显示无值 如果你能向我解释究竟出了什么问题,那真是太好了。
答案 0 :(得分:3)
您的参数是以大写字母'S'表示的分数,而您使用的是小写字母''的变量分数。确保它们匹配或者将它们视为不同的变量。得分!=得分
如果你想要打印(ComputeGrade(score))来打印一个值,它需要在ComputeGrade()函数中返回一个值。即。
def printvalue():
return "VALUE"
print(printvalue()) #this prints out the returned value of printvalue()
答案 1 :(得分:1)
正如其他答案所说,你不需要第二次print
。只需调用函数:
ComputeGrade(score)
顺便说一下,这里显示的成绩计算器存在问题,因为所有有效成绩都会变成“A”,因为所有有效成绩都会达到第一个elif
声明且小于10 (这不应该是1.0而不是10?)。另外,A和B之间没有任何截止点(假设它应该是0.9?)。
建议:只要您发现自己使用了大量elif
语句,请考虑使用字典。字典允许您根据值“查找”某些内容。
它可能看起来像这样(因为变量区分大小写,我已将score
切换为小写):
def ComputeGrade(score):
grade_lookup = {
0<=score: "F",
0.6<=score: "D",
0.7<=score: "C",
0.8<=score: "B",
0.9<=score<=1.0: "A",
}
grade = grade_lookup.get(True, "Bad Score")
print(grade)
while True:
try:
score = float(input("Enter Score: "))
break
except ValueError:
print("Bad number entered; try again.")
ComputeGrade(score)
grade_lookup
字典评估每个大于语句并将其添加到字典中。如果greater-than语句为true,则会将True
作为键添加,如果为false则添加False
。由于字典一次只能有一个True
键,每次大于语句结果为真时,等级会更新(从F到A)。
然后字典get
方法查找与True
相关联的成绩。如果没有,则表示给出的分数不在0到1.0之间,并且不是有效分数。在这种情况下,get
方法会返回'Bad Score'
。
答案 2 :(得分:1)
再次,就像其他帖子所说,你有print
两次。此外,您的逻辑看起来并不正确,这里有一些供您参考:
def ComputeGrade(score):
if score > 0 and score <= 1:
if score < 0.6:
print("F")
elif score < 0.7:
print("D")
elif score < 0.8:
print("C")
elif score < 0.9:
print("B")
else:
print("A")
else:
print("Bad Score")
try:
score = float(input("Enter Score: "))
ComputeGrade(score)
except ValueError as e:
print ("Bad Score")
答案 3 :(得分:0)
欢迎使用股权溢价!
该行:
print (ComputeGrade(score))
实际上将功能的位置打印在内存中,而不是功能中的内容。由于您已经在ComputeGrade中打印,因此无需打印。
你可以:
让ComputeGrade返回一个字符串,然后打印
def ComputeGrade(score):
...
elif (score >= 0.8):
return "B"
...
print ComputeGrade(score)
或者您可以继续在函数本身中打印并删除ComputeGrade上的print语句:
ComputeGrade(score)