MasterMind游戏Python代码

时间:2014-10-19 22:19:46

标签: python for-loop boolean

import random 
def create_code(characters,length):
    """(str,int) -> list
    Return a list of length size of single character of the characters in the given str
    >>>create_code('ygbopr')
    ['g','b','r','b']
    """
    characters = 'grbyop'
    length = 4 
    return list(random.sample(characters,length))
    pass

def find_fully_correct(answer, guess):
    """(list,list) -> list
    Return a list containing a 'b' for each correctly positioned color in the guess
    >>>find_fully_correct(['g','b','r','b'], ['g','b','r','b'])
    ['b', 'b', 'b', 'b']
    """
    res= []
    for x, y in  zip(guess, answer):
            if x == y:
                res.append("b")
    return res if res else None
    pass

def remove_fully_correct(answer, guess):
    """(list,list) -> list 
    Return a list that removes the chars from the first list that are the same and in the same postion in the second list
    >>>remove_fully_correct(['a','b','c','d'], ['d','b','a','d'])
    ['a','c']
    """
    res= answer
    for x,y in zip(answer, guess):
        if x == y:
            res.remove(x)
    list3 = remove_fully_correct(guess,answer)
    list4 = remove_fully_correct(answer,guess)

    for char in list4:
        if char in list3:
            return res
        pass

def find_colour_correct(answer, guess):
    """(list,list) -> list
    Return a list of 'w''s where the number of 'w''s is qual to the number of strs in the second list that have the same value as the str in the first list but a different position
    >>>find_colour_correct(['y','n','g','g'], ['g','n','o','r'])
    ['w']
    """
    res = []
    for str in guess:
        if str in answer:
            res.append("w")   
    return res
    pass

def print_game(guesses, clues):
    """(list,list) -> display
    Print to display headers, Guess and Clue, with the corresponding sublists of the given lists
    >>>print_game(guesses,clues)
    Guesses     Clues
    o o o o     b
    r r r r     b b
    """
    print ('Guesses \t Clues')

    guess = ''
    clue = ''
    guesses = guess_list 
    clues = clue_list
    clue_list = (find_fully_correct, find_correct,colour)

    for guess_list in guesses: 
        for index in range(len(guess_list)):
        guess = guess + ' ' + guess_list[index]
        guess = guess.lstrip()

    for clue_list in clues:
        for char in range (len(clue_list)): 
            clue = clue + ' ' + clue_list[char]
            clue = clue.lstrip()

        print (guess + ' \t ' + clue + '\n')
        pass

def valid(user_guess, valid_chars, size):

    if len(user_guess) != size or user_guess not in valid_chars:
        return False
    else:
        return True
    pass

if __name__ == '__main__':
    size = 4
    tries = 10
    valid_chars= 'grbyop'

尝试对Mastermind游戏进行编码,该游戏涉及隐藏颜色组合或代码的创建 - 包含由程序从6种颜色中选择的4种颜色代码。用户是代码破坏者,并试图通过猜测代码来找出代码。程序然后通过告诉第二个玩家在猜测的颜色代码中有多少正确定位以及猜测有多少正确的颜色但错误定位的颜色,直到用户猜出实际的颜色代码或运行,给出了猜测正确性的反馈。在他们的10次尝试中。

我在使用print_game函数和有效函数

时遇到问题

此外,我不确定在if__name__ ==' main '之后如何命令实际程序像游戏一样运行?部分。在调用实际函数时向用户发出命令以查看其进度。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果要询问用户输入,可以在Python 2.X中使用raw_input,在Python 3中使用input。 我会从那开始测试你的代码。

有效在概念上对我来说是正确的,除了最后的pass语句是不必要的。它可以简单地重写为:

valid(user_guess, valid_chars, size):
    return len(user_guess) == size and reduce(operator.and , map(lambda x: x in valid_chars ,user_guess))

我不确定您要使用print_game实现什么目标。给出一系列猜测和线索,print_game应该是:

print_game(guesses,clues):
    print ('Guesses \t Clues')
    assert len(guesses) == len(clues)
    for g,c in zip(guesses,clues):
        print g,'\t',c