【问题标题】:Random Dice Roll Game in PythonPython中的随机骰子游戏
【发布时间】:2016-05-07 19:20:21
【问题描述】:

所以我查看了所有相关问题,但似乎找不到特定于我的程序的答案。我必须有两个玩家骰子游戏,滚动一个随机数并宣布获胜者。截至目前,当程序运行时,它会说: 获胜者是: 输入玩家 1 的姓名: 输入玩家 2 姓名:

这是我的代码:

import random

def main():
    print "You are now playing Dice Roll!!"

endProgram = 'no'
playerOne = 'NO NAME'
playerTwo = 'NO NAME'

playerOne, playerTwo = inputNames(playerOne, playerTwo)

while endProgram == 'no':
    winnnerName = 'NO NAME'
    p1number = '0'
    p2number = '0'

    playerOne,playerTwo = inputNames(playerOne,playerTwo)
    winnerName =()

winnerName = rollDice(p1number, p2number, playerOne, playerTwo, winnerName)

displayInfo = winnerName


endProgram = raw_input('Do you want to end program? (Enter yes or no): ')

def inputNames(playerOne,playerTwo):
    playerOne = raw_input('Enter player one name:')
    playerTwo = raw_input('Enter player two name:')
    return playerOne, playerTwo


def rollDice(p1number, p2number, playerOne, playerTwo, winnerName):
    p1number = random.randint(1,6)
    p2number = random.randint(1,6)

if p1number == p2number:
    print "TIE!!!!"
elif p1number > p2number:
    print winnnerName
else:
    p1number < p2number
    print winnnerName

return winnerName

print "The winner is:",winnerName

main()

我不是在寻找答案,只是寻找正确道路的指导。 提前致谢。

【问题讨论】:

    标签: python-2.7 while-loop dice


    【解决方案1】:

    以下是一些可以帮助和指导您的步骤:

    编码

    1. 确保正确缩进代码,因为这是 Python 语法的一部分。所以 def ...(): 的行不应该缩进,定义内容应该缩进一级,while 内容应该缩进两级......等等。因此,您应该只将 import 和不同的 def 对齐在左侧(也许当您将代码粘贴到 stackoverflow 时发生这种情况,但只是为了确定)。

    2. 停止将参数传递给您所做的每个定义。如果您不需要将变量值传递给函数,请不要使用参数。例如,在def inputNames(playerOne,playerTwo) 中,参数playerOne,playerTwo 是无用的,因为您只是使用这个函数来定义它们的值。 rollDice也出现同样的问题。

    3. 小心拼写错误,您在 rollDice 中使用 3 个“n”编写了“winnnerName”。

    4. 保持简单。只使用需要的东西。您的代码结构良好。但是这些功能应该只做它们打算做的事情。示例:rollDice 应该只掷骰子,而不是宣布结果。因此,您可以只返回获胜者,甚至返回数字并在主程序中测试获胜者。这将我们带到下一部分,算法。

    算法

    如果您对自己的代码不满意,一个好的做法是写下您的算法。会清楚很多。 所以你基本上应该得到这样的结果:

    1. 主函数:启动程序时调用一次

      • 欢迎用户
      • 设置有用的变量:endProgram(我们稍后需要它进入循环)
      • 调用 inputNames -> 我们存储玩家名称,仅在开始时存储一次,除非您希望玩家能够更改它们
      • 然后进入只要用户不结束程序就执行的循环:
      • 调用rollDice -> 我们可以存储rollDice返回的2个骰子号码,测试哪个玩家是赢家,直接输出哪个赢家赢了OR 在rollDice中测试哪个玩家赢了,返回玩家姓名,如果不打领带就打印出来。
      • 最后询问玩家是否要停止游戏,并将其响应存储在 endProgram 中。
      • 循环结束
    2. inputNames :打电话询问玩家姓名

      • 输入玩家1的名字并保存
      • 输入播放器 2 的名称并保存
      • 返回存储的玩家姓名
    3. rollDice : 调用以获取随机数

      • 为玩家 1 生成并存储随机数
      • 为玩家 2 生成并存储随机数
      • 返回存储的随机数
    4. (3bis) rollDice 替代方法: 调用以获得获胜者的姓名。这里你需要在参数中传递玩家名字

      • 为玩家 1 生成并存储随机数
      • 为玩家 2 生成并存储随机数
      • 将获胜者姓名设置为“NO NAME”以防平局
      • 测试哪个玩家获胜,如果不是平局,则修改获胜者名称
      • 返回获胜者姓名

    现在您可以自己尝试一下,当然可以增强它。 这是我做的一个,如果你卡住了可以参考:https://repl.it/BiKd/6.

    【讨论】:

    • 是的,这些争论似乎让我有点退缩。我迷失了阅读他们需要的地方,以及我实际拥有它们的地方。你为我解决了很多困惑。我现在要去修复我的代码!!!!谢谢!
    • 不客气!顺便说一句,我还纠正了其他一些问题。您首先测试了变量winnerName == "NO NAME",但让我们假设玩家使用它作为玩家名称。每次他赢了都会说是平局。所以我将其定义为winnerName = None,并用winnerName is None进行了测试。
    猜你喜欢
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 2012-02-29
    相关资源
    最近更新 更多