2016-05-17 6 views
0

Ich habe ein Programm auf Python 3.4 gemacht, das dazu dient, zufällige Ziehungen unter gegebenen Fußballteams zu machen.Verschiedene Ifs, die immer den gleichen Code in Python bekommen 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) 

jedoch das Ergebnis ist immer das gleiche: Egal, die Menge des Teams, die ich auf „fase“ wählen: Es fragt mich immer für bombo1,2,3 und 4 Teams, wie ich es immer 32 Teams auswählen sich beteiligen. Und wenn ich das hier frage ist, weil ich mich gestern und heute verrückt gemacht habe, um das zu reparieren, denn dieses Problem taucht auf, wenn ich mehr als ein Turnier und eine Funktion einführe.

+2

Mögliche Duplikat [Wie ich eine Variable gegen mehrere Werte testen?] (Http://stackoverflow.com/questions/15112125:

Wie bereits angedeutet, würde ich so etwas wie die folgenden verwenden/how-do-i-test-one-variable-gegen-multiple-values) –

+0

Wenn du 'x ==" Champions "oder" Champions "tust, ist das nicht dasselbe wie' if x == "Champions" oder x == "champions", müssen Sie entweder "x" explizit für jede Option aktivieren oder den Operator "in" verwenden. –

Antwort

0

Das Problem ist in der Art und Weise Python ist die and y == # Gruppierung, es wird nur Gruppe es mit dem letzten Zustand, so im Fall der ersten if wird es Gruppe mit or "Uefa Champions League" and y == 32. Wie jedoch andere in den Kommentaren gesagt haben, wird es nie so weit kommen, wie Sie or "champions" überprüfen, was True ist, weil jeder nicht leere "" String als True betrachtet wird. Daher müssen Sie explizit alle Werte gegen x überprüfen und sie auch so gruppieren, dass Ihre y == # auch überprüft, wenn eine der Bedingungen True ist.

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