2016-01-25 2 views
-3

Мне не удалось сдавать экзамен из-за одного вопроса. Задача:Python - любая база до десятичной (other2dec)

«Разработка программы, которая преобразует любое число из любой системы счисления в десятичную
Ограничатся системы в диапазоне от 2 до 22.».

Итак, я здесь. Я знаю двоичные [2], восьмеричные [8], десятичные [10] и шестнадцатеричные [16] системы. Там в 1 пункт для каждой системы преобразования, поэтому он должен быть конвертер:

2-> 10
3-> 10
...
22-> 10

Я понятия не имею, как это возможно. Я спросил у своего профессора после экзамена, как это сделать, и он сказал: «Просто х власть у, размножайтесь, и вот оно. Это одно и то же правило для всех».

Возможно, я ошибаюсь в том, что он сказал, потому что я был в состоянии после экзамена сознания. Вы, ребята, не знаете, как его решить?

Я вижу, что в stackoverflow уже было несколько вопросов, но никто из них не решает проблему так, как сказал мой профессор. Кроме того, мы начали изучать Python ~ 4 месяца назад, и мы не изучили некоторые варианты, реализованные в ответах.

"" "В
ул/Int любое основание [2-22]
OUT
десятичного INT или поплавок" ""

+1

[Это] (Http: //www.purplemath. com/modules/numbbase.htm) должно помочь вам понять, что сказал ваш профессор. – SirParselot

+0

Это не место для вас, чтобы решить домашнюю работу/задачу. Покажите нам, что вы пробовали, и знаете, как изменить базу номера без использования калькулятора/вычисления? – Jeremy

+0

Что вы пробовали? Подсказка: если я дам вам этот номер и скажу вам, что он находится в базе 4, вы можете выяснить, что такое его десятичный эквивалент? 313223 Как вы это сделали? –

ответ

1

основные этапы так:

  1. понять какая у вас база (для моего понимания это дано как var для вас)
  2. для каждого из символов на входном номере вы умножаете его на базу на мощность местоположения. так что «654», основание 17 -> «6 * 17^2 + 5 * 17^1 + 4 * 17^0»
  3. сумма - ваш ответ.
+0

Я удалил предыдущий комментарий, мой плохой. Ты прав! Благодаря! –

3

Я просто закодировал ответ, но был слишком медленным. Этот код следует точно daTokenizers решение

def converter(number, base): 
    #split number in figures 
    figures = [int(i) for i in str(number)] 
    #invert oder of figures (lowest count first) 
    figures = figures[::-1] 
    result = 0 
    #loop over all figures 
    for i in range(len(figures)): 
     #add the contirbution of the i-th figure 
     result += figures[i]*base**i 
     print figures[i] 
    return result 

    print converter(10,22) 
+1

Необходимо исправить ваш отступ. Это не легальный питон, как показано. –

+0

Спасибо, не проверял после копирования. Эта отредактированная версия должна это сделать – Glostas

+0

Спасибо, ваш код выглядит очень хорошо, и я это понимаю. Это действительно то, что я искал. Я не мог себе представить, что все так просто. –

0

Если п число, конвертировать из базовых 'другого' в десятичную, попробуйте это:

>>> other2dec = lambda n, other: sum([(int(v) * other**i) for i, v in enumerate(list(str(n))[::-1])]) 
>>> other2dec(71,8) 
57 
>>> other2dec(1011,2) 
11 
+0

Ну, это не так просто, как я ожидал, но это рассказ и работает очень, очень хорошо. Теперь я буду сидеть и смотреть на этот код, пытаясь понять все. Большое спасибо! –

+0

Предложение SirParselot 'int (str, x)' - ответ, который вы ищете. Для получения дополнительной информации: http://stackoverflow.com/questions/209513/convert-hex-string-to-int-in-python – Quinn

Смежные вопросы