Ejercicios varios

  1. Hacer una función que reciba un string S y un número N; tiene que devolver un string repitiendo las N primeras letras de S, luego las N-1, luego N-2… etc.
repeatFront("Chocolate", 4) --> "ChocChoChC"
repeatFront("Chocolate", 3) --> "ChoChC"
repeatFront("Ice Cream", 2) --> "IcI"
repeatFront("abcde",3) --> abcaba
  1. Hacer una función que recibe S1 y S2 y devuelve True si S1 termina con S2, o S2 termina en S1. Si no devuelve False. Mayúsculas y minúsculas se consideran iguales.
endOther("Hiabc", "abc") --> True
endOther("AbC", "HiaBc") --> True
endOther("abc", "abXabc") --> True
  1. Hacer una funcion que devuelva True un string S, que recibe como parámetro, es palíndroma.
  2. Hacer una función que recibe S1 y S2 (dos strings) y devuelve un string S formada por la primer letra de S1, la primer letra de S2, la segunda de S1, la segunda de S2 etc.
mezclar("uno", "dos") --> udnoos
mezclar("abcd", "mnopqr") --> ambncodpqr
  1. Hacer una función que devuelva una lista de C números aleatorios entre N1 y N2
def crearLista(6, 2, 8) --> [2, 4, 4, 6, 7, 7]
  1. Hacer una función que redondee un número decimal F a una cantidad D de decimales.
redondear(14.672, 1) -> 14.7
redondear(14.672, 2) -> 14.67
redondear(14.679, 0) -> 14
  1. Usar la función del punto anterior en una función que recibe una lista de números decimales y devuelve una lista con todos sus números redondeados a 1 decimal.
redondeaTodo([1.55, 5, 2.69, 0.258]) -> [1.6, 5, 2.7, 0.3]
  1. Hacer un programa que genere un número de N cifras y pregunte al usuario números hasta que lo adivine. Mostrar la cantidad de intentos usados para adivinar el número.
  2. Hacer una función que reciba como parámetros N1 y N2 y devuelva cuántos múltiplos de N1 hay que sean menores que N2. Hacerlo con for y con while ¿Cuál es la ventaja de cada una?
mulMenores(2, 15) -> 6    (4,6, 8, 10, 12, 14)
  1. Hacer un programa que permita jugar al Mastermind:

Explicación del juego:

Cada vez que se empieza un partido, el programa debe "eligir" un número de cuatro cifras (sin cifras repetidas), que será el código que el jugador debe adivinar en la menor cantidad de intentos posibles.

Cada intento consiste en una propuesta de un código posible que tipea el jugador, y una respuesta del programa. Las respuestas le darán pistas al jugador para que pueda deducir el código.

Estas pistas indican cuán cerca estuvo el número propuesto de la solución a través de dos valores: La cantidad de aciertos es la cantidad de dígitos que propuso el jugador que también están en el código en la misma posición. La cantidad de coincidencias es la cantidad de digitos que propuso el jugador que también están en el código pero en una posición distinta.

Por ejemplo, si el código que eligió el programa es el 2607, y el jugador propone el 1406, el programa le debe responder un acierto (el 0, que está en el código original en el mismo lugar, el tercero), y una coincidencia (el 6, que también está en el código original, pero en la segunda posición, no en el cuarto como fue propuesto).

Si el jugador hubiera propuesto 3591, habría obtenido como respuesta ningún acierto y ninguna coincidencia, ya que no hay números en común con el código original, y si se obtienen cuatro aciertos es porque el jugador adivinó el código y ganó el juego.


prog/palindroma_v1.py (Código fuente)

#!/usr/bin/env python3

def palindroma(s):
    largo = len(s)
    m = largo // 2
    if largo % 2 == 1:
        n = m
    else:
        n = m - 1


    return s[0:m] == s[len(s):n:-1]

def palindroma2(s):
    largo = len(s)
    m = n = largo // 2
    if largo % 2 == 0:
        n = n - 1

    return s[0:m] == s[len(s):n:-1]


print(palindroma("abcba"))
print(palindroma("abba"))
print(palindroma("1234321"))
print(palindroma("abcdefg"))
print(palindroma("ata ata"))

print(palindroma2("abcba"))
print(palindroma2("abba"))
print(palindroma2("1234321"))
print(palindroma2("abcdefg"))

prog/palindroma_v2.py (Código fuente)

#!/usr/bin/env python3

def palindroma(s):
    largo = len(s)
    m = largo // 2
    if largo % 2 == 1:
        n = m
    else:
        n = m - 1
    return s[0:m] == s[len(s):n:-1]

def palindroma2(s):
    largo = len(s)
    m = n = largo // 2
    if largo % 2 == 0:
        n = n - 1

    return s[0:m] == s[len(s):n:-1]

# si se ejecuta el programa
# hacer lo de abajo
# si se importa, no
if __name__ == '__main__':
    print(palindroma("abcba"))
    print(palindroma("abba"))
    print(palindroma("1234321"))
    print(palindroma("abcdefg"))
    print(palindroma("ata ata"))

    print(palindroma2("abcba"))
    print(palindroma2("abba"))
    print(palindroma2("1234321"))
    print(palindroma2("abcdefg"))

prog/filter.py (Código fuente)

# -*- coding: utf-8 -*-
# generar una lista
# con los numeros de num
# mayores que 3

num = [10, 5, 6, 2, 8, 1]

# version 1 - con for
j = []
for n in num:
    if n > 3:
       j.append(n)

print(j)

# version 2 - con filter y una funcion
def mayor_a_3(x):
    return (x > 3)

g = list(filter(mayor_a_3, num))
print(g)

# version 3 - con filter y lambda
h = list(filter(lambda n: n > 3, num))
print(h)

prog/map.py (Código fuente)

# redondea los numeros de n
# con D decimales
num = [2.25,4.110,8.55,16.8144]

ndec = int(input("cantidad de decimales: "))

# version 1 - con for
j = num
i = 0
for n in num:
    j[i] = round(n,ndec)
    i = i + 1

print(j)

# version 2 - con enumerate y for
j = num
for i,n in enumerate(num):
    j[i] = round(n,ndec)

print(j)

# version 3 - con map y lambda
k = list(map(lambda x:round(x,ndec), num))
print(k)

prog/lambdas.py (Código fuente)

# -*- coding: utf-8 -*-
# lamdas
multi3 = lambda y: y*3

print(multi3(4))

intercambia = lambda m,k: m + k

a = 7
b = 3
print(a, b)
intercambia(a, b)
print(a, b)

prog/reduce.py (Código fuente)

# mostrar la sumatoria
# de los numeros de num

num = [10, 5, 6, 2, 8, 1]

def sumar(x, y):
    return (x + y)

g = reduce(sumar, num)
print(g)