因此python 3向我返回了一个错误,但我不知道原因。 这是我要做作业的练习。
在某个地区,所有地方都是公路。但是所有道路都有单向交通;如果允许您通过直接路线从A到B,则您不能沿着从B到A的那条路行驶。如果需要,则必须绕行。
上面是一个有五个地方的区域的示例,每对之间只有一条路。 CA和DB的道路似乎相交,但是不可能转弯。例如,它们在高架桥下方和上方运行。
在这样的区域中,您搜索一条路线,在该路线中,您一次只能访问一次。在此示例中,是这样的路由ADBCE或DCAEB或DBCAE。注意:系统不会要求您再次回到开始的地方。
编写一个程序,该程序首先从标准输入中读取数字N(2小于N小于27)。
这表示该区域中的位置数,这些位置被称为一个大写字母;前N个大写字母用作地名。
然后,您的N行标准输入程序将读取有关连接道路方向的信息。在第一行中,N个链接从A链接到所有其他位置。 0表示道路在A处结束,a表示道路在A处开始。以下规则与下一个地方有关。两个地方之间总是存在唯一的一种方式。自己没有地方的路!
您的程序将一条路径写到标准输出的一行,在该路径中所有位置都被精确地访问了一次。总有解决方案。可能有多种好的解决方案。
示例:
Input:
5
01011
00100
10001
01101
01000
Output:
ADBCE
这是N = 5的样子:
这是我的代码:
import sys
#N = int(sys.stdin.readline()) #5
#verbindingen = []
N = 5
verbindingen = [['0', '1', '0', '1', '1'],
['0', '0', '1', '0', '0'],
['1', '0', '0', '0', '1'],
['0', '1', '1', '0', '1'],
['0', '1', '0', '0', '0']]
#for i in range(0, N):
# y = [str(a) for a in str(int(sys.stdin.readline()))]
# verbindingen.append(y)
# while len(verbindingen[i]) < N:
# verbindingen[i].insert(0, '0')
k = 0
l = 0
letter = []
v = 0
while v < 5:
for pad in range(0, N):
if verbindingen[k][l] == 1:
letter.append(verbindingen[k])
k = verbindingen.index(verbindingen[k][l])
break
else:
if l < 5:
l = l + 1
else:
l = 0
v = v + 1
print(letter)
我收到索引错误:列表超出范围
如何解决此错误?任何帮助表示赞赏!预先谢谢你。
编辑: 该错误已解决,但是现在我不知道为什么我的代码没有执行我想要的操作。有人知道如何解决此练习吗?我现在真的走到了尽头,我不知道如何解决这个问题。
答案 0 :(得分:0)
您的代码中实际上存在多个问题。
测试代码并发现不良行为的一种很好的方法是在某些步骤中打印内容。例如,您可以在每次验证条件时打印一些内容
verbindingen[k][l] == 1
,这会让您意识到此条件从未得到验证:)
实际上,verbindingen内的列表包含strings
,而1
是整数。然后,条件1 == {1
将始终返回false。您需要在仅使用整数或仅使用字符串之间进行选择。您可以使用功能int()
和str()
从一种类型转换为另一种类型。
最后一行
k = verbindingen.index(verbindingen [k] [l]))
将不起作用,因为verbindingen
是 lists 的列表,而verbindingen[k][l]
应该是整数或字符串(请参见第一个备注)。我想应该是:
k = verbindingen[k].index(verbindingen[k][l])
如果verbindingen
必须保留一组字符串,则可能是以下示例:
import sys
#N = int(sys.stdin.readline()) #5
#verbindingen = []
N = 5
verbindingen = [['0', '1', '0', '1', '1'],
['0', '0', '1', '0', '0'],
['1', '0', '0', '0', '1'],
['0', '1', '1', '0', '1'],
['0', '1', '0', '0', '0']]
#for i in range(0, N):
# y = [str(a) for a in str(int(sys.stdin.readline()))]
# verbindingen.append(y)
# while len(verbindingen[i]) < N:
# verbindingen[i].insert(0, '0')
k = 0
l = 0
letter = []
v = 0
while v < 5:
for pad in range(0, N):
if verbindingen[k][l] == str(1): ##### Look at the use of the str() function
print('Matched found') #### this in the line I used to find the mistake in your code
letter.append(verbindingen[k])
k = verbindingen[k].index(verbindingen[k][l]) ##### See here the last change
break
else:
if l < 4:
l = l + 1
else:
l = 0
v = v + 1
print(letter)
但是,如果这是字符串中唯一的内容,我建议您始终使用整数。