问题描述
words = ['a', 'b', 'c', 'd']
code = ['3' , '2', '4' , '9']
我有两个用户必须一起尝试匹配的列表。 为了做到这一点,他们必须改变'代码'列表:
number = input("Enter a number: ")
letter = input("Enter the letter: ")
code =list(map(lambda x: str.replace(x, number, letter), code))
如何循环使用,以便用户必须不断更改“代码”列表的数字,直到它与“单词”列表匹配为止?
我试过用了
while code != words:
但它无法正常工作,因为在第二次,我从第一个实例所做的更改不存在。
1楼
代码列表是不变的吗?
如果是这样,您可以执行以下操作:
def guess(code, words):
print('The Code Is: '+str(code))
guess = raw_input('Enter A List Of Letters, Separated by Commas: ')
guess = guess.split(',')
guess = [letter.strip() for letter in guess]
number_correct = 0
for index in range(min(len(guess), len(words))):
if guess[index] = words[index]
number_correct += 1
if number_correct == len(words):
print('You Got It!')
return True
else:
print('You Got {0} of {1} Letters Right! Try Again...'.format(number_correct, len(words))
return guess(code, words)
2楼
我认为你只是没有将用户的猜测(lambda操作)重新分配给正确的code
变量。
我正在猜测这个问题,但这看起来像你想要做的:
words = ['a', 'b', 'c', 'd']
code = ['3' , '2', '4', '9']
while words != code:
number = raw_input("Enter a number: ")
letter = raw_input("Enter the letter: ")
code = list(map(lambda x: str.replace(x, number, letter), code))
print('You finally got it!')
3楼
我猜你真正想要的是两个循环,一个用于等到他们猜对了,一个用于收集他们的猜测:
words = ['a', 'b', 'c', 'd']
code = ['3' , '2', '4' , '9']
guess = None
while guess != words:
print 'Enter 4 number/letter pairs'
guess = code
for i in range(4):
number = raw_input("Enter a number: ")
letter = raw_input("Enter the letter: ")
guess = list(map(lambda x: str.replace(x, number, letter), guess))
if guess == words:
print 'You got it!'
else:
print 'Nope! Guess again!'
这样每次都会重置猜测。
如果你不这样做,那么在4次代码的工作列表之后(在我的代码中guess
)可能是这样的:
>>> print guess
['3', 'd', 'y', '9']
如果它看起来像这样,那么为了解决它,他们将不得不输入一个字母 /字母对,而不是数字/字母对。
更糟糕的是,你甚至可能让它进入一个无法正确行事的状态。
例如,如果guess
看起来像这样:
['3', 'a', 'a', '9']
如果你试图将'a'
的一个改为其他任何东西,那么另一个'a'
也会改变。
看到你试图获得的结果使它们变得不同,那么就没有办法从这个guess
得到正确的结果。
如果你确实希望每个猜测继续进行,直到用户得到所有正确的话,我会建议一个不同的策略:
words = ['a', 'b', 'c', 'd']
code = ['3' , '2', '4' , '9']
mapping = {}
guess = None
while guess != words:
number = raw_input("Enter a number: ")
letter = raw_input("Enter the letter: ")
mapping[number] = letter
guess = [mapping.get(entry, entry) for entry in code]
print 'You got it!'
此策略将覆盖之前的任何猜测,并有效地使其成为原始代码。
无论您选择何种策略,都可以让用户了解他们已经猜到的内容。 在我的第二个例子中,您可以打印出映射(以一些不错的格式)。 这是一个关于如何打印它的想法:
print '\n'.join('%s->%s' % (number, letter) for number, letter in sorted(test.items(), key=lambda x: x[0]))
这将打印{'1': 'a', '3': 'c', '2': 'b'}
如下所示:
1->a
2->b
3->c