Python 中的随机掷骰子游戏

Random Dice Roll Game in Python

所以我查看了所有相关问题,但似乎无法找到特定于我的程序的答案。我必须有两个玩家掷骰子游戏,随机数并宣布获胜者。截至目前,当程序运行时它说: 获胜者是: 输入玩家 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()

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

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

编码

  1. 请务必正确缩进您的代码,因为这是 python 语法的一部分。所以带有 def ...(): 的行不应该缩进,定义内容应该缩进一级,while 内容应该缩进两级......等等。所以你应该只让 import 和不同的 def 在左边对齐(也许它发生在你将代码粘贴到 Whosebug 上时,但只是为了确定)。

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

  3. 注意错别字,你在rollDice里用3"n"写了"winnnerName"

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

算法

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

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

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

    • 输入玩家1的名字并存储
    • 输入玩家2的名字并存储
    • Return 存储玩家姓名
  3. rollDice : 调用以获取随机数

    • 为玩家 1 生成并存储随机数
    • 为玩家 2 生成并存储随机数
    • Return存储的随机数
  4. (3bis) rollDice 备选方案 : 调用以获取获胜者的姓名。这里你需要在参数

    中传递玩家名字
    • 为玩家 1 生成并存储随机数
    • 为玩家 2 生成并存储随机数
    • 将获胜者姓名设置为 'NO NAME' 以防平局
    • 测试哪个玩家赢了,如果不平则修改赢家名字
    • Return获奖者姓名

现在你可以自己试试,你一定可以提升它。 这是我做的,如果卡住可以参考一下:https://repl.it/BiKd/6.