(Very Newbie) Problems defining a variable
MRAB
google at mrabarnett.plus.com
Fri Dec 12 13:30:19 EST 2008
Tim Rowe wrote:
> Since we all seem to be having a go, here's my take. By pulling the
> rates and thresholds into a dictionary I feel I'm getting a step
> closer to the real world, where these would presumably be pulled in
> from a database and the number of interest bands might vary. But is
> there a tidier way to get 'thresholds'? I was a bit surprised that
> rates.keys() didn't give me a list directly, so although the 3.0
> tutorial says "The keys() method of a dictionary object returns a list
> of all the keys used in the dictionary, in arbitrary order (if you
> want it sorted, just apply the sort() method to )" that's not /quite/
> such a given, because "the list of keys" doesn't seem to be there for
> the sorting any more.
>
> Is there a tidy way of making rates and thresholds local to get_rate,
> without recalculating each time? I suppose going object oriented is
> the proper way.
>
> #Py3k,UTF-8
>
> rates = {0: 0.006, 10000: 0.0085, 25000: 0.0124, 50000: 0.0149, 100000: 0.0173}
> thresholds = list(rates.keys())
> thresholds.sort()
> thresholds.reverse()
>
Why are you putting them into a dict at all? Surely a list of tuples is
better?
# I could've just written the list in descending order here!
rates = [(0, 0.006), (10000, 0.0085), (25000, 0.0124), (50000, 0.0149),
(100000, 0.0173)]
thresholds.sort(reversed=True)
> def get_rate(balance):
> for threshold in thresholds:
> if balance >= threshold:
> return rates[threshold]
> else:
> return 0.0
>
def get_rate(balance):
for threshold, rate in thresholds:
if balance >= threshold:
return rate
return 0.0
> balance = int(input("How much money is in your account?\n>>"))
> target = int(input("How much money would you like to earn each year?\n>>"))
>
> if balance <= 0:
> print("You'll never make your fortune that way!\n")
> else:
> interest = 0
> year = 0
> while interest < target:
> rate = get_rate(balance)
> interest = balance * rate
> balance += interest
> year += 1
> print("Year %s, at %s rate: %s paid, %s in bank." % (year,
> rate, interest, balance))
>
More information about the Python-list
mailing list