2016-01-29 208 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