我已经找到了我需要的大部分内容并拥有一个“大多数”工作游戏

时间:2015-11-18 18:05:56

标签: python-2.7

我有def检查猜测的问题。这是我老师特别给出的格式。你们很棒。谢谢您的帮助!!!!很抱歉这是我第一次访问此网站的格式。

# # Global variables    
wrong_guesses = []
target_phrase = ""
current_phrase = ""

def clear_display():
    for i in range(20):
        print "\n"

def string_with_dashes(str):    
    global target_phrase
    new_phrase = ""
    for i in str:
        if i.isalpha():
            new_phrase += "-"
        else:
            new_phrase += i
    return new_phrase

def check_guess(letter):    
    global current_phrase
    replacement_list = [""]
    for i in range(len(target_phrase)):
        if target_phrase[i] == letter:
            replacement_list[i] = target_phrase[i]
            current_phrase = replacement_list
            return current_phrase
        else:
            wrong_guesses.append(letter)
            return False

def process_input():  
    user_letter = raw_input("Guess a letter: ").upper()
    if user_letter in wrong_guesses:
        print "You already guessed that letter"
        user_letter = raw_input("Guess again : ")
    else:
         return check_guess(user_letter)

def one_turn():    
    global wrong_guesses     
    print "=================================================="
    print current_phrase
    print "Wrong guesses:", ' '.join(wrong_guesses)
    print "Guesses remaining:", (8 - len(wrong_guesses))
    display_robot(8 - len(wrong_guesses))
    print "String to guess:", current_phrase
    print "=================================================="
    process_input()
    print "\n\n"

def setup_phrase():    
    global target_phrase, current_phrase
    target_phrase = raw_input("Dear friend, enter a phrase for the user to guess: ").upper()
    current_phrase = string_with_dashes(target_phrase)

setup_phrase()
clear_display()

while True:
    one_turn()
    if len(wrong_guesses) > 7:
        print "GAME OVER! You Lose"
        breack
    if current_phrase == target_phrase:
        print "You WIN!!"
        break

(为什么stackoverflow不会让我修复你的代码?)

2 个答案:

答案 0 :(得分:0)

我不确定你到底想要做什么,但听起来你想要创建一个字符串,猜测字母会在猜到时取代空格?尝试这样的事情:

hidden_phrase = "abracadabra"
current_list = ["."]*len(hidden_phrase)

def check_guess(letter):
    for i in range(len(hidden_phrase)):
        if hidden_phrase[i] == letter:
            current_list [i] = hidden_phrase[i]

print("before", "".join(current_list ))
check_guess("a")
print("guess1", "".join(current_list))
check_guess("z")
print("guess2", "".join(current_list))
check_guess("b")
print("guess3", "".join(current_list))

输出:

before ...........
guess1 a..a.a.a..a
guess2 a..a.a.a..a
guess3 ab.a.a.ab.a

在Python中,字符串是不可变的,无法更新,因此我更容易将“替换”字(带有空格,我用.表示)作为列表,并加入它回到一起展示。

这两个全局变量不需要明确指定为global,因为该变量未在函数中赋值,只能被访问。

如果你想要一个字符串current_phrase并更新它,当然这也是可能的:

hidden_phrase = "abracadabra"
current_phrase = "."*len(hidden_phrase )

def check_guess(letter):
    global current_phrase
    i = -1
    while True:
        i = hidden_phrase.find(letter, i+1)
        if i<0:
            break
        current_phrase = current_phrase[0:i]+letter + current_phrase[i+1:]

print("before", current_phrase)
check_guess("a")
print("guess1", current_phrase)
check_guess("z")
print("guess2", current_phrase)
check_guess("b")
print("guess3", current_phrase)

这次您需要再次global来阻止current_phrase = ...创建本地变量。

答案 1 :(得分:0)

我之前的回答是你问题的第一个更一般的版本。你的check_guess()出了几个问题。这是一个固定版本:

def check_guess(letter):    
    global current_phrase
    replacement_list = list(current_phrase)
    found=False
    for i in range(len(target_phrase)):
        if target_phrase[i] == letter:
            replacement_list[i] = target_phrase[i]
            found = True
    if found:
        current_phrase = "".join(replacement_list)
    else:
        wrong_guesses.append(letter)

显示您的版本问题的评论:

def check_guess(letter):    
    global current_phrase
    replacement_list = [""] # list has only 1 element, can't assign above index zero
    for i in range(len(target_phrase)):
        if target_phrase[i] == letter:
            replacement_list[i] = target_phrase[i]
            current_phrase = replacement_list # assigning a list to what was previously a string
            return current_phrase # returns before checking 2nd character
        else:
            wrong_guesses.append(letter) # only the first character has been checked
            return False # returns False or current_phrase, inconsistent

也接近你写breack而不是break的结尾,遗憾的是Python默认情况下不会检查这些内容,而是等待你点击那一行。