【问题标题】:Changing a list value while said value is assigned to a variable在将所述值分配给变量时更改列表值
【发布时间】:2021-06-23 22:56:43
【问题描述】:

为了避免长 if / else 字符串,我想看看是否可以使用 for 循环来增加 userstats 列表中的值,方法是将值的位置放入具有相应统计信息的 dict 中。一个测试列表,userstats = [40, 40, 40, 40, 40, 40, 40]应该是[50, 50, 40, 40, 40, 40, 40],当输入“力量智力”时。

userstats = [40, 40, 40, 40, 40, 40, 40]

statdict = {"Strength":userstats[0], "Intelligence":userstats[1], "Willpower":userstats[2], "Agility":userstats[3], "Speed":userstats[4], "Endurance":userstats[5], "Personality":userstats[6]}
usfavstat = input("Enter your favored stats, seperated by one space. : ").title().split(" ")
for key, entry in statdict.items():
  if key in usfavstat:
    entry += 10

# Test input: Strength Intelligence
# Desired outcome: userstats = [50, 50, 40, 40, 40, 40, 40]
# Actual outcome: userstats = [40, 40, 40, 40, 40, 40, 40]

但是,这不起作用。我正在寻找一种在 for 循环中使用附加到 entry 的所述值位置来更改列表值的方法。我很确定,按照构造,entry 并不代表位置,而是代表它的价值。我确实希望有办法做到这一点。

【问题讨论】:

  • 增加元素本身而不是相同变量的临时变量:statdict[key] += 10
  • 已编辑,因为我忘记包含要更改的内容。
  • 编辑再次,因为我不擅长提问。如果您需要我进一步详细说明部分,请发表评论。

标签: python list dictionary for-loop


【解决方案1】:

这个entry += 10 被分配到字典的哪里?

您需要将此新值存储回字典。

for key, entry in statdict.items():
    if key in usfavstat:
        entry += 10
        statdict[key] = entry

【讨论】:

    【解决方案2】:

    给你:

    userstats = [40, 40, 40, 40, 40, 40, 40]
    
    statdict = {"Strength":userstats[0], "Intelligence":userstats[1], "Willpower":userstats[2], "Agility":userstats[3], "Speed":userstats[4], "Endurance":userstats[5], "Personality":userstats[6]}
    usfavstat = input("Enter your favored stats, seperated by one space. : ").title().split(" ")
    
    for key, entry in statdict.items():
        if key in usfavstat:
            statdict[key] = entry + 10
    print(statdict)
    

    【讨论】:

      【解决方案3】:

      没有问题的全貌,我只能建议这个我认为更简洁(使用 zip)和更用户友好的解决方案(避免要求用户输入 dict 键):

      userstats = [40, 40, 40, 40, 40, 40, 40]
      typestats = ["Strength", "Intelligence", "Willpower", "Agility", "Speed", "Endurance", "Personality"]
      
      statdict = dict(zip(typestats, userstats))
      
      for typestat in typestats:
        val = input(f'Will update {typestat} stat? (Y/N):').capitalize()
        if val == 'Y':
          statdict[typestat] += 10
      
      print(statdict)
      print(userstats)
      

      这不会更新userstats 列表

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-01
        • 2023-03-18
        • 1970-01-01
        • 2013-03-05
        • 1970-01-01
        相关资源
        最近更新 更多