Am 11.09.2010 15:46, schrieb Joel Goldstick:
On Sat, Sep 11, 2010 at 9:25 AM, Rance Hall <ran...@gmail.com
<mailto:ran...@gmail.com>> wrote:
On Fri, Sep 10, 2010 at 6:14 PM, Lie Ryan <lie.1...@gmail.com
<mailto:lie.1...@gmail.com>> wrote:
> On 09/11/10 07:36, Rance Hall wrote:
<snip>
> In most cases in Python, you would almost never need to reference the
> list's index directly since python makes it easy to use iterators;
> however in your particular case, which is a valid exception,
enumerate()
> takes an optional second argument `start` which defines the
number that
> enumerate start to count with, i.e. you can do:
>
> for i, option in enumerate(mainmenuoptions, 1):
> print('%s. %s' % (i, option))
>
>> php provided a way to change this, but I can find no documentation
>> that says python can do this as well.
>
Thanks everyone for responding, Because this menu structure is
repeated many times in my code, the ideal solution would have been to
"set index start = 1" in the beginning of the script.
something like sysctl variables in Linux perhaps but in this case only
valid for this program.
Its clear from the responses that this solution is not available in
python, I wish it were, it would make my life much easier for this
project.
I like the approach that Lie suggested, as it seems more "natural
python" to me as opposed to a workaround.
However this is also only half a solution since it applies to the
printed menus only and not to the response afterward.
It might be more trouble than its worth, but you could use a dictionary:
Instead of this:
mainmenuoptions = ['Clients','Jobs','Billing','Quotes','To Do
Items','Employee','Exit']
do this:
mainmenuoptions = {'Clients': 1,'Jobs': 2,'Billing': 3,'Quotes':
4,'To Do
Items': 5,'Employee': 6,'Exit': 7}
Use the phrases as key, and the value as your numeric index. Or you could
reverse {1: 'Clients', ...
if that suites your already written code.
If you use this pattern in many places, could you not refactor so that
you call
the process with the menu data structures as parameters, and fix the code
in a single place?
+1 for the dictionary. A variation of Joels suggestion might be:
shortcuts_to_name_and_functions = {1: ['Clients', clientsmenu], 2:
['Jobs', jobsmenu]}
for shortcut, name_and_func in shortcuts_to_name_and_functions.items():
print "%s. %s" % (shortcut, name_and_func[0])
# later make your call
shortcuts_to_name_and_functions[mainchoice][1]()
It seems that Luke is right looks like we have to do math with the
indexes.
Lie also referred to my particular case as a valid exception, are
there enough other such valid exceptions that requesting a feature
enhancement would gain some traction?
If this is but one of a few special cases, I doubt it would be worth
the time or trouble to formally make the request.
Maybe I should ask if there is a better way to do what I want to do
here. Is there?
_______________________________________________
Tutor maillist - Tutor@python.org <mailto:Tutor@python.org>
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor
--
Joel Goldstick
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor