0

我正在研究作为 Google Python 类的一部分的 string1 练习。我遇到的问题是C:

C. fix_start
Given a string s, return a string
where all occurences of its first char have
been changed to '*', except do not change
the first char itself.
e.g. 'babble' yields 'ba**le'
Assume that the string is length 1 or more.
Hint: s.replace(stra, strb) returns a version of string s
where all instances of stra have been replaced by strb.

我正在考虑使用循环将每个字母与第一个字母进行比较,并用“*”替换任何匹配的字母。我认为必须有一个更简单的方法。有没有人有什么建议?

4

4 回答 4

1

这是我得到的,不需要循环。

def fix_start(s):

  return s[0]+s[1:].replace(s[0], '*')

考虑到他们告诉我们我们应该假设字符串不是'',这才有效。在这种情况下,应该将返回行移到 if 中,然后首先检查 len。

于 2013-03-07T03:10:01.280 回答
1

是的,有一种更简单的方法,问题已经给了你一个提示:

s.replace(stra, strb)返回一个字符串版本,其中的所有实例stra都已替换为strb.

想想你会如何使用这个功能。

于 2012-12-20T17:46:02.367 回答
1

这是我更长的解决方案。我将 s 分成两部分,并在字符串的第二部分替换单词的“其余部分”。它更长,但包含在此处以显示解决难题的思维过程。

def fix_start(s):
  star = s[0]
  rest = s[1:]
  rest = rest.replace(star,'*')

  return star+rest
于 2013-05-23T12:20:53.823 回答
1

已经提供了一个提示,它不涉及使用循环!

它建议使用s.replace(stra, strb)并描述会产生什么影响,因此鉴于问题陈述,让我们看看什么s、、strastrb应该是什么。

  • 我们只想替换第一个字符之后的出现,所以sins.replace(stra, strb)应该是从第二个字符开始的所有内容。我们可以使用切片来获取它s[1:](这里s是传递给函数的参数)。
  • 由于我们要替换所有出现的第一个字符,stra应该是那个第一个字符,或者s[0](又s是参数)。
  • strb很简单,它说我们正在用 替换匹配项*,所以strb'*'

所以在你的函数中的某个地方,你会想要s[1:].replace(s[0], '*'),这会让你大部分时间到达那里。

于 2012-12-20T17:53:11.113 回答