【问题标题】:python for loops being started at 1st element no 0th elementpython for循环从第一个元素开始,没有第0个元素
【发布时间】:2020-06-12 21:40:32
【问题描述】:

我正在使用 Python(在 PyCharm 上运行)编写一个简单的基于文本的 RPG 战斗模拟器。我创建了一个名为 Person 的类,其初始化参数如下:

def __init__(self, name, HP, MP, ATK, DEF, magic, items):
    self.name = name
    self.HP = HP
    etc...

这个类在main 中为 3 个唯一的玩家 (player1, player2, player3) 实例化了 3 次。我还有一个函数get_stats(self)

print(self.name + ", HP: " + self.HP + ", MP: " + self.MP)

但是当我在main运行时

for player in players:
    player.get_stats()

players = {player1, player2, player3},我得到输出(注意 MP/HP 值是任意的):

name2, HP: 200, MP: 200
name3, HP: 300, MP: 300
name1, HP: 100, MP: 100

如果players = {player0, player1, player2, player3},我得到输出:

name2, HP: 200, MP: 200
name3, HP: 300, MP: 300
name0, HP: 400, MP: 400
name1, HP: 100, MP: 100

为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 套装未排序。
  • 问题是什么?
  • link完整代码抄本供参考

标签: python arrays for-loop pycharm


【解决方案1】:

{}在python中创建一个set,它是无序的:元素没有按输入的方式存储。

你需要一个列表,可以这样创建:

players = [player1, player2, player3]

或者一个元组:

players = (player1, player2, player3)

【讨论】:

  • 啊!非常感谢!我使用 C/C++ 时的一次挂断
【解决方案2】:

您正在使用 {} 语法,该语法适用于 Python 中的 sets。集合没有顺序,在for 语句中使用时会随机产生其成员。

只需保持一致并使用(Player0, ...) 表示元组,或使用[Player0, ...] 表示列表 - 这两种类型都是“序列”,具有明确定义的顺序。

【讨论】:

    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2017-01-20
    相关资源
    最近更新 更多