"Chris Castillo" <ctc...@gmail.com> wrote

well i want to use a for loop to work from the right most digit to the left most digit at a negative 1 increment. For each digit i want to divide it by 1/base and add the next digit. Then I need to take that sum and multiply it
by 1/b to get the decimal equivalent

so when I say that to myself i see:
number = 234
mysum = 0
for digit in range(len(number) -1, -1, -1):
   mysum = (mysum) * (1/base) + int(number[digit])

Lets walk that algorithm for base 10...

Loop 1 - mysum = 0 * 1/10 + 4 => 4
Loop 2 - mysum = 4 * 1/10 + 3 => 3.4
Loop 3 - mysum = 3.4 * 1/10 +2 => 2.34

That's not what you were looking for I suspect?
You still need the final division...

But I still think its easier to get the digits directly using

for digit in reversed(list('234')):

And the calculation then becomes:

  mysum = mysum * (1/base) + int(digit)

But that gives the same result.

I think you want:

 mysum = (mysum + int(digit))/base

So walking the loop gives

loop 1 - mysum = (0 + 4)/10 -> 0.4
loop 2 - mysum = (0.4 + 3)/10 -> 0.34
loop 3 - mysum = (0.34 + 2)/10 -> 0.234

However I still think converting to int and then dividing by base**len(n)
is easier.

mysum = int('234')/10**len('234') -> 234/1000 -> 0.234

Is there a particular reason for you using the looping algorithm
rather than the tools in Python?

--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/


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

Reply via email to