Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 17, 2012 18:55:50

AlexSSpirit
От:
Зарегистрирован: 2012-03-07
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание Конвертера

ЗаданиЕ:
В версте 500 саженей, в сажене 3 аршина, в аршине 4 пяди, в пяди 4 вершка. Вершок это 4,445 см. Напишите программу, которая позволит узнать длину в любой единице измерения, зная другую.

def c(v2=4.445):
	p=v2*4
	a=p*4
	s=a*3
	v=500*s
	return p,a,s,v
c(123214)
(492856, 1971424, 5914272, 2957136000)
-у меня только так полуачется:(

А как сделать так, чтоб к любой переменной можно было приходить, и получать от неё значения к остальным.
Подскажите пожалуйста ребят, как составить правильный код.



Отредактировано AlexSSpirit (Июнь 17, 2012 18:57:19)

Офлайн

#2 Июнь 17, 2012 22:41:40

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Создание Конвертера

class Length(object):
 
    def from_feet(value):
        return {'meters': value * 0.3048, 'yards': value / 3.0}
  
    def from_meters(value):
        return {'feet': value * 3.2808399, 'yards': value * 1.0936133}
  
    def from_yards(value):
        return {'meters': value * 0.9144, 'feet': value * 3}
  
    converter = {'from_meters': from_meters,
                 'from_feet': from_feet,
                 'from_yards': from_yards}
    
    def __init__(self, value, measure_in='meters'):
        self.value = { measure_in: value }
        self.value.update(self.converter['from_' + measure_in](value))
  
    @property
    def meters(self):
        return self.value['meters']
 
    @property
    def feet(self):
        return self.value['feet']
 
    @property
    def yards(self):
        return self.value['yards']

>>> from converter import Length
>>> obj = Length(100)
>>> obj.meters
100
>>> obj.feet
328.08399000000003
>>> obj.yards
109.36133
>>> new_obj = Length(100, 'yards')
>>> new_obj.meters
91.44
>>> new_obj.yards
100
>>> new_obj.feet
300



Отредактировано fata1ex (Июнь 18, 2012 02:35:02)

Офлайн

#3 Июнь 18, 2012 00:51:47

AlexSSpirit
От:
Зарегистрирован: 2012-03-07
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание Конвертера

Некоторая часть кода мне не понятна, т.к. я её не изучал ещё. Да и задача вроде как должна была уложиться в код без таких фишек потип:
class Length(object):
def __init__(self, value, measure_in='meters')
@property
да и словари я ещё не изучал)



Офлайн

#4 Июнь 18, 2012 02:10:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9914
Репутация: +  855  -
Профиль   Отправить e-mail  

Создание Конвертера

def f(ediz, val):
    # vea,    saj,   arn,    pya,  vek,     met
    # verstа, sajen, arshin, pyad, vershok, metri
    #
    # versta  =     500 * sajen
    # sajen   =       3 * arshin
    # arshin  =       4 * pyad
    # pyad    =       4 * vershok
    # vershok = 0.04445 * m
    #
    res = None
    if ediz == 'vea':
        res = (val, val * 500, val * 1500, val * 6000,
               val * 24000, val * (24000 * 0.04445))
    elif ediz == 'saj':
        res = (val / 500, val, val * 3, val * 12,
               val * 48, val * 48 * 0.04445)
    elif ediz == 'arn':
        res = (val / 1500, val / 3, val, val * 4,
               val * 16, val * 16 * 0.04445)
    elif ediz == 'pya':
        res = (val / 6000, val / 12, val / 4, val,
               val * 4, val * 4 * 0.04445)
    elif ediz == 'vek':
        res = (val / 24000, val / 48, val / 16,
               val / 4, val, val * 0.04445)
    elif ediz == 'met':
        res = (val / (24000 * 0.04445), val / (48 * 0.04445),
               val / (16 * 0.04445), val / (4 * 0.04445),
               val / 0.04445, val)
    return res
>>> f('vea', 1)
(1, 500, 1500, 6000, 24000, 1066.8000000000002)
>>> f('saj', 1)
(0.002, 1, 3, 12, 48, 2.1336000000000004)
>>> f('arn', 1)
(0.0006666666666666666, 0.3333333333333333, 1, 4, 16, 0.7112)
>>> f('pya', 1)
(0.00016666666666666666, 0.08333333333333333, 0.25, 1, 4, 0.1778)
>>> f('vek', 1)
(4.1666666666666665e-05, 0.020833333333333332, 0.0625, 0.25, 1, 0.04445)
>>> f('met', 1)
(0.0009373828271466065, 0.46869141357330324, 1.4060742407199098, 5.624296962879639, 22.497187851518557, 1)
>>>

add
со словарём и без метров
def convert_ancient(ediz, val):
    # vea,    saj,   arn,    pya,  vek,   
    # verstа, sajen, arshin, pyad, vershok
    #
    # versta  =  500 * sajen
    # sajen   =    3 * arshin
    # arshin  =    4 * pyad
    # pyad    =    4 * vershok
    # vershok =    0.04445 m
    #
    d = {'vea': 24000 * 0.04445,
         'saj': 48 * 0.04445,
         'arn': 16 * 0.04445,
         'pya': 4 * 0.04445,
         'vek': 0.04445}
    metri = val * d[ediz]
    return (metri / d['vea'], metri / d['saj'],
            metri / d['arn'], metri / d['pya'],
            metri / d['vek'])
>>> convert_ancient('vea', 1)
(1.0, 500.0, 1500.0000000000002, 6000.000000000001, 24000.000000000004)
>>> convert_ancient('saj', 1)
(0.002, 1.0, 3.0000000000000004, 12.000000000000002, 48.00000000000001)
>>> convert_ancient('arn', 1)
(0.0006666666666666666, 0.3333333333333333, 1.0, 4.0, 16.0)
>>> convert_ancient('pya', 1)
(0.00016666666666666666, 0.08333333333333333, 0.25, 1.0, 4.0)
>>> convert_ancient('vek', 1)
(4.1666666666666665e-05, 0.020833333333333332, 0.0625, 0.25, 1.0)
>>>



Отредактировано py.user.next (Июнь 18, 2012 07:27:53)

Офлайн

#5 Июнь 18, 2012 02:31:12

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Создание Конвертера

AlexSSpirit, задачу “уложить в код” вообще можно, используя только несколько базовых операций. Другое дело - насколько этот код будет удобно читать и сопровождать. Поэтому можете взять код py.user.next, но с “фишками” из моего варианта всё же советую понемногу начинать знакомиться. Если, конечно, есть желание, и это не просто задание для зачета/контрольной и тп.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version