0

我希望用户输入的字母(假设它们在“字母”中)以正确的顺序位置替换空格(我不想要“agbdf__”),并在输入所有字母时停止。如现在的代码是,它需要多次输入字母,如果输入字母“g”七次,它就会停止。这是我正在尝试实现的刽子手代码的一部分。如果有人可以发布正确的编程方式(不仅仅是提示,因为我很可能无法弄清楚如何实现它),将不胜感激。

letters='abcdefg' 
blanks='_'*len(letters) 
print('type letters from a to g')
print(blanks)
for i in range(len(letters)):
    if letters[i] in input(): 
        blanks = blanks[:i] + letters[i] + blanks[i+1:]
        print(blanks)
4

3 回答 3

2

将循环更改为:

for i in range(len(letters)):
    letter = raw_input()
    index = letters.index(letter)
    blanks = blanks[:index] + letter + blanks[index + 1:]
    print blanks

您没有替换正确的空白/下划线,您只是按顺序替换它们。相反,您需要找到要替换的正确空白,然后替换它。在空白完全填满之前,不要指望这段代码会无限运行。如果你想要,你可以弄清楚我猜(因为你的问题是特定于替换正确的字母)。此外,您可能希望该程序也处理“abcdef”以外的输入:)。

于 2013-09-03T04:25:59.660 回答
1

您可以为此使用列表推导。这是一个例子:

letters = 'abcdefg'
typed = raw_input('Type the characters a through g: ')
print ''.join(s if s in typed else '_' for s in letters)

样本输出:

Type the characters a through g: abdef
ab_def_

这是一个更完整/高级的刽子手示例:https ://gist.github.com/dbowring/6419866

于 2013-09-03T04:56:41.100 回答
0
letters = 'abcdefg' 

print('type letters from a to g')

all_letters = list(letters)
blanks = ['_'] * len(letters) 

while True:
    guessed_letter = input("guess > ")

    while guessed_letter in all_letters:
        index = all_letters.index(guessed_letter)
        all_letters[index] = None
        blanks[index] = guessed_letter

    output = ''.join(blanks)
    print(output)

    if letters == output:
        print("gg")
        break

或者,如果您更喜欢更严格的版本

letters = 'abcdefg' 

print('type letters from a to g')

all_letters = list(letters)
blanks = '_' * len(letters) 

while True:
    guessed_letter = input("guess > ")

    while guessed_letter in all_letters:
        index = all_letters.index(guessed_letter)
        all_letters[index] = None       
        blanks = blanks[:index] + guessed_letter + blanks[index+1:]

    print(blanks)

    if letters == blanks:
        print("gg")
        break
于 2013-09-03T04:42:45.637 回答