¿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?
davy.ai
Para hacer que el código funcione con un conjunto de tuplas, debes hacer los siguientes cambios:
h = list(h)
porh = [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.Cambia la línea
values = [i[0] for i in h]
porvalues = [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.Reemplaza la línea
if count == 4:
porif 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:
Con estos cambios, el código ahora debería manejar correctamente conjuntos de tuplas como entrada.