2012-12-13 71 views
1

我想模擬使用英語規則的壁球比賽的得分。 這些是:我的代碼模擬一個壁球遊戲怎麼了?

  • 只有服務器如果他們贏得一次集會就被授予一個點。
  • 如果服務器贏得集會,他們會收到一個點並繼續作爲服務器。
  • 如果返回者贏得集會,他們將成爲服務器,但不會得到一分。
  • 除非得分已經達到8-8,否則第一名達到9分的球員將獲勝。
  • 如果分數達到8-8,誰達到了8第一個決定是否發揮到9或至10

我的代碼的球員是這樣的:

import random 

def eng_game(a,b): 
    A = 'bob' 
    B = 'susie' 
    players = [A, B] 

    server = random.choice(players) 
    print server 

    points_bob = 0 
    points_susie= 0 

    prob_A_wins = 0.4 
    prob_B_wins = 0.6 

    while points_bob or points_susie < 9: 
     probability = random.random() 
     print probability 
     if probability < prob_A_wins and server == A: 
      points_bob += 1 
     elif probability < prob_A_wins and server == B: 
      server == A 
      print server 

     if probability > prob_A_wins and server == B: 
      points_susie += 1 
     elif probability > prob_A_wins and server == A: 
      server == B 
      print server 

     print points_bob 
     print points_susie 

此代碼返回Susie獲勝9-0,在某些情況下,服務器應該交換給Bob贏得這一點,但這不會發生。發球局保持與蘇西,她贏得了這一點。

+2

說明你的代碼做錯了什麼(或者是否給出錯誤或異常)會有幫助。 –

+0

哦是啊對不起,現在編輯它 – user1902151

回答

4

我認爲問題是陳述server == Aserver == B應該是server = Aserver = B,以便分配而不是比較。

我看到的另一個邊緣案例錯誤是,如果概率恰好爲0.4,那麼您的程序將像從未發生過的虛擬服務一樣行事。

我想你的循環更改爲:

while points_bob < 9 and points_susie < 9: 
    probability = random.random() 
    print probability 
    if probability <= prob_A_wins and server == A: 
     points_bob += 1 
    elif probability <= prob_A_wins and server == B: 
     server = A 
     print server 

    if probability > prob_A_wins and server == B: 
     points_susie += 1 
    elif probability > prob_A_wins and server == A: 
     server = B 
     print server 

    print points_bob 
    print points_susie 
+0

如果我拿出一個=符號,只留下一個它說,有一個無效的語法 – user1902151

+0

我在你的回答中放了一個你的while循環的修正版本。我猜你正在改變錯誤的路線。 –

+0

它現在的作用是,發球正在交換和鮑勃獲勝點,但它似乎運行了無盡的時間,直到我重新啓動殼,它不停止時,有人達到9分 – user1902151

1

我懷疑你的循環條件

while points_bob or points_susie < 9: 

不是做你的想法。當解釋爲布爾值時,如果數字爲零,則數字爲False,否則爲True,這意味着實際上將檢查(points_bob != 0) or (points_susie < 9)。當Susie至少有9分並且鮑勃沒有得分時,這隻會是False(即,循環只會停止) - 如果鮑勃得到任何分數,比賽將永遠持續下去。

要解決這個問題,你應該切換到and條件。這隻會在雙方球員得分少於9分的情況下繼續下去,或者換句話說,只要有人達到9分,球就會停止。因此,你的循環條件應該是

while points_bob < 9 and points_susie < 9: 

如果你想在中獎條件更改爲10分,那麼你就需要玩家的點比較一個變量,而不是一個常數,然後更改變量需要:

winning_score = 9 
while points_bob < winning_score and points_susie < winning_score: 
    # ... 
    # Accumulate your points etc. 
    # ... 

    # Now need to reach ten points to win. 
    winning_score = 10 
+0

我在打字時被@ JoeDay的編輯毆打,但我會留下來看看如何改變獲勝分數的例子。 – Blair

+0

謝謝你的回答,但我想我會第一個答案 – user1902151