【问题标题】:Syntax and lists within lists列表中的语法和列表
【发布时间】:2015-10-31 10:36:48
【问题描述】:

我正在创建一个投票系统来选择一个团队,但是我碰壁了。代码运行良好,直到decision2。有什么想法吗?

请记住,此代码正在进行中。

teamNames = []
teams = {}
easy = [0, 1, 2, 3, 4, 5]
NoVotes1 = {'first' : 0, 'second' : 0, 'third' : 0, 'fourth' : 0, 'fifth' : 0}
NoVotes2 = {'first' : 0, 'second' : 0, 'third' : 0, 'fourth' : 0, 'fifth' : 0}
NoVotes3 = {'first' : 0, 'second' : 0, 'third' : 0, 'fourth' : 0, 'fifth' : 0}
NoVotes4 = {'first' : 0, 'second' : 0, 'third' : 0, 'fourth' : 0, 'fifth' : 0}
NoVotes5 = {'first' : 0, 'second' : 0, 'third' : 0, 'fourth' : 0, 'fifth' : 0}

while True:
print("Enter team name " + str(len(teamNames) + 1) + (" or press enter to stop."))
name = input()

if name == "":
      break

teamNames = teamNames + [name]

print("The team names are ")

for name in teamNames:
      print("    " + name)

for name in teamNames:
teams[name] = 0

teamNames.sort()
print("In alphabetical order the team names are ")
print()
print(str(teamNames))

y = 0
decision1 = input("Would you like to enter a vote? (1 = yes, 2 = no)")
while decision1 == "1":
print("ok great, where did " + teamNames[y] + " come")
decision2 = input()
if decision2 == "1":
    teams[easy[y]] = teams[easy[y]] + 1

y = y + 1 


if decision1 == "2":
    break
elif n == "6":
    break

【问题讨论】:

  • 你遇到了什么问题?
  • 究竟什么是问题所在?您是否正确缩进了 while 循环?
  • 它似乎不喜欢我写的部分 if decision2 == "1": teams[easy[y]] = teams[easy[y]] + 1 。当我运行代码时,它只会显示“teams[easy[y]] = teams[easy[y]] + 1 KeyError: 0”
  • 这意味着teams 没有键0,这是有道理的,因为键应该是名称。你期望它如何工作?此外,您确实必须解决问题中的缩进。
  • @AlexHall 抱歉,我只是直接从 python 复制并粘贴了它,团队应该是一个字典,其中包含用户在开始时输入的所有团队,然后当它进入决策 2 时,如果用户键入 1 ,程序应将值 1 添加到字典 teams 中的团队 (y)。

标签: python list


【解决方案1】:

我想我明白你误解了什么。与列表不同,标准字典没有顺序或第 n 个(例如第一个)项目的概念。它们只是键和值之间的关联。当您说teams[key] = value 时,您将值设置为key,当您说value = teams[key] 时,您将获得key 的值。 key 可能是一个数字,但不一定是,如果 key 是 1,那么这并不意味着字典中的第二个值,或第一个值,或任何其他 位置。也许这个交互式会话示例可以帮助您理解:

>>> dictionary = {"a": "b", "c": "d"}
>>> dictionary = {"a": "b", "c": "d", 5: "e"}
>>> dictionary[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 1
>>> dictionary["c"]
'd'
>>> dictionary[5]
'e'

你要的是teams[teamNames[y]] = teams[teamNames[y]] + 1,顺便可以简写成teams[teamNames[y]] += 1

所有这些有意义吗?如果不是,我建议您对字典进行一些简单的实验,直到您更好地理解它们为止。在 shell 中玩转。用字典写一些小程序,看看它们做了什么。

【讨论】:

  • 好的,我一直在研究它,到目前为止得到了这个。我将如何将代码循环回开始以再次投票?我认为while循环会再次循环直到decision1 = 2,或者与1不同的东西。这是代码puu.sh/l5Gwx/8acc8cd8be.pngpuu.sh/l5Gxn/21d6532410.pngpuu.sh/l5GxT/f663d84a7d.png这些是3个SS
  • 我看不出有什么问题。阅读有关使用 python 进行调试的信息(例如打印语句、pdb、断言等)并尝试应用它们。创建一个最小的程序,循环询问用户输入,并且在没有分散注意力的上下文的情况下仍然显示问题。如果您仍然遇到问题,请在新问题中发布程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多