Python整数到字母级issu

2024-04-29 04:09:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图排除这段代码中的错误:

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

这种情况下的参数是整数zz的值是由用户设置的,然后函数应该摆入并确定字母等级z值多少,尽管它总是返回'F.'

这对我(我是个新手)来说相当迷惑,我需要一些帮助。在


Tags: or代码importtruenumberreturniftime
3条回答

你的问题是:

if   z >= 0 or z <= 59:

使用:

^{pr2}$

这缓解了使用or而不是and的问题,而且可读性更强。在

但是您应该看看bisect模块:

>>> def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
        i = bisect(breakpoints, score)
        return grades[i]

>>> [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
['F', 'A', 'C', 'C', 'B', 'A', 'A']

您在grader中的or应该是ands。任何大于0的输入都将传递第一个条件,因此也是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'))

相关问题 更多 >