[python] Vracení dat se jménem.
Leos Pol
leos na radiante-corp.com
Neděle Únor 25 23:17:08 CET 2007
Zdravim,
Jakub Vojáček napsal(a):
> Ale těch "if" by bylo spoustu a mohl bych v nich udělat chybu. Spíš by to chtělo něco funkci:
> def usu(self,uhel1,strana,uhel2):
> #pocitani
> #return hodnoty
>
Ano, ve fci "pocitej" by mel byt slozeny if, ktery by rozdelil problem a
volal by jednotlive fce pro sss, sus, a usu. Nebo mozna neco podobneho
tomuto:
class triangle:
def sss(self, input):
...
return input
def sus(self, input):
...
return input
def usu(self, input):
...
return input
def pocitej(self, input, typ):
if typ in ('sss', 'sus', 'usu'):
return getattr(self, typ)(input)
else:
raise InvalidType('something')
> tato funkce může spočítat velikosti zbývajicích stran, ale neví, jestli je tohle strana "a", nebo "b". Proto bych potřeboval poradit jakým způsobem tohleto řešit, jestli nakonec nebudu muset psát řešení pro každou možnou variantu. Snad jsem to vysvětlil dobře .
>
Priklad pro usu:
from math import sin, radians
#setup
sides = ('a', 'b', 'c')
angles = ('alpha', 'beta', 'gamma')
mapping = {}
for i in range(len(sides)):
mapping[sides[i]] = angles[i]
#input
data = {'b': 5, 'beta': 15, 'gamma': 60}
#filtering
inpSide = filter(lambda x:x in data, sides)[0]
inpAngles = filter(lambda x:x in data, angles)
remSides = filter(lambda x:x not in data, sides)
remAngle = filter(lambda x:x not in data, angles)[0]
#calculating
data[remAngle] = 180 - sum(map(lambda x:data[x], inpAngles))
for side in remSides:
inpSideSin = sin(radians(data[mapping[inpSide]]))
sideSin = sin(radians(data[mapping[side]]))
data[side] = round(data[inpSide]/inpSideSin * sideSin, 2)
#printing
print 'Input:\n\tSide: %s\n\tAngles: %s' % (repr(inpSide), inpAngles)
print 'Calc:\n\tSides: %s\n\tAngle: %s' % (remSides, repr(remAngle))
print 'Result:\n\t%s' % data
Myslim, ze by to chtelo pridat jeste nejake kontroly, jestli je vsechno
zadano jak ma.
> Děkuju za každou pomoc a sory že otravuju, ale už fakt nevim:(:(
>
Doufam, ze jsem trosku pomohl. Je mozne, ze by slo vse spojit do jedne
fce, ale uz je moc pozde a mne se nechce premyslet ;-).
Leo
--
----
Leos Pol
SW Engineer
Radiante Corp.
If it can be imagined,
we can implement it
Další informace o konferenci Python