我刚刚用 python 完成了我的石头剪刀布游戏。现在,用户必须在三个按钮之间进行选择,并将字符串 user1 设置为“Rock”、“Paper”或“Scissors”。
当我评估游戏时,代码只运行一些 if 语句,例如检查,

if computer == "Paper"

但是如果我想用我自己的物品稍微扩展游戏,那将是很多“if/else”。 Sow 我想我会给每个项目一个唯一的编号,这样我就可以使用这个编号而不必弄乱字符串。

我的老师给了我将两个整数相除以得出谁赢的提示。

但是在我考虑了一段时间之后,我没有找到关于如何做到这一点的任何解决方案。这只是关于这背后的逻辑,我不想要任何代码。

如何使用两个整数作为项目,通过一点数学找到获胜者?
谢谢!

最佳答案

假设我们正在实现普通的石头剪刀布,正如您在对问题的评论中所说的那样。让我们分配:

Rock:     0
Paper:    1
Scissors: 2

此答案假设您了解模运算符 ( % ),因此如果不了解,请先查看以了解其含义。我在这个答案中使用它,这样当我们将 1 添加到剪刀(即 2)时,您会得到 0 而不是 3,因为岩石是 0 并且没有数字 3 的项目。

通过将数字分配给选项,我们希望一个选择在另一个人的选择之后就赢,如果在它之前出现就输,如果他们相等则平局。例如,2 紧跟在 1 之后,所以剪刀胜过纸。我们将使用模运算符来确保我们的数字保持在 1 和 3 之间(包括 1 和 3)。

因此,如果您想确定玩家 1 是否获胜,您将检查他们的移动是否比玩家 2 的移动大 1。要判断他们是否打平,看看他们是否有相同的举动。如果这两者都不是真的,那么玩家 2 一定赢了。这是一个带有一些测试的示例实现:
>>> def winner(p1, p2):
...   if (p1+1) % 3 == p2:
...     return "Player 2 won because their move is one greater than player 1"
...   elif p1 == p2:
...     return "It's a draw because both players played the same move"
...   else:
...     return "Player 1 wins because we know that it's not a draw and that player 2 didn't win"
...
>>>
>>>
>>> rock = 0
>>> paper = 1
>>> scissors = 2
>>> winner(rock, paper)
'Player 2 won because their move is one greater than player 1'
>>> winner(paper, scissors)
'Player 2 won because their move is one greater than player 1'
>>> winner(scissors, rock)
'Player 2 won because their move is one greater than player 1'
>>> winner(rock, scissors)
"Player 1 wins because we know that it's not a draw and that player 2 didn't win"
>>> winner(paper, paper)
"It's a draw because both players played the same move"

现在在这个游戏中,数学规则是一个项目击败比它小的数字 1(模 3)的项目。如果您添加更多项目,您将需要提出一个数学规则来管理游戏的运作方式。一个例子(那不会很有趣)是保持这样的规则,即一件物品击败物品 1 的次数少于它(因此输给物品 1 的次数比它多),并且与任何其他物品并列,尽管这将是一个相当无聊的游戏。

希望回答有帮助!!祝你好运!

关于python - 石头剪刀布 - 从数学上获得胜利者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41457556/

10-12 18:36