3

第一次来这里(和一个编程菜鸟),希望我的格式正确!

我正在尝试创建一个函数,该函数将打印出在列表中出现追捧的字母的位置。下面的代码找到该字母并打印出该字母在列表中的位置,即如果您搜索“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

我想知道为什么。:/

4

2 回答 2

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))

我们在这里所做的是逐步完成解决方案,如果一个字符与猜测匹配,我们返回它的位置。如果没有字符匹配,则该方法将返回一个空列表;这是一个虚假的价值。

然后,我们只检查方法的返回值。如果是列表,我们将位置加 1(因为列表索引从 0 开始),然后打印出来。

于 2013-08-15T12:57:39.493 回答
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
于 2013-08-15T12:45:26.560 回答