Python整数到字母级别问题
我正在尝试对这段代码中的错误进行故障排除:Python整数到字母级别问题,python,if-statement,comparison,Python,If Statement,Comparison,我正在尝试对这段代码中的错误进行故障排除: import time while1 = True def grader (z): if z >= 0 or z <= 59: return "F" elif z >= 60 or z <= 62: return "D-" elif z >= 62 or z <= 66: return "D" elif z >= 67 or
import time
while1 = True
def grader (z):
if z >= 0 or z <= 59:
return "F"
elif z >= 60 or z <= 62:
return "D-"
elif z >= 62 or z <= 66:
return "D"
elif z >= 67 or z <= 69:
return "D+"
elif z >= 70 or z <= 62:
return "C-"
elif z >= 73 or z <= 76:
return "C"
elif z >= 77 or z <= 79:
return "C+"
elif z >= 80 or z <= 82:
return "B-"
elif z >= 83 or z <= 86:
return "B"
elif z >= 87 or z <= 89:
return "B+"
elif z >= 90 or z <= 92:
return "A-"
else:
return "A"
while while1:
z = int(input("I will tell you the grade of this number, enter from 1 - 100\n"))
if z < 0 or z > 100:
print "Between 1 and 100 PLEASE!\n"
while1 = True
print grader(z)
print "New number now\n"
time.sleep(100)
while1 = True
导入时间
while1=真
def分级器(z):
如果z>=0或z=60或z=62或z=67或z=70或z=73或z=77或z=80或z=83或z=87或z=90或z=100:
打印“请介于1和100之间!\n”
while1=真
打印分级器(z)
打印“立即输入新号码\n”
时间。睡眠(100)
while1=真
这种情况下的参数是整数z
z
的值由用户设置,然后该函数应该打开并确定z
的字母等级值,尽管它总是返回“F”
这让我很困惑(我是新手),我需要一些帮助。你的问题是:
if z >= 0 or z <= 59:
你的问题是:
if z >= 0 or z <= 59:
如果x>0或x<59将覆盖0以上的所有内容
你把OR和AND混淆了
如果x>0且x<59
仅在0到59之间
但可以更简洁地说
0
如果x>0或x<59
将覆盖0以上的所有内容
你把OR和AND混淆了
如果x>0且x<59
仅在0到59之间
但可以更简洁地说
0
你的或评分器中的应该是和s。任何大于0的输入都将通过第一个条件,因此将是F。您的或分级器中的应为和s。任何大于0的输入都将通过第一个条件,因此将是基于@Jon Clements(很棒)答案的F。,但我认为更容易理解:
def grade(score, breakpoints, grades):
for k, v in zip(breakpoints, grades):
if score > k:
return v
return 'Error'
grade(score, breakpoints=(90, 80, 70, 60, 0), grades=('A','B','C','D','E','F'))
基于@Jon Clements(很棒)的回答,但我认为更容易理解:
def grade(score, breakpoints, grades):
for k, v in zip(breakpoints, grades):
if score > k:
return v
return 'Error'
grade(score, breakpoints=(90, 80, 70, 60, 0), grades=('A','B','C','D','E','F'))
这一问题早已解决,但仍有几点需要解决:
无需反复设置while1=True
0是代码中的有效输入,但文本显示有效分数从1开始
一个完整的解决方案,再加上
import time
from bisect import bisect
def grader(score,
breakpoints=[60, 62, 67, 70, 73, 77, 80, 83, 87, 90, 93],
grades=['F', 'D-', 'D', 'D+', 'C-', 'C', 'C+', 'B-', 'B', 'B+', 'A-',
'A']):
i = bisect(breakpoints, score)
return grades[i]
while True:
z = int(input("I will tell you the grade of this number, enter from 1 - 100\n"))
if z < 0 or z > 100:
print "Between 0 and 100 PLEASE!\n"
continue
print grader(z)
time.sleep(100)
print "New number now\n"
导入时间
从对分导入对分
def分级器(分数,
断点=[60,62,67,70,73,77,80,83,87,90,93],
等级=['F','D-','D','D+','C-','C','C+','B-','B','B+','A-',
“A”]):
i=对分(断点、分数)
返回等级[i]
尽管如此:
z=int(输入(“我会告诉你这个数字的等级,从1到100输入”))
如果z<0或z>100:
打印“请介于0和100之间!\n”
持续
打印分级器(z)
时间。睡眠(100)
打印“立即输入新号码\n”
这一问题早已解决,但仍有几点需要解决:
无需反复设置while1=True
0是代码中的有效输入,但文本显示有效分数从1开始
一个完整的解决方案,再加上
import time
from bisect import bisect
def grader(score,
breakpoints=[60, 62, 67, 70, 73, 77, 80, 83, 87, 90, 93],
grades=['F', 'D-', 'D', 'D+', 'C-', 'C', 'C+', 'B-', 'B', 'B+', 'A-',
'A']):
i = bisect(breakpoints, score)
return grades[i]
while True:
z = int(input("I will tell you the grade of this number, enter from 1 - 100\n"))
if z < 0 or z > 100:
print "Between 0 and 100 PLEASE!\n"
continue
print grader(z)
time.sleep(100)
print "New number now\n"
导入时间
从对分导入对分
def分级器(分数,
断点=[60,62,67,70,73,77,80,83,87,90,93],
等级=['F','D-','D','D+','C-','C','C+','B-','B','B+','A-',
“A”]):
i=对分(断点、分数)
返回等级[i]
尽管如此:
z=int(输入(“我会告诉你这个数字的等级,从1到100输入”))
如果z<0或z>100:
打印“请介于0和100之间!\n”
持续
打印分级器(z)
时间。睡眠(100)
打印“立即输入新号码\n”
code-review-nitpick:如果有人错误地使用分级机,他们会得到A。如果输入不在1和100之间,您应该抛出一个错误或返回其他内容。z>=90或z在返回时,不需要elif
如果z和而while1
只是而True
。别隐瞒了。你不需要所有这些标志-只要使用中断
来完成循环。我不认为或
意味着你认为它的意思代码复查挑剔:如果有人错误地使用分级器,他们会得到A。如果输入不在1和100之间,你应该抛出一个错误或返回其他内容。z>=90或z返回
,不需要elif
如果z和而while1
只是而True
。别隐瞒了。你不需要所有这些标志-只要使用break
来完成循环。我不认为或意味着你认为它的意思。我怀疑这是一个任务,而不是现实生活。。。我怀疑老师会不会采取对分法。。。但是是的,一直都是+1same@JoranBeasley好吧,这是从文件中得到的,所以我希望学生能够阅读这些;)我想你应该注意可变的默认参数,或者简单地使用tuple
@Elazar,因为它没有变异-我真的不认为这有什么大不了的-而且因为我真的不希望使用它,这是OP目前可能不想向他们抛出的另一个概念,我怀疑这是一个任务,而不是现实生活。。。我怀疑老师会不会采取对分法。。。但是是的,一直都是+1same@JoranBeasley好吧,这是从文件中得到的,所以我希望学生能够阅读这些;)我认为您应该注意可变的默认参数,或者简单地使用tuple
@Elazar,因为它没有变异-我真的不认为这有什么大不了的-而且我真的不希望使用它,这是OP目前可能不想向他们提出的另一个概念,这是这是直接回答了为什么它总是F
+1直接回答了为什么它总是F
+1你应该把它划分成不同的等级,例如,A+
vsA
vsA-
@marcraughan这太冗长了。但是使用元组可以很容易地扩展它。你应该让它区分子等级,例如,A+
vsA
vsA-
@marcraughan,它太冗长了。但是使用元组,您可以轻松地扩展它。