On 12/15/2014 05:59 PM, Dave Angel wrote:
On 12/15/2014 04:25 PM, Ken G. wrote:
I am sure there is a better way to refine the following lines.
Letting x equal a number from 1 to 28, go through 28 separate 'if'
statements to print a resulting value that equaled the value of x.
For example:
x = 8
if x = 1, print 'one'
if x = 2, print 'two'
...
...
if x = 8, print 'eight'
...
...
if x = 28, print 'twenty eight'
Would a single line using list or dictionary be shorter?
If this is an assignment, and you quoted it correctly, then you're
required to go through 28 if statements. On the other hand, if that
paragraph is just a description of the way you solved it, then yes, it
can be improved. Just making all but the first if statement an elif
will make it faster, because once it finds a value, it won't continue
checking the remaining ones.
Still faster would be testing first for fourteen, and making a tree
out of the if statements, using > and < comparisons instead of only ==
comparisons. Worst case would be about 5 tests. This would not be
more compact, just quicker to execute.
Faster yet, and somewhat more compact would be to make a tuple or list
of 29 items (0 through 28), and just index into it.
Slower, but more compact, would be to write the kind of library that
Danny pointed you to, or the code that Ken/Bod alluded to.
But the real question is what's your goal. Your original code isn't
legal Python, so you're presumably in a learning mode. If so, you
want to keep it simple, not use 3rd party libraries for something you
could do yourself. And when you're given an assignment, you should do
it exactly the way they want it, and only after that's correct (and
running), do it also in other ways. Those other ways could be to
improve performance, reduce size, make it more readable (or less, to
enter it in obfuscation contests), to make it independent of any
loaded libraries, to look like some sample in another language, ...
My second suggestion, untested:
if x < 14:
if x < 7:
if x < 3:
if x == 1:
print ("one")
else:
print ("two")
elif x < 5:
if x == 3:
print ("three")
else:
print ("four")
....
Oh, it is not an assignment, Dave. It is an actual program I am using
for my benefit. I had to figure out on a fly, what is the name of a piece
of property that each number represent. I had to reckon something out
within a limited amount of time I had. Giving the response given here
so far, I could go with a list, dictionary or tuple.
Thanks for your input.
Ken
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor