Python urgente

lasizoillo lasizoillo en gmail.com
Lun Oct 6 12:52:10 CEST 2008


El día 6 de octubre de 2008 0:25, Felipe Andrés Nicolás Soto Honores
<fsotohonores en gmail.com> escribió:
> Hola necesito que me ayuden urgentemente con los siguientes ejercicios:
>
> 1.    Escriba una función que ha de rotar a la izquierda, a la derecha, o
> nada a una cadena ingresada como parámetro. Para definir el tipo de rotación
> se ingresa otro parámetro: un entero negativo indicará rotación a la
> izquierda; un entero positivo indicará rotación a la derecha y 0 indicará
> que la cadena no ha de rotarse. La magnitud del entero indica el número de
> posiciones a rotar. Agregue un programa que solicite al usuario la cadena de
> caracteres, repitiendo el ingreso si esta cadena es de longitud inferior a
> 2, así como el sentido y magnitud de la rotación.  El programa dejará de
> solicitar el ingreso de cadenas cuando la cadena rotada quede en la misma
> posición que la original. Un ejemplo de Entrada/Salida (se omiten los
> espacios en la entrada para mayor facilidad de observación):
>
>
>

ror = lambda x, y: x[y*-1:]+x[:y*-1]

> *Escriba una frase:    estaesprueba*
>
> *Ingrese posiciones a rotar: -2*
>
> *Cadena original:    taespruebaes *
>
> *            :*
>
> 2.    Escriba una función que reciba como parámetro una cadena y un entero (
> *def mayusculas(cadena, n)*). La función debe dividir la cadena ingresada en
> *n* subcadenas de igual (o casi igual) tamaño e imprimir las subcadenas
> resultantes. Esta función no retorna valores al programa. Por otra parte, el
> programa debe solicitar al usuario el número de divisiones a realiza a una
> cadena (número entero positivo; 1 indica que la cadena no se divide),
> validar este ingreso, para posteriormente solicitar el ingreso de la cadena
> con un largo que no debe ser inferior al número de divisiones solicitadas
> (por lo tanto, también debe validar la cadena ingresada..). El programa
> finaliza cuando la cadena resultante es idéntica a la original.
>
>

def r(a, b):
    d = float(a) / float(b)
    f = 0
    l = int(d)
    r = d - l
    for i in range(b):
        yield (f, l)
        f = l
        r = (i+1)*d - l
        l = int(l+r+d)
def trocea(s, p):
    return [s[x:y] for x,y in r(len(s), p)]


>
> 3.    Escriba una función que reciba como parámetros una lista  ordenada de
> enteros y un número que habrá de incluir en la lista (*def
> ordena(lista,numero)*), ordenado de mayor a menor. La función ha de retornar
> la lista con el nuevo valor, en el orden que corresponda. Se debe evitar el
> uso de una función tipo "sort" que ordena automáticamente la lista. El
> alumno debe desarrollar un algoritmo para tal efecto. El programa principal
> debe comenzar con una lista vacía y solicitar al usuario el ingreso de un
> número por vez e invocar, para cada número ingresado, la función ordena, con
> el número a ordenar y la lista actual disponible.  Algunas observaciones: el
> programa debe asegurarse que los números ingresados a la lista (antes de
> invocar la función ordena) no se repitan!!, por lo que debe validar el
> ingreso de los números. El programa admitirá números positivos y negativos,
> con excepción del 0, que servirá para finalizar el ingreso y mostrar la
> lista de números ingresados y la lista de números ordenados
>
>

def ordena(L):
    if len(L) <= 1: return L
    return ordena( [ lt for lt in L[1:] if lt < L[0] ] )  +  \
              [ L[0] ]  +  ordena( [ ge for ge in L[1:] if ge >= L[0] ] )


>
> 4.    Escriba una función que, dada una lista de palabras, retorne el mayor
> prefijo común de esa lista.  Ejemplo: Dada la lista:
>
> L = ['docente', 'docencia', 'doce', 'documento', 'docena', 'dormir'],
>
> El mayor prefijo común sería 'do'. Escriba además un programa que solicite
> las palabras (finalice con un * para dejar de seguir solicitando palabras),
> arme la lista y la ingrese a la función prefijo(lista), imprimiendo la
> respuesta. Si no hay un prefijo común (mínimo 2 palabras), retorne un nulo.
>
>

def prefijo(L):
    for i in range(sorted(map(len, L))[0],-1,-1):
        if len(dict([(x[:i],1) for x in L])) == 1:
            return L[0][:i]
    return ""


>
> 5. Escribe un programa que calcule la nota sobre 10 de un examen tipo test
> con respuestas de verdadero o falso ('V' o 'F'). Para ello, el programa
> pedirá inicialmente una cadena que se corresponderá con la plantilla de
> corrección. A continuación, pedirá repetidamente cadenas que se
> corresponderán con las respuestas de los distintos alumnos, hasta que se
> introduzca una cadena vacía. Para cada alumno, el programa debe mostrar el
> número de aciertos, el número de errores y el número de respuestas en blanco
> (que vendrán dadas por el carácter '-') así como la nota final obtenida. La
> nota final vendrá dada por la siguiente fórmula de corrección:
>
>

Este es demasiado fácil como para escribir un código que no esté
tirado de comprender.

Todo el código que te he escrito está hecho para ser dificil de
entender, y por lo tanto dificil de explicar a tu profesor. Si usas
esté código, espero que te sirva para quitarte la tentación de obtener
el trabajo sin aprender en futuras ocasiones.

Todos los códigos anteriores serían mucho más fáciles de entender con
un mejor nombrado de variables y algún comentario explicando lo que se
pretende hacer. Espero que esto sirva también para que el codigo que
realices esté debidamente comentado y le des importancia al nombrado
de las variables.

Un saludo y suerte con tus estudios:

Javi
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es