0

我有以下代码:

secretWord = 'hello'
letter = 'l'
tag = '_ '*len(secretWord) # tag = '_ _ _ _ _'

for m in rage(len(secretWord)):
    if letter == secretWord[m] and m == 0:
         tag.replace(tag[m],letter)
    else:
         tag.replace(tag[m+2],letter)

我想要的理想输出是tag = '_ _ l l _' 出于某种原因,即使我的逻辑完全准确,我也无法让它工作。我有一个 for 循环遍历 secretWord 中的每个字符,如果字母等于当时在 for 循环中的特定字符,则用该字母替换标记中的适当位置并保持所有其他空白('_')相同。

4

2 回答 2

3

字符串在 Python 中是不可变的,您不能修改它们。这就是你tag没有更新的原因。

Python 有一个非常奇怪但有用的数据模型。有些类型是可变的(例如列表和字典),有些是不可变的(例如字符串和数字)。

字符串实例的replace()函数(实际上是所有其他字符串函数)不能修改字符串。相反,它返回原始字符串的新修改版本。

python 和非托管编程语言(如 C/C++)之间更大的区别之一是,在 python 中,变量总是对值的引用,而在 C/C++ 中,变量是值的实际存储。

奇怪的是,当从 python 开始时,这在一定程度上可以忽略,因为某些算法的语法是相同的。就像是:

a = 7
a += 35
s = "Hello"
s += " World"

在 Python 和 C/C++ 中产生a = 42和。s = "Hello World"这对于 C/C++ 来说是很清楚的,但在 python 中却发生了一些完全不明显的事情。

在pythons中首先指的是字符串"Hello"(不是:s包含字符串"Hello")。然后将字符串Hello和字符串World连接起来,然后将引用s重置为指向新字符串"Hello World"

接下来的事情a = b总是意味着:复制参考。它永远不会复制该值。对于字符串和整数,它在实践中并没有太大的区别,但对于更复杂的类型却有。但这现在可能超出了这个问题。

于 2013-03-29T21:04:10.073 回答
1

tag是已知或空白字符的列表。用于' '.join(tag)在需要时制作显示的表格。


secretWord = 'hello'
letter = 'l'

tag = ['_']*len(secretWord)
tag = [(letter if m == letter else t) for m, t in zip(secretWord, tag)]

print(' '.join(tag))
# _ _ l l _

以下是一些解释此解决方案中使用的工具的链接:

  • [expr for variable in iterable]是一个列表理解
  • letter if m == letter else t是一个条件表达式
  • zip用于将 中的字母与 中的secretWord字母 配对tag
  • ' '.join用于将字母列表连接成单个字符串,每个字母之间有一个空格。
于 2013-03-29T21:04:09.320 回答