2016-01-28 69 views
1

我有一個array,它包含9個字符變量。我使用for循環將它們打印成3行。我想檢查連續3個變量中的2個是否相同,並創建將改變第三個變量以匹配其他變量的函數。
我想垂直和水平都做。
我是否必須將陣列更改爲二維陣列
這會讓我改變將近一半的代碼。
是否有機會,我就不必手動編寫if聲明是這樣的:Python檢查列表中的項是否空閒

if array[0] == array[1]: 
    change the_third_var 
elif array[1] == array[2]: 
    change the_first_var 
elif array[0] == array[2]: 
    change the_sec_var 

,但它會檢查它會自動使用for或任何其他循環?
該解決方案能幫助我簡化下面的代碼(可選)嗎?

def check_winner(pl_array, player_choice, computer_choice): 
    vertical = [2, 5, 8] 
    diagonal = [6, 7, 8] 
    # checking vertical lines 
    for each in vertical: 
     if pl_array[each - 2] == pl_array[each - 1] == pl_array[each]: 
      if pl_array[each] == player_choice or pl_array[each] == computer_choice: 
       return True 
    # checking diagonal lines 
    for every in diagonal: 
     if pl_array[every - 6] == pl_array[every - 3] == pl_array[every]: 
      if pl_array[every] == player_choice or pl_array[every] == computer_choice: 
       return True 
    # across 
    if pl_array[8] == pl_array[4] == pl_array[0]: 
     if pl_array[8] == player_choice or pl_array[8] == computer_choice: 
      return True 
    elif pl_array[6] == pl_array[4] == pl_array[2]: 
     if pl_array[6] == player_choice or pl_array[2] == computer_choice: 
      return True 
    else: 
     return False 

任何幫助表示讚賞。

+1

可以更新一些樣品的輸入和輸出你的問題? –

+0

它看起來像你試圖得分井字遊戲。 [在這裏是一個實現](https://inventwithpython.com/chapter10.html),當我在Google搜索「Python tic tac toe」時找到了。 –

回答

1

即使它有點冗長,我寧願使用您發佈的if/elif邏輯比任何其他選項。你可以把它包裝在一個函數中,只要你需要它就可以調用它,這將減少代碼量。

這就是說,你還可以做下面的醜陋的東西:

for i in range(-1, 2): 
    if arr[i-1] == arr[i]: 
     arr[i+1] = arr[i]