2016-01-29 311 views
0

所以我看过所有相关的问题,似乎无法找到特定于我的程序的答案。我必须有两个玩家掷骰子游戏,掷出一个随机数并宣布获胜者。截至目前,该程序运行时,它说: 获奖者是: 输入播放器1名: 输入玩家名称2:在Python中随机骰子游戏

这里是我的代码:

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

这里有一些步骤,应该帮助和指导您:

编码

  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个骰子的数字,测试,球员是赢家,并直接输出,赢家赢得或者测试哪个球员在rollDice中赢得了返回球员姓名的球员,并且如果不是平局则打印它。
    • 最后询问玩家是否想停止游戏,并将其响应存储在endProgram中。
    • 端,环
  2. inputNames:打电话询问玩家名字

    • 播放器1的输入名称和存储播放器2的是
    • 输入名称,并将其存储
    • 返回存储玩家名称
  3. rollDice:叫了随机数

    • 生成并存储随机数,供玩家1
    • 生成并存储随机数,供玩家2
    • 返回存储的随机数
  4. (3bis)rollDice备选方案:打电话给获胜者的名字。在这里,你需要传递的参数选手的名字

    • 生成和的情况下,2
    • 组冠军的名字存储的随机数,供玩家1
    • 生成并存储随机数的玩家为“NO NAME”这是配合
    • 测试哪个球员获胜,修改获奖者如果不配合
    • 返回赢家名

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

+0

是的,这些论据似乎让我很不高兴。我迷失在他们需要的地方,以及我真正拥有他们的地方。你为我解决了很多困惑。我要去修理我的代码了!谢谢! – Matt331

+0

不客气!顺便说一下,我还纠正了其他一些问题。您首先测试了变量'winnerName ==“NO NAME”',但让我们假装一名玩家将此作为玩家名称。每次他赢的时候都会说这是平局。所以我将它定义为'winnerName = None',并用'winnerName是None'对其进行测试。 – mjorissen