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+
    vs
    A
    vs
    A-
    @marcraughan这太冗长了。但是使用元组可以很容易地扩展它。你应该让它区分子等级,例如,
    A+
    vs
    A
    vs
    A-
    @marcraughan,它太冗长了。但是使用元组,您可以轻松地扩展它。