首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >射箭目标python3中环的赋值

射箭目标python3中环的赋值
EN

Stack Overflow用户
提问于 2017-11-20 21:09:55
回答 2查看 64关注 0票数 0

我有一个射箭目标有5个环(或4个环和一个中心圆)。我得给每个戒指一个分数。得分为: 1-2-5-10-25。

在我听到具体分数之前,我做了一个函数,将分数分配给每个环:

代码语言:javascript
复制
def points(cDistance):
    for i in range(5):
        if i <= cDistance < i+1:
            return 10-2*i

注意: cDistance是从鼠标点击到目标中心的距离。每个环和中间圆的半径为1。编辑:这里返回的分数不是这个作业的正确分数。

我已经计算出环的分数乘以2,然后再乘以2.5。我不知道如何把这个整齐地放在一个循环中。我可以为每个戒指做一个if声明,但我认为这看起来很难看,我应该能够缩短它。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-20 22:19:39

这就是它应该发挥的作用:

代码语言:javascript
复制
def points(cDistance):
    if cDistance <= 5:
        return [25, 10, 5, 2, 1][math.floor(cDistance)]

如果cDistance小于1,则函数返回25,如果cDistance小于2,则返回10等等。

我必须添加if语句,否则如果在目标之外单击就会出现错误。现在,当单击目标外部时,它返回None。谢谢大家的帮助!

票数 0
EN

Stack Overflow用户

发布于 2017-11-20 22:09:02

在这种情况下,if -elif-.- There链没有什么特别的错误,特别是如果您想处理箭头落在目标之外的情况(这可能是其他部分)。

否则,索引数组如下:

代码语言:javascript
复制
score = [1, 2, 5, 10, 25][math.floor(cDistance)]

将其包装在try-except IndexError中,以处理更远距离的情况。如果您想一路走下去,首先可以确保cDistance始终为0或更高:

代码语言:javascript
复制
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(),对于不正确的距离使用默认值):

代码语言:javascript
复制
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)值完全相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47401104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档