2016-05-17 36 views
0

我在Python 3.4上做了一個程序,目的是在給定的足球隊中進行隨機抽籤。不同的ifs在Python 3.4中總是得到相同的代碼

import random 

modo = str(input("Sorteo o Simulación completa? ")) 
torneo = str(input("Torneo elegido: ")) 
fase = int(input("Número de equipos (en la fase a sortear): ")) 

def sorteo(x,y): 
    if x == "Champions" or "champions" or "shempions" or "Shempions" or "Uefa Champions League" and y == 32: 
     bombo1 = str(input("8 equipos del primer bombo: ")).split(",") 
     bombo2 = str(input("8 equipos del segundo bombo: ")).split(",") 
     bombo3 = str(input("8 equipos del tercer bombo: ")).split(",") 
     bombo4 = str(input("8 equipos del cuarto bombo: ")).split(",") 
     names = ["A","B","C","D","E","F","G","H"] 
     for i in range(8): 
      grupo = [] 
      n = names[i] 
      first = random.choice(bombo1) 
      grupo.append(first) 
      bombo1.remove(first) 
      second = random.choice(bombo2) 
      grupo.append(second) 
      bombo2.remove(second) 
      third = random.choice(bombo3) 
      grupo.append(third) 
      bombo3.remove(third) 
      fourth = random.choice(bombo4) 
      grupo.append(fourth) 
      bombo4.remove(fourth) 
      print("Grupo " + str(n) + ": " + str(grupo)) 
     return 

if x == "Champions" or "champions" or "shempions" or "Shempions" or "Uefa Champions League" and y == 16: 
     primeros = str(input("8 equipos que quedaron primeros: ")).split(",") 
     segundos = str(input("8 equipos que quedaron segundos: ")).split(",") 
     for i in range(8): 
      n = i + 1 
      first = random.choice(primeros) 
      primeros.remove(first) 
      second = random.choice(segundos) 
      segundos.remove(second) 
      print("Cruce " + str(n) + ": " + str(first) + " VS " + str(second)) 
     return 

if x == "Champions" or "champions" or "shempions" or "Shempions" or "Uefa Champions League" and y == 8: 
     equipos_cuartos = str(input("8 equipos que pasaron a Cuartos: ")).split(",") 
     for i in range(4): 
      n = i + 1 
      first = random.choice(equipos_cuartos) 
      equipos_cuartos.remove(first) 
      second = random.choice(equipos_cuartos) 
      equipos_cuartos.remove(second) 
      print("Cruce " + str(n) + ": " + str(first) + " VS " + str(second)) 
     return 

if x == "Champions" or "champions" or "shempions" or "Shempions" or "Uefa Champions League" and y == 4: 
     equipos_semis = str(input("4 equipos que pasaron a Semis: ")).split(",") 
     for i in range(2): 
      n = i + 1 
      first = random.choice(equipos_semis) 
      equipos_semis.remove(first) 
      second = random.choice(equipos_semis) 
      equipos_semis.remove(second) 
      print("Cruce " + str(n) + ": " + str(first) + " VS " + str(second)) 
     return 

if modo == "Sorteo" or "sorteo": 
    sorteo(torneo,fase) 

但是,結果總是相同的:無論我在「FASE」選擇球隊的量:它總是問我bombo1,2,3和4支球隊,就像我始終選擇32隊參加。如果我在這裏問這是因爲我昨天和今天整個瘋狂的瘋狂,以便修復這個問題,因爲當我引入多個比賽和功能也出現這個問題。

+2

可能的複製[如何測試對多值一個變量?(http://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-multiple-values) –

+0

當你做'x =='冠軍'或'冠軍'時'它不同於'如果x ==冠軍「或x ==「冠軍」,你需要明確地檢查每一個「x」或使用'in'運算符。 –

回答

0

問題出在python分組and y == #,它只會將它與最後一個條件分組,所以在第一個if的情況下,它會將它與or "Uefa Champions League" and y == 32分組。然而,正如其他人在評論中所說,它將永遠不會像您檢查or "champions"那樣,這是True,因爲任何非空的""字符串都被認爲是True。因此,您需要明確檢查所有的值,並對x進行分組,以便您的y == #也將檢查何時其中任一條件是True

至於建議,我會使用類似以下內容:

if x in {"Champions", "champions", "shempions", "Shempions", "Uefa Champions League"} and y == #:

相關問題