【发布时间】:2014-02-05 13:18:54
【问题描述】:
作为大学项目的一部分,我正在用 python 编写一个刽子手游戏,我正在尝试使用 string.replace(old, new) 将空格 (_) 替换为字母。不过,我没有使用实际的字符串字符,而是尝试将变量用于“旧”和“新”。到目前为止,这是我对这一点的了解:
if validGuess == 'true':
if guess in word:
for letter in word:
if letter == guess:
word.replace(letter, guess)
else:
missNum = (missNum + 1)
else:
tryNum = (tryNum - 1)
但是,它不起作用。我没有收到任何错误,它根本不会替换空白。
我在这里做错了什么?有没有更好的方法来实现我正在做的事情?
-编辑-
我尝试实施@Peter Westlake 的解决方案(在我看来这是最优雅的),但我遇到了问题。我有一段代码将随机选择的单词转换为下划线:
#converting word to underscores
wordLength = len(word)
wordLength = (wordLength - 1)
print(wordLength) #testing
for i in range(0,wordLength):
wordGuess = (wordGuess + '_')
print(wordGuess)
这似乎工作正常。这是字母替换的代码:
if validGuess == 'true':
wordGuess = ''.join([letter if guess == letter else wordGuess[pos]
for pos, letter in enumerate(word)])
if guess not in word:
tryNum = (tryNum - 1)
print(wordGuess)
但是,这里是输出:
Guess a letter: a
test
Traceback (most recent call last):
File "G:\Python\Hangman\hangman.py", line 60, in <module>
for pos, letter in enumerate(word)])
File "G:\Python\Hangman\hangman.py", line 60, in <listcomp>
for pos, letter in enumerate(word)])
IndexError: string index out of range
字符串索引超出范围?这是什么意思?
【问题讨论】:
-
我不确定你的情况,
if letter == guess你需要在这里更换什么? -
你能把你的输入和预期输出。
-
"String index out of range" 表示您试图从字符串末尾获取一个字母,这是因为您从 wordLength 中减去 1。
range(x,y)给出了从 x 到 y-1 的所有数字,因此无需再次减 1。一个更简单的方法是:wordGuess = '_' * len(word).
标签: python string variables replace iteration