Python - Crear un programa para generar de forma aleatoria un fichero de texto formado por un número

 
Vista:
sin imagen de perfil

Crear un programa para generar de forma aleatoria un fichero de texto formado por un número

Publicado por Jose Luis (12 intervenciones) el 17/12/2014 10:04:07
Hola, soy nuevo en el foro y nuevo en Python, la verdad es que soy universitario
Necesito enviar una practica que dice :

Crear un programa para generar de forma aleatoria un fichero de texto formado por un número de líneas entre 1 y 10000 que pasaremos como argumento al ejecutar el programa. Sus líneas han de contener los siguientes campos:
un nombre (cadena aleatoria),
apellidos (cadena aleatoria),
edad (numero aleatorio entre 0 y 120),
dni (numero aleatorio entre 0 y 10000 que no puede aparecer repetido en el fichero).
ciudad (la ciudad una de la lista [Cadiz, Paris, Londres, Roma, Pekin, Tokio, Nueva York])
Si la llamada al programa no tiene argumentos el programa ha de mostrar un menú con las siguientes opciones:
Opcion 1: búsqueda de usuario con un determinado dni. Al elegir esta opción el programa ha de buscar si existe en el fichero alguna linea con ese dni y una vez encontrada nos ha de mostrar el resto de campos de la línea donde aparece.
Opción 2: listado de edad, dni, nombre y apellidos ordenados por edad.
Opción 3: introducir/modificar datos de persona. Se nos pedirá inicialmente un dni, se comprobará si existe en el fichero, se nos notificará su existencia y se nos pedirán los nuevos datos.
Opción 4: eliminar datos de persona: Se nos pedirá inicialmente un dni, se comprobará si existe en el fichero y se eliminarán sus datos.
Opción 5: listado de personas por ciudad. Se nos mostrará el listado con las cuidades que aparecen en los datos de nuestro fichero y según la cuidad elegida se creará un fichero de texto "nombre_ciudad.txt" con las personas que son de ella.
Opción 6: Salir del programa.


Espero podais ayudarme, aunque sea un poco...
Se crear los datos (nombre, apellidos, edad, ciudad, ...)
La idea es colocarlos en una lista de listas, y operar con esa lista, y cuando tenga que mostrarlo por pantalla escribirlo tambien en el txt
Tengo algo realizado (siento no poder mostrarlo por estar desde el movil, en cuanto llegue a casa puedo mostrar lo que llevo hecho)
Muchas gracias de antemano, espero podais ayudarme.. Tengo muchas dificulrades programando en Python y tengo que entregar dicha practica en 3 dias.
Disculpen las molestias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Crear un programa para generar de forma aleatoria un fichero de texto formado por un número

Publicado por xve (1646 intervenciones) el 17/12/2014 14:41:13
Hola Jose Luis, que parte tienes realiza?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Crear un programa para generar de forma aleatoria un fichero de texto formado por un número

Publicado por Jose Luis (12 intervenciones) el 17/12/2014 14:51:50
Hola, aun no estoy en casa, sigo en la universidad
Pero te explico, he usado argv para coger un parametro del usuario, si ese parametro es entero, entre 1 y 10000 entonces lo toma como valido.
Luego he creado funciones para coger de un vector (de manera aleatoria) un nombre, lo mismo para los apellidos, y de nuevo una funcion para crear la edad (numero aleatorio entre 0 y 120)
Estoy intentando formar el DNI, mi idea es crear una funcion que cree una lista de "argv" elementos, esos elementod deben ser aleatorios entre 1 y 10000 y sin repeticion (a partir de dos bucles for)
Luego creare una lista de listas, compuesta de "argv" elementos nuevamente, donde cada elemento es una lista de la forma:
Previamente usare la funcion dni para crear la lista de dni's
dni=Dni(argv)
[nombre(), apellido(), apellido(), edad(), dni[i]]
La busqueda es algo que podria hacer yo mismo facilmente, al igual que la modificacion y eliminacion
El problema es a la hora de ordenar por edades, de crear un listado por ciudades y sobretodo para crear un menu en python..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Crear un programa para generar de forma aleatoria un fichero de texto formado por un número

Publicado por Jose Luis (12 intervenciones) el 17/12/2014 15:52:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# -*- coding: utf-8 -*-
 
import sys
from random import randrange, seed
 
def pintaAyuda():
    print "Error en la llamada"
    print """Ejemplo de llamada:
    C:\> python creafichero.py 555 """
 
def CompruebaArgv(argv):
    if len(argv)!=2:
        print 'Numero argumentos incorrecto'
        pintaAyuda()
        return False
    elif not argv[1].isdigit():
        print 'Argumento 2 no es valido'
        pintaAyuda()
        return False
    elif not (argv[1]>0 or argv[1]<10000):
        print 'Argumento 2 noes valido'
        pintaAyuda()
        return False
    else:
        return (int(argv[1]))
 
 
def Nombre():
    VNom=['Juan','Pedro', 'Maria', 'Rocio', 'Jose', 'Antonio', 'Agustin',
          'Pablo', 'Alejandro', 'Jessica', 'Noemi', 'Paula', 'Fatima',
          'Antonia', 'Ricardo', 'Javier', 'Manuel', 'Luis', 'Laura', 'Sonia',
          'Paco', 'Lucia', 'Jaime', 'Rafael']
    return VNom[randrange(0,len(VNom))]
 
