Форум сайта python.su
ЗаданиЕ:
В версте 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)
Офлайн
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)
Офлайн
Некоторая часть кода мне не понятна, т.к. я её не изучал ещё. Да и задача вроде как должна была уложиться в код без таких фишек потип:
class Length(object):
def __init__(self, value, measure_in='meters')
@property
да и словари я ещё не изучал)
Офлайн
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) >>>
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)
Офлайн
AlexSSpirit, задачу “уложить в код” вообще можно, используя только несколько базовых операций. Другое дело - насколько этот код будет удобно читать и сопровождать. Поэтому можете взять код py.user.next, но с “фишками” из моего варианта всё же советую понемногу начинать знакомиться. Если, конечно, есть желание, и это не просто задание для зачета/контрольной и тп.
Офлайн