python初学者,如果政治家

2024-04-25 08:09:08 发布

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

score = raw_input("Enter a score between 0.0 and 1.0:")

float(score)

#if score < 0.0:
    #print "Invalid input."
    #exit

#elif score > 1.0:
    #print "Invalid input."
    #exit

if score >= .9:
    print "A"

elif score >= .8:
    print "B"

elif score >= .7:
    print "C"

elif score >= .6:
    print "D"

elif score < .6:
    print "F"

else:
    print "Invalid input."

我在上面的python代码中遇到了问题;我的初始if语句似乎有问题,但我似乎不知道是什么。不管我用什么输入测试它,它总是返回A作为输出。任何关于我做错了什么的提示都是很好的,很抱歉问了这么简单的问题,但我刚刚开始学习python,我已经盯着这段代码看了一个多小时了,我一辈子都搞不明白为什么它不起作用。非常感谢。你知道吗


Tags: and代码inputrawifexit语句between
3条回答

这实际上并没有将变量score更改为float

float(score)

你必须把它分配回score

score = float(score)

或者在输入变量时这样做

score = float(raw_input("Enter a score between 0.0 and 1.0:"))

再把那个值存到分数里。你知道吗

 score = float(score)

您需要将float()调用的返回值back赋给score

score = float(score)

score开始时是一个字符串,一个不可变的对象,它不会被就地转换。float()返回一个新的浮点对象,您将忽略该返回值。你知道吗

您可以使用^{} module将值映射到字母,而不是使用5if语句:

import bisect

score = float(raw_input("Enter a score between 0.0 and 1.0:"))

scores = [0, .6, .7, .8, .9]
grades = ['F', 'D', 'C', 'B', 'A']

print grades[bisect.bisect(scores, score) - 1]

对于任何给定的分数,bisect.bisect()会将插入点返回到scores列表中最接近的较低或相等的值之后;因此对于.9它会返回5,在末尾插入值,但是对于从0到(但不包括)0.6的任何值,它会返回1。你知道吗

然后你所要做的就是减去1,然后使用相同的索引进入grades列表,得到相应的分数。你知道吗

演示:

>>> import bisect
>>> scores = [0, .6, .7, .8, .9]
>>> grades = ['F', 'D', 'C', 'B', 'A']
>>> bisect.bisect(scores, .75)
3
>>> grades[bisect.bisect(scores, .75) - 1]
'C'
>>> grades[bisect.bisect(scores, .25) - 1]
'F'
>>> grades[bisect.bisect(scores, .9) - 1]
'A'

相关问题 更多 >