刽子手:不再重复猜测信

时间:2016-08-01 18:48:04

标签: python-3.x

import random

def random_Words():
    print("Lets play HANGMAN")
    option = input("Please Chose option \n [1] Animals.\n [2] Countries \n      [3] Flowers \n [4] Pakistan's Cities \n");
    i=0;
    x= "";
    if(option=='1'):
        path= "code/hangman/Words.Animals"

    if(option=='2'):
        path="code/hangman/Words.Countries"

    if(option=='3'):        
        path="code/hangman/Words.Flowers"

    if(option=='4'):
        path="code/hangman/Words.PakCities"

    return random.choice(open(path).readlines());

def HangmanGuess(RandomWord, GuessedWord, Chances):
    Letters_Guessed = []
    if(Chances > 0):
        i=0;
        GuessOption = input("Guess a Letter :");

       if(GuessOption == Letters_Guessed):
            print("Already Guessed")

        GuessOptionValid= False;
        for i in range(len(RandomWord)-1):
            if(RandomWord[i] == GuessOption):
                GuessedWord= GuessedWord[:i] + GuessOption + GuessedWord[i+1:];
                GuessOptionValid =True;

        print(RandomWord);
        print(GuessedWord);

        if(GuessOptionValid):
            HangmanGuess(RandomWord,GuessedWord, Chances);        
        else:
            HangmanGuess(RandomWord,GuessedWord, Chances-1);
    else:
        print('You have lost!!')


Chances = 5
RandomWord = random_Words()
GuessedWord = ''
i=0
for i in range(len(RandomWord)-1):
    GuessedWord+= '_'

def Hangman_Drawing(RandomWord,GuessedWord, Chances):
    x= HangmanGuess(RandomWord,GuessedWord, Chances);
    x = ''

    if(GuessedWord!= RandomWord[i]):
        if(Chances==4):
            print("----------");
            print("|       |   ");
            print("|          ");
            print("|          ");
            print("|          ");
            print("|          ");
            print("|          ");
            print("-----------");


        if(Chances==3):
            print("----------");
            print("|       |   ");
            print("|       O   ");
            print("|          ");
            print("|          ");
            print("|          ");
            print("|          ");
            print("-----------");


        if(Chances==2):
            print("----------");
            print("|       |   ");
            print("|       O   ");
            print("|       |   ");
            print("|          ");
            print("|          ");
            print("|          ");
            print("-----------");


        if(Chances==1):
            print("----------");
            print("|       |   ");
            print("|       O   ");
            print("|       |   ");
            print("|      / \ ");
            print("|          ");
            print("|          ");
            print("-----------");


        if(Chances==0):
            print("----------");
            print("|       |   ");
            print("|       O   ");
            print("|     --|--   ");
            print("|      / \ ");
            print("|          ");
            print("|          ");
            print("-----------");


print(Hangman_Drawing(RandomWord,GuessedWord, Chances));

Hello Guys, Iam遇到了问题,我想张贴一张支票,证明如果在信件'猜对'时输入了任何信件,它会检查信件是否已被输入,因此给出了打印的信息以提醒用户是否有任何信息 我的代码有'检查'代码,但我不知道缺少什么或为什么它不工作,而其余的代码是完全正常的。 对不起,我是非工程师,所以如果缺少任何信息,请原谅 任何帮助,将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:0)

您的代码存在许多问题,这些问题会阻止您处理对同一封信的重复猜测。

最明显的一个是您正在进行的测试,以确定用户条目是否已被猜到:

if(GuessOption == Letters_Guessed):

使用==,您要求GuessOption等于Letters_Guessed列表。因为它将是一个字符串,永远不会是真的。我想你想在这里使用in运算符。它测试左侧的对象是否是右侧容器的成员:

if GuessOption in Letters_Guessed:     # parentheses are not necessary in Python conditionals

但这还不足以让它真正发挥作用。局部变量Letters_Guessed被初始化为空列表,并且永远不会添加任何内容,因此对它的任何成员资格测试将始终为false。您需要将每个猜到的字母添加到列表中的某个位置。

下一个问题是更大的问题。它与您如何组织代码控制流有关。目前,在确定最后一个是否良好之后,您将使用递归继续下一个猜测。但是,这会导致Letters_Guessed出现问题,因为它是一个局部变量,将在每次递归调用中重新初始化。如果你想坚持递归,你需要在函数调用之间传递Letters_Guessed列表,就像你传递其他参数一样。我不是真的推荐这个。

更好的解决方案是用循环替换代码的递归结构。特别是,while循环会很有意义。您可以有一个while循环来处理每个猜测的后果(例如,在错误的猜测中减少Chances),以及另一个检查输入以确保其有效的嵌套循环(例如,没有猜到,并且可能会检查其他内容,例如作为一封信并且只是一个字符。)