Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция, которая конвектирует, Помогите написать фукцию в Python 
:(
    Опции темы
Igor2012
Дата 3.3.2015, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.3.2015

Репутация: нет
Всего: нет



Помогите разработать функцию convert_n_to_m(x, n, m),
которая принимает 3 аргумента -- целое число (в системе счисления с основанием n) или строку x, которая представляет такое число, и целые числа n и m (1 <= n, m <= 36),
и возвращает строку -- представление числа х в системе счисления m.

В случае, если аргумент х не является числом или строкой, или не может быть представлением неотъемлемого целого числа в системе счисления с основанием n, вернуть логическую константу False.

В системах счисления с основанием больше десяти для обозначения разрядов со значением больше 9 использовать буквы латинского алфавита в верхнем регистре от A до Z.

Считать, что в единичной системе счисления число записывается соответствующим количеством нулей.

Например
Вызов функции: convert_n_to_m([123], 4, 3)
Возвращает: False
Вызов функции: convert_n_to_m("0123", 5, 6)
Возвращает: 102
Вызов функции: convert_n_to_m("123", 3, 5)
Возвращает: False
Вызов функции: convert_n_to_m(123, 4, 1)
Возвращает: 000000000000000000000000000
Вызов функции: convert_n_to_m(-123.0, 11, 16)
Возвращает: False
Вызов функции: convert_n_to_m("A1Z", 36, 16)
Возвращает: 32E7
Я начал изучать Python. Вот застрял на этой задаче. Помогите, кто разбирается в Python. Заранее спасибо.
PM MAIL   Вверх
baldman88
Дата 4.3.2015, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 2
Всего: 7



Ну так хоть покажите до чего Вы дошли. Иначе Вам в раздел "Центр помощи".
И, если не секрет, откуда это задание?

Это сообщение отредактировал(а) baldman88 - 4.3.2015, 16:49
PM MAIL   Вверх
Romikgy
Дата 4.3.2015, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Код

def baseN(num,b,numerals="0123456789abcdefghijklmnopqrstuvwxyz"):
    return ((num == 0) and numerals[0]) or (baseN(num // b, b, numerals).lstrip(numerals[0]) + numerals[num % b])

def convert_n_to_m(x,n,m):
    if n<1: return False
    if m<1 or m>36: return False
    if type(x)==type(0):
        #numeric
        if m==1:
            d='%d'%x
            try:
                d=int(d,n)
                return '0'*d
            except:
                return False
        else:
            return baseN(x,n).upper()
    elif type(x)==type(''):
        #string
        if m==1:
            try:
                d=int(x,n)
                return '0'*d
            except:
                return False
        else:
            try:
                q=int(x,n)
                return baseN(q,m).upper()
            except:
                return False
    else:
        return False



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
baldman88
Дата 5.3.2015, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 2
Всего: 7



Монструозный вариант, зато одной функцией  smile 
Код

def convert_n_to_m(x, n, m):
    symbols = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    if (((type(x) != str) and (type(x) != int)) or (n < 1) or (n > 36) or (m < 1) or (m > 36)):
        return False
    else:
        if (type(x) == int):
            x = str(x)
        if (False in map(lambda symbol: True if (symbol in symbols[0 : n]) else False, x)):
            return False
        else:
            value = len(x) if (n == 1) else int(x, n)
            result = ""
            if (m > 1):
                while (value > 0):
                    result += str(symbols[value % m])
                    value /=  m
            else:
                result = '0' * value
            return result[ : : -1]


Это сообщение отредактировал(а) baldman88 - 5.3.2015, 16:50
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0777 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.