John Fouhy wrote:
> On 12/03/07, Jaggo <[EMAIL PROTECTED]> wrote:
>> Hey,
>> I'm a rather new programmer, but it seems to me the digital to roman should
>> be coded:
>> While Digital_Input > 0:
>> If Digital_Input > 1000 then: Roman = + M, Digital_Input = - 1000
>> elif Digital_Input > 900 then: Roman = + C, Digital_Input = - 900
>> ...
>> Now if someone could please clarify [or forward me to clarifications of-]
>> separation of data from logics I should be very grateful.
> 
> The idea is that our data is the information:
>  1000 corresponds to 'M'
>  500 corresponds to 'D'
>  100 corresponds to 'C'
>  etc..
> 
> We can represent that in python using a dictionary:
> 
> decToRomanData = { 1000:'M', 500:'D', 100:'C', 50:'L', 10:'X', 5:'V', 1:'I' }

A list would probably work better here because the order is significant 
and random lookup is not.
> 
> Now we need to write some code that will take an integer and use our
> data to convert to a Roman numeral.  One way we could do that is:
> 
> def decToRoman(dec):
>         roman = ''
>         while dec > 0:
>                 next = max(i for i in decToRomanData if dec >= i)
>                 roman += decToRomanData[next]
>                 dec -= next
>         return roman

Remember this thread started as a homework problem...we shouldn't give 
solutions until the OP has one already. Then we can all get clever and 
show how we would have done it :-)
> 
> Now, if we suddenly remember that the romans used 'Q' to represent
> 250, we can just edit our dictionary, and the rest of the code will
> remain the same.
> 
> [note that this code will not produce strings like 'IV' for 4.  OTOH,
> as I recall, the Romans didn't do that consistently either..]

It seems to me that isn't so different from deciding to use 'Q' for 250. 
Maybe you can change the dictionary for this one too.

Kent
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to