Python Forum
Looping through nested elements and updating the original list
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Looping through nested elements and updating the original list
#1
I am trying to create a code that lets the user add points to attributes. I have created the code below which loops through each element. It all works fine apart from the original list 'attributes' not updating once the user has gone through the loop. This means the points aren't actually added. How do you ensure the points are added to the original list? My code and the output are shown below.

points = 30 attributes = [["Strength:", 0],["Endurance:", 0],["Wisdom:", 0],["Dexterity:", 0]] for element in attributes: attribute, score = element print("\nAdd points to", attribute) add_points = int(input("")) if points - add_points < 0: print("Error. You do not have enough points.") else: score += add_points points -= add_points print(attribute, score) print("Points:",points) print(attributes) print(points)
Output:
Add points to Strength: 2 Strength: 2 Points: 28 Add points to Endurance: 3 Endurance: 3 Points: 25 Add points to Wisdom: 4 Wisdom: 4 Points: 21 Add points to Dexterity: 5 Dexterity: 5 Points: 16 [['Strength:', 0], ['Endurance:', 0], ['Wisdom:', 0], ['Dexterity:', 0]] 16
Yoriz write Aug-18-2021, 09:24 PM:
Please post all code, output and errors (in their entirety) between their respective tags. Refer to BBCode help topic on how to post. Use the "Preview Post" button to make sure the code is presented as you expect before hitting the "Post Reply/Thread" button.
Reply
#2
If you change line 11
score += add_points
to
element[1] += add_points
it will actually alter the original list
Reply
#3
Please wrap code in Python tags so it retains indenting and wrap output in output tags so it isn't confused for regular text in the post. There are buttons in the editor.

You need to modify values in attributes, or in elements. Modifying the value of score does nothing to your attributes list.
points = 30 attributes = [["Strength:", 0],["Endurance:", 0],["Wisdom:", 0],["Dexterity:", 0]] for element in attributes: print("\nAdd points to", element[0]) add_points = int(input("")) if points - add_points < 0: print("Error. You do not have enough points.") else: element[1] += add_points # <= Need to change value in element points -= add_points print(element) print(attributes) print(points)
You should not be using a list of lists for attributes. attributes is a dictionary mapping names to scores, you should make it a Python dictionary.
points = 30 attributes = {"Strength":0, "Endurance":0, "Wisdom":0, "Dexterity":0} for element in attributes: add_points = min(int(input(f"\nAdd points to {element}: ")), points) attributes[element] += add_points points -= add_points print(element, attributes[element]) if points <= 0: print('You are out of points') break print(attributes) print(points)
Now that attributes is a dictionary you can use attribute['Strength"] to get the value of the Strength attribute. Isn't that better than attribute[0][1]?
Reply
#4
Thanks very much for your help and for the guidance on the correct formatting of posts! Yes, using a dictonary does make more sense
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  What is a faster way to deep copy a nested list without using .deepcopy()? Shervin_Ataeian 1 2,723 Oct-13-2024, 01:28 PM
Last Post: Pedroski55
  unable to remove all elements from list based on a condition sg_python 3 2,504 Jan-27-2024, 04:03 PM
Last Post: deanhystad
Question mypy unable to analyse types of tuple elements in a list comprehension tomciodev 1 2,724 Oct-17-2023, 09:46 AM
Last Post: tomciodev
  for loops break when I call the list I'm looping through Radical 4 2,565 Sep-18-2023, 07:52 AM
Last Post: buran
  List all possibilities of a nested-list by flattened lists sparkt 1 2,241 Feb-23-2023, 02:21 PM
Last Post: sparkt
  Checking if a string contains all or any elements of a list k1llcod3 1 7,998 Jan-29-2023, 04:34 AM
Last Post: deanhystad
  How to change the datatype of list elements? mHosseinDS86 9 5,049 Aug-24-2022, 05:26 PM
Last Post: deanhystad
  ValueError: Length mismatch: Expected axis has 8 elements, new values have 1 elements ilknurg 1 10,140 May-17-2022, 11:38 AM
Last Post: Larz60+
  Updating nested dict list keys tbaror 2 2,442 Feb-09-2022, 09:37 AM
Last Post: tbaror
  Python Program to Find the Total Sum of a Nested List vlearner 8 10,533 Jan-23-2022, 07:20 PM
Last Post: menator01

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020
This forum uses Lukasz Tkacz MyBB addons.
Forum use Krzysztof "Supryk" Supryczynski addons.