首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python列表练习反馈

Python列表练习反馈
EN

Stack Overflow用户
提问于 2013-04-21 20:10:45
回答 3查看 377关注 0票数 0

嘿,伙计们,我在学习蟒蛇,我被困在了这个问题上。我试过了,但我的输出不符合正确的答案。有什么原因,为什么和如何修复它?

问题:刺客的游戏是一个简单的游戏,在大学校园里,每个玩家只需对他们说“你死了”就被分配了一个暗杀目标。当然,有成千上万的人在校园里,只有几十人在游戏中,你永远不知道谁想刺杀你。一旦你暗杀了他们要找的目标的人。如果这碰巧是你,那么你就是赢家。为了确保这一工作正常进行,目标必须形成一个连续的“链”。编写一个程序,允许用户输入他们的目标分配和输出,无论它是否有效,如果有一个连续的“链”。列表中的每个人都以列表中的位置表示。这个位置的价值是他们的目标。

我的代码:

代码语言:javascript
复制
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那里得到了这个练习问题!谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-21 20:22:57

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

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

编辑

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

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

使用编辑中的这些提示,您应该能够使用一个简单的if/else语句(不需要函数)来验证序列。为了练习,我没有包括代码示例。但是,可以随意提问,这样我们就可以进一步帮助您找到自己的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2013-04-21 20:42:15

IMO,这个问题很适合从图遍历开始,所以请看一看:

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

  • 沿着第一项的边缘
  • 如果返回到第一项,并且访问了所有节点,tadaaa :)
票数 1
EN

Stack Overflow用户

发布于 2013-04-22 00:04:53

代码语言:javascript
复制
len(list_of_players)

永远不会等于全部,因为

代码语言:javascript
复制
range(len(list_of_players))

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

但是,您也没有检查它是否是一个链,在示例4 -> 6 -> 1 -> 3 -> 5 -> 2 -> 0 -> 4 (这是一个有效的链)中,您需要检查这一点。选择任何要开始的索引。保持一组你见过的项目,如果你在开始元素之前遇到一个你已经看过的项目,这个链是不连续的。

代码语言:javascript
复制
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. "
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16135686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档