2014-10-19 163 views
2
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次尝试中。MasterMind游戏Python代码

我在与print_game功能故障和有效功能

而且我不知道如何指挥实际的程序if__name__ ==“主要”部分后,功能类似游戏。就像在调用实际的功能给用户看命令一样。

任何帮助,非常感谢。

回答

1

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

有效似乎在概念上对我来说是正确的,除了最后的通过声明是不必要的。它可以简单地改写为:

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 
+0

我怎么会把输入 – Deka 2014-10-19 22:27:55

+1

命令行。您是使用IDE还是如何运行代码? – Parker 2014-10-19 22:31:24

+0

只是通过翅膀运行它 – Deka 2014-10-19 22:32:41