Python - ciclos anidados impares

 
Vista:
sin imagen de perfil

ciclos anidados impares

Publicado por Nicolas (5 intervenciones) el 15/05/2017 02:42:10
Hola, necesito ayuda, soy estudiante de primer año de informatica

Lee numeros e imprime los impares con la dificultad que por cada 0 el siguiente digito impar no se imprime. Termina despues del tercer digito impreso

ej:

1324051>131
0321235>135
001234579>579

Gracias :)
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
sin imagen de perfil

ciclos anidados impares

Publicado por CpA (33 intervenciones) el 16/05/2017 21:18:23
Es bastante sencillo.
Te pongo el código tal y como lo he ideado yo. Yo trato la cadena de entrada como "texto". Si usas python 2.x, tendrás que cambiar el input por un input_raw para que te funcione...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cadenaimpares=input("Introduce la cadena de impares: ")
 
cerodetected=False
conteoimpares=0
numerofinal=""
generator = (c for c in cadenaimpares if len(numerofinal) < 3)
for c in generator:
        if c in "0123456789": # es número, comprobamos que el caracter realmente es un número
            if not int(c):                         # si es un cero
                cerodetected = True
            elif int(c) %2 and not cerodetected:   # es impar y el anterior no era un cero
                numerofinal += c                   # añadimos el dígito a nuestro número
            elif int(c) %2 and cerodetected:       # es impar y el anterior era un cero
                cerodetected = 0                   # reseteamos la bandera del cero
print("{}>{}".format(cadenaimpares,numerofinal))

Utilizo un generador para el bucle. Si es un problema planteado en una academia de estudios y no habéis dado los generadores, puede sustituirse por:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cadenaimpares=input("Introduce la cadena de impares: ")
 
cerodetected=False
conteoimpares=0
numerofinal=""
 
for c in cadenaimpares:
    if not len(numerofinal) < 3:                   # Ya tenemos los tres números
        break
    if c in "0123456789": # es número          # comprobamos que el caracter realmente es un número
        if not int(c):                         # si es un cero
            cerodetected = True
        elif int(c) %2 and not cerodetected:   # es impar y el anterior no era un cero
            numerofinal += c                   # añadimos el dígito a nuestro número
        elif int(c) %2 and cerodetected:       # es impar y el anterior era un cero
            cerodetected = 0                   # reseteamos la bandera del cero
print("{}>{}".format(cadenaimpares,numerofinal))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

ciclos anidados impares

Publicado por Nicolas (5 intervenciones) el 16/05/2017 21:28:33
Muchas graciaas, aunque el profesor nos habia dicho que usaramos el for c in range
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

ciclos anidados impares

Publicado por CpA (33 intervenciones) el 16/05/2017 22:29:40
Pues bueno, también es otra opción, aunque más enrevesada... Quedaría así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cadenaimpares=input("Introduce la cadena de impares: ")
 
cerodetected=False
conteoimpares=0
numerofinal=""
 
for c in range(0,len(cadenaimpares)):
    if not len(numerofinal) < 3:
        break
    if cadenaimpares[c] in "0123456789":
        if not int(cadenaimpares[c]):
            cerodetected = True
        elif int(cadenaimpares[c]) %2 and not cerodetected:
            numerofinal += cadenaimpares[c]
        elif int(cadenaimpares[c]) %2 and cerodetected:
            cerodetected = False
print("{}>{}".format(cadenaimpares,numerofinal))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

ciclos anidados impares

Publicado por Nicolas (5 intervenciones) el 16/05/2017 22:40:11
Muuuchas gracias :D
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
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

ciclos anidados impares

Publicado por kip (257 intervenciones) el 17/05/2017 05:08:04
Hola, te posteo otro codigo ademas del que te dieron:

Python 2.X

1
2
3
4
5
6
7
8
9
10
11
12
numeros = list(raw_input('Numeros: '))
impares = ""
zero = 0
for i in range(0, len(numeros)):
    if int(numeros[i]) == 0: zero += 1
    if int(numeros[i]) % 2 != 0:
        if zero > 0:
            zero -= 1
        else:
            impares += numeros[i]
    if len(impares) > 2: break
print impares

Python 3.X

1
2
3
4
5
6
7
8
9
10
11
12
numeros = list(input('Numeros: '))
impares = ""
zero = 0
for i in range(0, len(numeros)):
    if int(numeros[i]) == 0: zero += 1
    if int(numeros[i]) % 2 != 0:
        if zero > 0:
            zero -= 1
        else:
            impares += numeros[i]
    if len(impares) > 2: break
print(impares)

Te sirve asi tambien?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

ciclos anidados impares

Publicado por Nicolas (5 intervenciones) el 17/05/2017 05:51:44
Sii, graciaaaas :D
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