def Apellidos():
    VApell=['Gomez','Troncoso', 'Fernandez', 'Castaño', 'Morales', 'Alcedo',
            'Parodi','Torres', 'Aguilar', 'Sauco', 'Mangano', 'Ruiz', 'Aragon',
          'Candon', 'Acosta', 'Cabeza', 'Soto', 'Ezequiel', 'Pericacho', 'Rodriguez']
    return VApell[randrange(0,len(VApell))]
 
def Ciudad():
    VCiudad=['Cadiz','Roma', 'Paris', 'Pekin', 'Londres', 'Tokio', 'Nueva York']
    return VCiudad[randrange(0,len(VCiudad))]
 
def Edad():
    return str(randrange(0,121))
"""
def Dni():    
    return str[randrange(0,10001)]
"""
 
def creaF(num):
    try:
        f=open('Datos.txt','w')
        for i in range(num):
            f.write(Nombre()+':'+Apellidos()+':'+Apellidos()+':'+Ciudad()+':'+Edad()+'\n')
        f.close()
    except Exception as e:
        print 'Exception en funcion de creaF'+e
        sys.exit(-1)
 
 
def main(argv):
    print argv
    aux= CompruebaArgv(argv)
    if aux!=False:
        print aux
        seed()
        creaF(aux)
    else:
        print 'FIN'
 
 
if __name__=="__main__":
    main(sys.argv)

Esto es lo que llevo hecho, necesito ahora crear la lista DNI, que aun estoy pensando como meterle mano
Y ya luego todas las funciones de busqueda, y el menu
Agradeceria una pequeña ayuda, porque soy un poco novato en Python, de hecho solo necesito tener conociemientos de Python para esta asignatura, en especifico solo para este trabajo, porque despues usamos otros lenguajes de programacion y no necesito nada mas de Python
Y claro, habiendo solo recibido 3 semanas de clases de Python, se me hace complicado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Crear un programa para generar de forma aleatoria un fichero de texto formado por un número

Publicado por Jose Luis (12 intervenciones) el 17/12/2014 17:11:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# -*- coding: utf-8 -*-
 
import sys
from random import randrange, seed
 
def pintaAyuda():
    print "Error en la llamada"
    print """Ejemplo de llamada:
    C:\> python creafichero.py 555 """
 
def CompruebaArgv(argv):
    if len(argv)!=2:
        print 'Numero argumentos incorrecto'
        pintaAyuda()
        return False
    elif not argv[1].isdigit():
        print 'Argumento 2 no es valido'
        pintaAyuda()
        return False
    elif not (argv[1]>0 or argv[1]<10000):
        print 'Argumento 2 noes valido'
        pintaAyuda()
        return False
    else:
        return (int(argv[1]))
 
 
def Nombre():
    VNom=['Juan','Pedro', 'Maria', 'Rocio', 'Jose', 'Antonio', 'Agustin',
          'Pablo', 'Alejandro', 'Jessica', 'Noemi', 'Paula', 'Fatima',
          'Antonia', 'Ricardo', 'Javier', 'Manuel', 'Luis', 'Laura', 'Sonia',
          'Paco', 'Lucia', 'Jaime', 'Rafael']
    return VNom[randrange(0,len(VNom))]
 
def Apellidos():
    VApell=['Gomez','Troncoso', 'Fernandez', 'Castaño', 'Morales', 'Alcedo',
            'Parodi','Torres', 'Aguilar', 'Sauco', 'Mangano', 'Ruiz', 'Aragon',
          'Candon', 'Acosta', 'Cabeza', 'Soto', 'Ezequiel', 'Pericacho', 'Rodriguez']
    return VApell[randrange(0,len(VApell))]
 
def Ciudad():
    VCiudad=['Cadiz','Roma', 'Paris', 'Pekin', 'Londres', 'Tokio', 'Nueva York']
    return VCiudad[randrange(0,len(VCiudad))]
 
def Edad():
    return str(randrange(0,121))
 
def compara(i, aleat,dni):
    for j in range(i):
            if aleat!=dni[j]:
                return True
            elif aleat==dni[j]:
                return False
def Dni(num):
    dni=[]
    dni.append(randrange(1,10001))
    for i in range(num):
        aleat=randrange(1,10001)
        a=compara(i,aleat,dni)
        if (a==True):
            dni.append(aleat)
        elif (a==False):
            i=i-1
    return dni
 
def CreaLista(num):
    dni=Dni(num)
    Lista=[]
    for i in range(num):
        v=[Nombre(),Apellidos(),Apellidos(),Edad(),dni[i]]
        Lista.append(v)
    return Lista
 
def creaF(num,lista):
    try:
        f=open('Datos.txt','w')
        for i in range(num):
            aux=lista[i]
            for j in range(len(aux)):
                f.write(str(aux[j])+' ')
            f.write('\n')
        f.close()
    except Exception as e:
        print 'Exception en funcion de creaF'+e
        sys.exit(-1)
 
 
def main(argv):
    print argv
    aux= CompruebaArgv(argv)
    if aux!=False:
        print aux
        seed()
        Datos=CreaLista(aux)
        creaF(aux,Datos)
    else:
        print 'FIN'
 
 
if __name__=="__main__":
    main(sys.argv)

Ya he completado la primera parte, tengo un programa que al introducirle un numero en la llamada del mismo, te crea una lista de lista, de "argv" posiciones, donde cada sublista es de la forma V=[Nombre, apellido1, apellido2, edad, DNI] y luego escribe dicha lista de listas en Datos.txt

La cosa, es que para continuar, tendria que saber meter los datos de Datos.txt, en una lista de listas.
Y no se como hacerlo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar