Python列表练习反馈

时间:2013-04-21 20:10:45

标签: python

嘿伙计们我正在学习python而且我遇到了这个问题。我试过了,但我的输出不符合正确的答案。任何原因以及如何解决它?

问题:刺客游戏是一个在大学校园里进行的简单游戏,每个玩家都会被指定一个暗杀目标,只需向他们说“你已经死了”。当然,在校园里有数千人,游戏中只有几十人,你永远不知道谁在暗杀你。一旦你暗杀某人,你就会接受他们正在寻找的目标。如果这恰好是你,那么你就是胜利者。为了确保这种方法正常工作,目标必须形成一个连续的“链”。编写一个程序,允许用户输入目标分配,并根据是否有连续的“链”输出它是否有效。列表由列表中的位置表示。该位置的价值是他们的目标。

我的代码:

total=0
list_of_players=[]
player=raw_input("Enter a player (end to stop): ")

while player !="end":
    list_of_players.append(int(player))

    player=raw_input("Enter a player (end to stop): ")

for x in range(len(list_of_players)):
    total+=1
    if list_of_players[x]==0 and len(list_of_players)==total:
        print "The game is valid."
if list_of_players[x]!=0 or len(list_of_players)!=total:
    print "The game is not valid. "

问题是如果我输入玩家4,3,0,5,6,2,1:它应该有效。 我的程序将其显示为无效。 我有什么想法可以改进我的计划吗? 如果有人好奇,我从programmersheaven.com得到了这个练习题! 谢谢!

3 个答案:

答案 0 :(得分:1)

IMO,这个问题非常适合从图遍历开始,所以看看:

https://www.python.org/doc/essays/graphs/

  • 跟随第1项的边缘
  • 如果你最后回到第一个项目,所有节点都被访问过,tadaaa:)

答案 1 :(得分:0)

提示:您的代码将始终拒绝任何不以0结尾的序列。

尝试将验证逻辑实现为根据序列是有效还是无效返回TrueFalse的函数,并根据该函数的结果打印验证语句。

修改

经过一些进一步的检查,我会尝试给你一些更好的解决方案指导。

如@ a-rodas回答中所述,if 0 in list_of_players将帮助您检查0是否是序列的一部分。对于其他约束,您可以阅读max()内置函数,并考虑如何将其用于total / len(list_of_players)

使用编辑中的这些提示,您应该能够使用简单的if / else语句验证序列(无需任何功能)。为了练习,我没有包含代码示例。但请随意提问,以便我们进一步帮助您找到自己的解决方案。

答案 2 :(得分:0)

len(list_of_players)

永远不会等于总数,因为

range(len(list_of_players))

将创建从停止参数的0len(list_of_players) 独占的范围,因此最后一个元素将等于len(list_of_players) - 1。由于您在循环的每次迭代中将1添加到totaltotal只会到达len(list_of_players) - 1并且您的len(list_of_players)==total条件永远不会得到满足。

但是,您也没有检查它是否是一个链,在示例中4 - > 6 - > 1 - > 3 - > 5 - > 2 - > 0 - > 4这是一个有效的链,您需要检查这一点。 选择任何索引开始。保留一组您看过的物品,如果您在到达起始元素之前遇到过您已经看过的物品,则该链条不连续。

total=0
list_of_players=[]
player=raw_input("Enter a player (end to stop): ")

while player !="end":
    list_of_players.append(int(player))

    player=raw_input("Enter a player (end to stop): ")

seen = set() # this could also be seen = [] but sets are faster
i = 0 # index to start at

# we should be able to go through len(list_of_players)
# before reaching the start player
for x in range(len(list_of_players)): 
    if i in seen:
        print "the game is not valid. "
        break
    seen.add(i)
    i = list_of_players[i]
else: # successful completion, no breaks
    print "The game is valid. "