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:
但它无法正常工作,因为在第二次,我从第一个实例所做的更改不存在。
答案 0 :(得分:2)
代码列表是否不变?
如果是这样,您可以执行以下操作:
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)
答案 1 :(得分:0)
我认为你不会将用户的猜测(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!')
答案 2 :(得分:0)
我猜你真正想要的是两个循环,一个用于等到他们猜对了,一个用于收集猜测:
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