首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python代码迭代减法直到零

Python代码迭代减法直到零
EN

Stack Overflow用户
提问于 2022-06-16 23:44:11
回答 4查看 98关注 0票数 -1

新来的家伙。我是一个角色扮演游戏的极客,试图成为一个角色建设者。有四个属性(力量,敏捷,Wits和移情)。我试图将数字随机地分配给这些属性,但是您只需要得到8 (8)个总点数,所以在分配它们的编号时,您必须迭代地减去它们。这是我蹩脚的尝试。没起作用。我需要一个For循环吗?

代码语言:javascript
复制
import random

some_number = random.randint(1,8)
num_one = 8 - random.randint(1,some_number)
num_two = num_one - (random.randint(1,num_one))
num_three = num_two - (random.randint(1,num_two))
num_four = num_three - (random.randint(1,num_three))


print(num_one)
print(num_two)
print(num_three)
print(num_four)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-06-16 23:57:18

一个更简单的方法是在这4个统计数据中随机分配8个点:

代码语言:javascript
复制
import random

stats = [0,0,0,0]

for i in range(8):
    stats[random.randrange(4)] += 1

print(stats)

几次跑步:

代码语言:javascript
复制
[2, 3, 0, 3]
[1, 1, 4, 2]
[0, 2, 2, 4]
[2, 2, 2, 2]
[3, 1, 1, 3]
[0, 3, 4, 1]
[1, 2, 5, 0]
[4, 2, 2, 0]
[2, 3, 2, 1]
[3, 1, 3, 1]

如果你想喜欢上一门课的话:

代码语言:javascript
复制
import random

class Player:

    def __init__(self, name):
        self.name = name
        stats = [0,0,0,0]
        for i in range(8):
            stats[random.randrange(4)] += 1
        self.str, self.agi, self.wit, self.emp = stats

    def __repr__(self):
        return f'Player(name={self.name!r}, ST={self.str}, AG={self.agi}, WT={self.wit}, EM={self.emp})'

players = [Player(name) for name in ('Mark','Joe')]
print(players)

几次跑步:

代码语言:javascript
复制
[Player(name='Mark', ST=2, AG=3, WT=0, EM=3), Player(name='Joe', ST=2, AG=3, WT=0, EM=3)]
[Player(name='Mark', ST=1, AG=1, WT=4, EM=2), Player(name='Joe', ST=0, AG=2, WT=2, EM=4)]
[Player(name='Mark', ST=5, AG=1, WT=0, EM=2), Player(name='Joe', ST=3, AG=2, WT=2, EM=1)]
[Player(name='Mark', ST=3, AG=2, WT=3, EM=0), Player(name='Joe', ST=3, AG=3, WT=1, EM=1)]
[Player(name='Mark', ST=4, AG=2, WT=2, EM=0), Player(name='Joe', ST=3, AG=0, WT=2, EM=3)]
票数 4
EN

Stack Overflow用户

发布于 2022-06-16 23:57:56

有几种很好的方法来解决这个问题,但就我个人而言,我会使用一个list和一个for循环。

这段代码首先将所有的统计数据设置为0,然后循环8次,每次增加一个随机统计数据的点。在这段代码运行之后,stats[0]代表强度,stats[1]代表敏捷,等等。

代码语言:javascript
复制
import random
points = 8
stats = [0, 0, 0, 0]
for _ in range(points):
    stats[random.randint(0,len(stats)-1)] += 1
print(stats)
票数 2
EN

Stack Overflow用户

发布于 2022-06-16 23:57:37

您要做的是使用一个循环:

代码语言:javascript
复制
import random

total_points = 8
remaining = total_points

values = []
for i in range(3):
    value = remaining - random.randint(1, remaining)
    remaining = remaining - value
    values.append(value)
values.append(remaining)

这是通过声明一个名为remaining的值来实现的,我们将使用该值来保存仍然可以分配的点数。然后,对于循环的每一次迭代,我们通过从remaining中减去一个随机数来创建一个新值。然后,我们用我们计算的值重新分配remaining,这样我们就可以确保每一次连续的计算都会减少它。最后,我们将计算出来的值添加到列表中。最后,您将得到一个包含四个随机值的列表。

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

https://stackoverflow.com/questions/72652953

复制
相关文章

相似问题

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