第一次来这里(以及编程菜鸟),希望我的格式正确!
我正在尝试创建一个函数,它将打印出列表中发出的所需信件的位置。下面的代码找到了这个字母并打印出字母在列表中的位置,即如果你搜索'a',程序将在第二个点(x + 1)回答它。
问题是,如果我搜索一个有一个以上副本的字母(例如字母'e'),程序会在两个位置找到该字母但在两种情况下都打印出它在第10个位置。
我试图找出原因,在这种情况下应该是第10和第17。
# store string in variable
solution = list('can you guess me')
guess = raw_input('What letter do you guess on? ')
# Search list
def search(guess):
nothing = 0
for x in solution:
if x == guess:
print x,
print "is in ",
print solution.index(x) + 1
nothing = 1
if nothing == 0:
print "Couldn't find ",
print guess
search(guess)
如果选择e,就像这样:
What letter do you think is in the answer? e
程序打印出来:
e is in 11
e is in 11
我想知道原因。 :/
答案 0 :(得分:3)
这种方法怎么样:
solution = 'This is the solution'
# Search list
def search(guess):
return [i for i,x in enumerate(solution) if x == guess]
guess = raw_input('Enter your guess: ')
result = search(guess)
if result:
positions = ','.join(str(i+1) for i in result)
print('{0} was found in positions {1}'.format(guess, positions))
else:
print('Sorry, {0} was not found!'.format(guess))
我们在这里做的是逐步完成解决方案,如果一个角色与猜测匹配,我们将返回其位置。如果没有匹配的字符,则该方法将返回一个空列表;这是 falsey 值。
然后,我们只检查方法的返回值。如果它是一个列表,我们将1添加到该位置(因为列表索引从0开始),然后将它们打印出来。
答案 1 :(得分:2)
solution.index(x)
会对您进行相同的搜索,但只返回第一次匹配。
使用enumerate()
来创建索引:
for i, x in enumerate(solution):
if x == guess:
print x,
print "is in ",
print i + 1
nothing = 1
另一种方法是告诉solution.index()
从哪里开始搜索。您打印的上一个位置,例如:
last = -1
for x in solution:
if x == guess:
print x,
print "is in ",
last = solution.index(x, last) + 1
print last
nothing = 1