循环 - 蟒蛇

时间:2014-03-10 21:24:32

标签: python list loops

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:

但它无法正常工作,因为在第二次,我从第一个实例所做的更改不存在。

3 个答案:

答案 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