[Tutor] Indexing a list with nested tuples

Alexander Quest alexxquest at gmail.com
Thu Aug 4 01:05:22 CEST 2011


Hi Bob- thanks for the reply again. I apologize about not "replying all"
last time- still getting in the habit of doing this.

I am using Python version 3.1. As far as tuples are concerned, I don't NEED
to use them, but I am trying to get some practice with them. This is because
I am following an instructional book that is discussing nested tuples within
lists.
The way I get the "selection" variable from the user is just by typing the
following: selection = input("Selection: ")

I'm not sure why it reads it initially as a string, but I later included the
line selection = int(selection), which solved the int/str problem.

Also, I was about to switch to dictionaries or just lists without tuples,
but another poster above stated that I could just replace the entire tuple
item within the list, which technically would not be changing the tuple, so
it worked out. The only problem I have now is trying to sort the 4
attributes based on their numerical value, not their alphabetical value. But
when I type in  attributes.sort(reverse=True), it sorts them alphabetically
because the name of the attribute is 1st in the list, and its value is 2nd.
Here it is again for reference: attributes = [("strength", 0), ("health  ",
0), ("wisdom  ", 0), ("dexterity", 0)]

Sorry if this is a bit confusing. Thanks for your help and tips so far Bob.

-Alex

On Wed, Aug 3, 2011 at 5:52 AM, bob gailer <bgailer at gmail.com> wrote:

>  On 8/2/2011 11:39 PM, Alexander Quest wrote:
>
> Hey Bob- thanks for the reply. Here is a more complete part of that code
> section (the ellipses are parts where I've deleted code because I don't
> think it's important for this question):
>
>
> Please always reply-all so a copy goes to the list.
>
> Thanks for posting more code & traceback
>
> I forgot to mention earlier - tell us which version of Python you are using
> (this looks like version 3)
>
> You did not answer all my questions! How come? Please do so now.
>
>
>
> _____________________________________________________________
> attributes = [("strength", 0), ("health  ", 0), ("wisdom  ", 0),
> ("dexterity", 0)]
> .....
> .....
> .....
> print(
>             """
>             1 - Strength
>             2 - Health
>             3 - Wisdom
>             4 - Dexterity
>
>             Any other key - Quit
>             """
>             )
>             selection = input("Selection: ")
> if selection == "1" or selection == "2" or selection == "3" or selection ==
> "4":
>                 print("You have ", points, "points available.")
>                 how_many = input("How many would you like to add to this
> attribute?: ")
>                 while how_many < 0 or how_many > 30 or how_many ==
> "":                               # Because max points available is 30, and
> entering less than 0 does not make sense.
>                     print("Invalid entry. You have ", points, "points
> available.")                               # If the user enters a number
> less than 0, greater than 30, or just presses enter, it loops.
>                     how_many = input("How many would you like to add to
> this attribute?: ")
>                 print("Added ", points, "to ", attributes[selection-1][0],
> "attribute.")                         # Here is where I try to add the
> number of points to the value, based on what the user entered.
>                 points = points -
> how_many
> # I subtract the number of points added from the total points available.
>                 attributes[selection-1][1] +=
> how_many                                                              # I
> add the number of points the user selected to the variable selected.
>
>
> __________________________________________________________________________
>
>
> Here's the traceback I get:
>
> Traceback (most recent call last):
>   File "C:\Users\Alexander\Desktop\Python Practice\Ch05-2.py", line 54, in
> <module>
>     print("Added ", points, "to ", attributes[selection-1][0],
> "attribute.")
> TypeError: unsupported operand type(s) for -: 'str' and 'int'
> _________________________________________________________________________
>
> Thanks for any help. I understand that I can't change tuples directly, but
> is there a way to change them indirectly (like saying attribute.remove[x]
> and then saying attribute.append[x] with the new variable? But this seems to
> take out both the string and the value, when I only want to increase or
> decrease the value for one of the 4 strings, strength, health, wisdom, or
> dexterity).
>
>
> DON'T USE TUPLES. WHY DO YOU INSIST ON THEM?
>
>
>
>> What does the error message( unsupported operand type(s) for -: 'str' and
>> 'int')  tell you?
>
>
>  Why would selection be a string rather than an integer?
>
>
>  This has to do with how you obtain selection from the user.
>>
>> Why did you expect to be able to alter the value of a tuple element?
>> Tuples are immutable! Use a list instead.
>>
>>
> --
> Bob Gailer919-636-4239
> Chapel Hill NC
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20110803/3db99f74/attachment.html>


More information about the Tutor mailing list