为什么我的程序没有注意到字母之间的等效性?

问题描述 投票:-1回答:2

我正在用Python 2开发一个简单的Hangman游戏。到目前为止,我拥有的代码只是我的基础工作,但似乎没有用。如果我能通过简单的唤醒电话得知我编写的代码不起作用怎么办,我将不胜感激。

代码:

secret_word = 'tracy'
secret_word_list = []
for letter in secret_word:
    secret_word_list += letter
print secret_word_list
def get_guess(guess = input("Guess: ")):
    while len(guess) != 1:
        print "Your guess must be exactly one character!"
        guess = input("Guess: ")
    while guess.isalpha() == False:
        print "Your guess must be a lowercase letter!"
        guess = input("Guess: ")
    while guess.islower == False:
        print "Your guess must be a lowercase letter!"
        guess = input("Guess: ")
    else:
        return guess

while True:
    if str(get_guess) in secret_word_list:
        print "That letter is in the secret word!"
    else:
        print "That letter is not in the secret word!"
        get_guess(guess = input("Guess: "))

输出:

Output of the Code

python python-2.x
2个回答
1
投票

这里您有几个问题,但是最大的问题是您没有调用函数,因此您将函数本身与秘密进行了比较。

带修复的代码:

secret_word = 'tracy'  # Don't make secret_word_list, there's no point; just use the str itself since you only test len 1 strings against it anyway
print secret_word
def get_guess(guess):  # Don't make the default call input, that'll prompt once for an input and store it as the permanent default
    while True:
        # Test each condition and break loop only if all past; original code would never
        # recheck length if new value entered after testing isalpha
        if len(guess) != 1:
            print "Your guess must be exactly one character!"
        elif not guess.islower():  # Add missing call parens on islower; use not, never compare to False; islower implicitly verifies isalpha, so avoid testing isalpha
            print "Your guess must be a lowercase letter!"
        else:
            break  # Passed all tests, break loop
        # Get new guess if any test failed
        guess = raw_input("Guess: ")  # Use raw_input on Python 2, never input (which eval's the result of raw_input)
    # Removed else (loop always ends by breaking, using else nonsensical but harmless in original code too
    return guess

while True:
    # Move guess getting to if, because having it in else case never actually checked it
    if get_guess(raw_input("Guess: ")) in secret_word:
        print "That letter is in the secret word!"
    else:
        print "That letter is not in the secret word!"

Try it online!

注意:我保留了get_guess带有某种奇怪的行为,但随后提示您进行失败的猜测。一个更明智的解决方案是完全删除guess参数,然后将guess = raw_input("Guess: ")移到while循环的顶部(最后删除else块)。


0
投票

[get_guess是一个函数,您需要在其后放置()来调用该函数。

您不应该将调用作为默认参数传递给input()。定义函数时,将对默认值进行一次评估,而不是每次调用该函数时都会评估一次。您应该在函数内分配guess

您应该在一个循环中测试所有无效输入。

def get_guess():
    while True:
        guess = input("Guess:")
        if len(guess) != 1:
            print "Your guess must be exactly one character!"
            continue
        if not guess.isalpha() or not guess.islower():
            print "Your guess must be a lowercase letter!"
            continue
        break
    return guess

while True:
    guess = get_guess()
    if guess in secret_word_list:
        print "That letter is in the secret word!"
    else:
        print "That letter is not in the secret word!"
© www.soinside.com 2019 - 2024. All rights reserved.