Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 30, 2010 19:02:39

breidos
От:
Зарегистрирован: 2010-09-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

bin2dec

Хочу сделать программу, которая переводила бы двоичные числа в десятичные.

y='101010'
i=0
j=0
l=len(y)-1
dl=len(y)
while j<dl:
s=''
s=str(int(y[i])*(pow(2,l)))
i=i+1
j=j+1
l=l-1
print s,
>>>32 0 8 0 2 0
Мне бы еще сложить все полученные числа. Подскажите как сделать.
И еще один вопрос: вот допустим я пишут код в начале как бы есть текст:
print "| ® |
Ну вообщем какая та информация. Можно эту информацию как бы сохранить в отдельном файле, а потом просто в коде как бы сделать ссылку на нее?
Подскажите как реализовать подобные вещи?

И еще 1 вопрос: вот я хочу отловить ошибку если допустим введенное число будет не двоичным, т.е. в введенном числе будут какие либо символы кроме 0 и 1. Чем бы воспользоваться в этом случае?



Отредактировано (Сен. 30, 2010 20:09:59)

Офлайн

#2 Сен. 30, 2010 20:48:30

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

bin2dec

1. Самое простое - завести переменную и наращивать сумму в ней.
2. import ?
3. set(sorted(ваша строка)) !=

Теперь мои предложения:
На мой взгляд в вашем коде много лишних переменных. Попробуйте от них избавиться.
Для начала попробуйте цикл while можно заменить на for i in xrange(len(y))
И еще - переводить s в строку не нужно.



Офлайн

#3 Окт. 1, 2010 01:27:07

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

bin2dec

while 1:
y = raw_input('vvedite bin (0 or 1):')
if not y: break
if y.count('1') + y.count('0') != len(y) :
print 'tolko 0 and 1'
continue

dec = 0
for x in range(0,len(y)):
dec += 2**x if y[len(y)-x-1] == '1' else 0

print y, ' -> ',dec



Офлайн

#4 Окт. 1, 2010 08:09:00

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

bin2dec

while True:
y = raw_input('Enter binary number (0 or 1):')
if not y: break
if set(y)-{'0','1'}: continue

dec = sum( 2**i for i, c in enumerate(reversed(y)) if c =='1' )

print( y, '->', dec )
print( 'Check: ', y, '->', int( y, 2 ) )



Отредактировано (Окт. 1, 2010 09:52:34)

Офлайн

#5 Окт. 1, 2010 11:27:27

breidos
От:
Зарегистрирован: 2010-09-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

bin2dec

Спасибо всем за ответы, помогли. Вот пытаюсь ограничить длину вводимого числа:

if  x.count('1')+x.count('0')!=len(x) or len(x)>(2**32)::
print 'Вы ввели некорректное число.'
если писать
if  x.count('1')+x.count('0')!=len(x):
print 'Вы ввели некорректное число.'
все работает :(



Отредактировано (Окт. 1, 2010 11:38:33)

Офлайн

#6 Окт. 1, 2010 11:54:11

breidos
От:
Зарегистрирован: 2010-09-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

bin2dec

ПС. Все работает, сам изначально неправильное условие написал )



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version