我有一个射箭目标有5个环(或4个环和一个中心圆)。我得给每个戒指一个分数。得分为: 1-2-5-10-25。
在我听到具体分数之前,我做了一个函数,将分数分配给每个环:
def points(cDistance):
for i in range(5):
if i <= cDistance < i+1:
return 10-2*i注意: cDistance是从鼠标点击到目标中心的距离。每个环和中间圆的半径为1。编辑:这里返回的分数不是这个作业的正确分数。
我已经计算出环的分数乘以2,然后再乘以2.5。我不知道如何把这个整齐地放在一个循环中。我可以为每个戒指做一个if声明,但我认为这看起来很难看,我应该能够缩短它。提前谢谢。
发布于 2017-11-20 22:19:39
这就是它应该发挥的作用:
def points(cDistance):
if cDistance <= 5:
return [25, 10, 5, 2, 1][math.floor(cDistance)]如果cDistance小于1,则函数返回25,如果cDistance小于2,则返回10等等。
我必须添加if语句,否则如果在目标之外单击就会出现错误。现在,当单击目标外部时,它返回None。谢谢大家的帮助!
发布于 2017-11-20 22:09:02
在这种情况下,if -elif-.- There链没有什么特别的错误,特别是如果您想处理箭头落在目标之外的情况(这可能是其他部分)。
否则,索引数组如下:
score = [1, 2, 5, 10, 25][math.floor(cDistance)]将其包装在try-except IndexError中,以处理更远距离的情况。如果您想一路走下去,首先可以确保cDistance始终为0或更高:
scores = [1, 2, 5, 10, 25]
dist = max(0, cDistance)
dist = math.floor(dist)
try:
score = scores[dist]
except IndexError:
score = 0或者您也可以使用dict ( dict可以使用整数键,因此它与数组几乎相同,但可以使用get(),对于不正确的距离使用默认值):
scores = {0: 1, 1: 2, 2: 5, 3: 10, 4: 25}
dist = max(0, cDistance)
dist = math.floor(dist)
score = scores.get(dist, 0)注意:对于正值,int(dist)的值(和类型)与math.floor(dist)值完全相同。
https://stackoverflow.com/questions/47401104
复制相似问题