Python - algoritmo que lea de teclado una serie de dígitos que representa un númerobinario

 
Vista:

algoritmo que lea de teclado una serie de dígitos que representa un númerobinario

Publicado por marta (3 intervenciones) el 02/05/2017 18:59:36
Buenas,
Estoy realizando unos ejercos en pyhton y me he atascado en este ejercicio:
Implementa un algoritmo que lea de teclado una serie de dígitos que representa un númerobinario. Si algún carácter de la cadena es distinto de ’0’ o ’1’, el programa advertirá al usuario de que la cadena introducida no representa un número binario y pedirá de nuevo la lectura de la cadena. El algoritmo debe escribir el número decimal correspondiente a ese número binario.

Esto es lo que yo he hecho pero no funciona bien,

1
2
3
4
5
6
7
8
9
10
11
12
13
binario = input ("Escríbeme un número binario: ")
valor = 0
for i in binario:
while i != "0" and i != "1":
        print ("El número seleccionado no es binario. Por favor introduzca otro número: ")
        binario = input ()
if i == "1":
           valor += valor + 1
else i =="0":
        valor += valor
 
 
print ("Su valor decimal es", valor)



Alguien me puede ayudar,

muchas 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
Imágen de perfil de Andres Leonardo
Val: 113
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

algoritmo que lea de teclado una serie de dígitos que representa un númerobinario

Publicado por Andres Leonardo (40 intervenciones) el 02/05/2017 19:58:55
Espero con esto te de ayuda

valor += valor + (2 potencia i)

SAludos
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

algoritmo que lea de teclado una serie de dígitos que representa un númerobinario

Publicado por kip (257 intervenciones) el 03/05/2017 05:12:48
Hola, podria ser algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while True:
    binario = input("Escríbeme un número binario: ")
    exp = len(binario)
    decimal = 0
    for i in binario:
        if (int(i) > 1):
            print("Ingrese un número binario")
            decimal = 0
            break
        exp -= 1
        decimal += int(i) * (2 ** exp)
    if (decimal > 0):
        break
 
print ("Su valor decimal es", decimal)

Mantienes el while mientras un valor del número ingresado sea mayor a 1, caso contrario almacena en decimal el valor convertido a decimal del numero binario, para saber cuando debo salir del while simplemente verifico que la variable decimal haya aumentado su valor, ya que si te fijas en la verificacion donde encuentro un num diferente a 0 o 1 vuelvo a darle a decimal un valor de 0.

Para aquella transformacion simplemente segui estas reglas:

El proceso para convertir un número del sistema binario al decimal es aún más sencillo; basta con desarrollar el número, teniendo en cuenta el valor de cada dígito en su posición, que es el de una potencia de 2, cuyo exponente es 0 en el bit situado más a la derecha, y se incrementa en una unidad según vamos avanzando posiciones hacia la izquierda.

http://platea.pntic.mec.es/~lgonzale/tic/binarios/numeracion.html

Aunque tambien puedes hacerlo simplemente asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
while True:
    binario = input("Escríbeme un número binario: ")
    decimal = 0
    for i in binario:
        if (int(i) > 1):
            print("Ingrese un número binario")
            decimal = 0
            break
        if i == '0':
            decimal = decimal * 2
        else:
            decimal = decimal * 2 + 1
    if (decimal > 0):
        break
 
print ("Su valor decimal es", decimal)

Esta forma es mas simple, ya que cuando el valor es 0 tomas el valor de la variable decimal y lo multiplicas por 2 este resultado sera el nuevo valor de decimal, cuando el valor es 1 tomas el valor de la variable decimal y lo multiplicas por 2 pero le sumas un 1 y como antes, este resultado sera el nuevo valor de decimal, asi en cada iteracion.

Pruebalo y nos cuentas.
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

algoritmo que lea de teclado una serie de dígitos que representa un númerobinario

Publicado por marta (3 intervenciones) el 03/05/2017 20:31:17
Buenas,
llevo un rato intentandolo otra vez pero me sigue sin salir ya que al escribir un número que no es binario y luego un número binario me vuelve a pedir el número

Escribe un número binario: 2001
El numero que has introducido no es un número binario. Escriba otro número, recuerde que estan formados por 0 y 1
1001
El numero que has introducido no es un número binario. Escriba otro número, recuerde que estan formados por 0 y 1
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

algoritmo que lea de teclado una serie de dígitos que representa un númerobinario

Publicado por kip (257 intervenciones) el 03/05/2017 20:35:29
Yo lo acabo de probar y funciona Marta !

1
2
Escríbeme un número binario:  1001
Su valor decimal es 9

Probaste con el codigo que coloque arriba ? o modificaste el tuyo en base a este? Si es asi colocalo !

Donde estas ejecutando el codigo ? en el IDLE de 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

algoritmo que lea de teclado una serie de dígitos que representa un númerobinario

Publicado por Marta (3 intervenciones) el 03/05/2017 22:16:53
Ya lo he modificado había cometido un error al pasarlo
Lo siento y muchísimas gracias por vuestra ayuda me ha sido de gran utlididad
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
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

algoritmo que lea de teclado una serie de dígitos que representa un númerobinario

Publicado por tincopasan (1082 intervenciones) el 03/05/2017 05:24:24
te muestro una forma de hacerlo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#-*- coding: utf-8 -*-
valor = ["0","1"]
contador= 0
numero=""
while contador < 8:
    binario = input ("Escribe un número binario, sólo 0 ó 1: ")
    if binario in valor:
        numero= numero + binario
        contador+=1
    else:
        print("No es un numero binario")
 
decimal=int(numero,2)
print ("El valor decimal de {} es {}".format(numero,decimal))
puse que tome 8 caracteres porque sino no sabemos cuando decirle que termine de leer.Cualquier duda puedes consultar
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