El juego de las palabras cosidas Prueba 2 semestre mar-ago 2021

20 de mayo de 2021

Prueba dos de la materia de Programación Orientada al Cálculo Científico del semestre marzo - agosto 2021. Tomado el día jueves 20 de mayo de 2021.

Planteamiento

El juego comienza generando una letra del alfabeto (incluyendo la letra ñ) de manera aleatoria (0.5 puntos). Con esa primera letra, el jugador 1 debe escribir una palabra. El jugador 2 debe escribir una siguiente palabra que comience con la letra con la que termina la palabra del jugador 1. Esa palabra debe ser una que no haya sido escrita antes por ningún jugador. De la misma manera, el jugador 1 debe escribir una nueva palabra que comience con la última letra de la última palabra escrita por el jugador 2. Esa palabra debe ser una que no haya sido escrita antes por ningún jugador. Se repite estos pasos hasta que termine el juego (1 punto). El juego termina cuando los dos jugadores, de manera sucesiva, no son capaces de escribir palabras diferentes (i.e., que no hayan sido ingresadas antes por cualquiera de los dos jugadores) o siguiendo la regla del juego (e.g., cuando el jugador escribe una palabra que no comienza con la última letra de la última palabra escrita) (1.5 puntos). Un jugador tiene la posibilidad de indicar que no puede escribir una palabra válida presionando la tecla Enter sin antes escribir ningún carácter; cuando en dos jugadas sucesivas se presiona Enter, se termina el juego (0.5 puntos). Gana el juego la persona que haya escrito el mayor número de caracteres (se suma la cantidad de caracteres de todas las palabras ingresadas por cada jugador); se lo debe indicar cuando termina el juego (0.5 puntos). Al finalizar el juego, todas las palabras (una palabra es una cadena de al menos un carácter) diferentes ingresadas por los jugadores deben ser escritas en un archivo junto con el puntaje de cada jugador (1 punto).

Si usa Python, la siguiente línea de código le ayuda a generar las letras del abecedario: import string; print(string.ascii_lowercase).

Ejemplos de la ejecución del juego se muestran en el documento Ejercicios Básicos de Programación.

Una posible solución

import string
from random import choice

def letra():
    letras = list(string.ascii_lowercase)
    letras.append('ñ')
    return choice(letras)

palabras1 = [] # palabras del jugador 1
palabras2 = [] # palabras del jugador 2

ultima_letra = letra()
palabras_repetidas = 0 # permite terminar el juego
palabras_que_comienzan_mal = 0 # permite terminar el juego
enters = 0 # permite terminar el juego
jugador = 1 # la uso como bandera
print(ultima_letra)
while palabras_repetidas < 2 and palabras_que_comienzan_mal < 2 and enters < 2:
    palabra = input('Jugador '+str(jugador)+': ')
    if palabra in palabras1 or palabra in palabras2:
        palabras_repetidas += 1
    else:
        palabras_repetidas = 0
    if palabra != '':
        if palabra[0] != ultima_letra:
            palabras_que_comienzan_mal += 1
        else:
            palabras_que_comienzan_mal = 0
    
    if palabra == '':
        enters += 1
    else:
        enters = 0
    if (not palabra in palabras1) and palabra != '' and palabra[0] == ultima_letra:
        if jugador == 1:
            palabras1.append(palabra)
        else: # cuando jugador es igual a 2
            palabras2.append(palabra)
            
    if palabra != '':
        ultima_letra = palabra[-1]
    
    if jugador == 1: # uso de la estrategia de bandera
        jugador = 2  # para cambiar de jugador en cada iteración
    else:
        jugador = 1

print('\nPalabras repetidas sucesivas:', palabras_repetidas)
print('Palabras sucesivas con primera letra incorrecta:', palabras_que_comienzan_mal)
print('\"Enters\" sucesivos:', enters, end='\n\n')

puntaje1, puntaje2 = 0, 0 # puntajes para los jugadores

for elemento in palabras1:
    puntaje1 += len(elemento)
for elemento in palabras2:
    puntaje2 += len(elemento)

if puntaje1 > puntaje2:
    print('¡Ganó jugador 1!')
elif puntaje2 > puntaje1:
    print('¡Ganó jugador 2!')
else:
    print('¡Hubo empate!')

print('\tJugador 1:', puntaje1, 'puntos.')
print('\tJugador 2:', puntaje2, 'puntos.')

with open('prueba2.csv', 'w') as f:
    f.write('Jugador 1, Jugador 2\n')
    longitud = max(len(palabras1), len(palabras2))
    for i in range(longitud):
        
        if not(i >= len(palabras1)):
            f.write(palabras1[i]+',')
        else:
            f.write(',')
        if not(i >= len(palabras2)):
            f.write(palabras2[i]+'\n')
        else:
            f.write(',\n')


Si le gustó esta entrada, ¡podría invítame a un café!

0 comentarios:

Related Posts with Thumbnails