python - 石头剪刀布 - 在数学上获得胜利

标签 python algorithm

我刚刚用 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"

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

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

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

相关文章:

java - 在 Java 中比较两个表列值

python - 如何在 Python 中将重音字符与正则表达式匹配?

python - 仅在生产中自定义模板标签的受限属性

c# - 如何获取多个类别的关键字匹配数?

c# bitarray 索引的正位

algorithm - 解决无可变性迷宫的最简单方法

Python:使用 pandas 导入 csv。尝试绘制一列,但出现错误,提示 "no numerical data to plot"

python - 如何在pyspark作业中为事件中心添加conf

python - 使用 Python 3 关闭/终止 Web 浏览器?

r - 是否有一种有效的算法来创建这种类型的时间表?