es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer que mi código tome como entrada un conjunto de tuplas y siga devolviendo la misma respuesta?

Entonces intenté escribir dos piezas de código, una de ellas intenta encontrar si una secuencia de código es un “fourz” o no.

“fourz” básicamente verifica si una carta tiene 4 caracteres iniciales idénticos y un carácter no idéntico o no.

Por ejemplo,

fourz([‘3S’, ‘3D’, ‘3C’, ‘3H’, ‘5S’]) devuelve True porque hay 4 tres y un cinco.
fourz([‘4S’, ‘3D’, ‘3C’, ‘3H’, ‘5S’]) devuelve False porque solo hay tres tres, un cuatro y un cinco.

Entonces ahora tengo este código:

def is_four_of_a_kind(h):
    h = list(h)
    values = [i[0] for i in h]
    card_order_dict = {'2': 2, '3':3, '4':4, '5': 5, '6':6, '7':7,
                       '8':8, '9':9,'T':10, 'J':11, 'Q':12, 'K':13, 'A':14 }
    count = 1
    rank_values = [card_order_dict[i] for i in values]
    rank_values = sorted(rank_values)

    for i in range(1,len(rank_values)):
        if rank_values[i] == rank_values[0]:
            count += 1
    if count == 4:
        return True
    else:
        return False

Este código devuelve correctamente el resultado cuando el código es una lista, pero no funciona cuando es un conjunto de tuplas.

Entonces, si mi código es así fourz({('3S', '3D', '3C', '3H', '5S')}, mi código no funciona.

¿Qué cambios debo hacer en mi código para que funcione?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que el código funcione con un conjunto de tuplas, debes hacer los siguientes cambios:

    1. Cambia la línea h = list(h) por h = [list(i) for i in h]. Esto convierte cada tupla en el conjunto en una lista, para que el resto del código pueda manejarlo correctamente.
    2. Cambia la línea values = [i[0] for i in h] por values = [i[0] for i in h if i]. Esto filtra cualquier lista vacía que pueda haberse creado en el paso anterior, para evitar errores.

    3. Reemplaza la línea if count == 4: por if count >= 4:. Esto verifica que haya cuatro o más caracteres idénticos en la primera posición, como lo requiere la regla “fourz”.

    Aquí está el código modificado:

    def is_four_of_a_kind(h):
        h = [list(i) for i in h]
        values = [i[0] for i in h if i]
        card_order_dict = {'2': 2, '3':3, '4':4, '5': 5, '6':6, '7':7,
                           '8':8, '9':9,'T':10, 'J':11, 'Q':12, 'K':13, 'A':14 }
        count = 1
        rank_values = [card_order_dict[i] for i in values]
        rank_values = sorted(rank_values)
    
        for i in range(1,len(rank_values)):
            if rank_values[i] == rank_values[0]:
                count += 1
        if count >= 4:
            return True
        else:
            return False
    

    Con estos cambios, el código ahora debería manejar correctamente conjuntos de tuplas como entrada.

Comments are closed.