google python class string1 exercise

时间:2012-12-20 17:44:16

标签: python

我正在处理作为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 个答案:

答案 0 :(得分:1)

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

  

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

考虑一下如何使用该功能。

答案 1 :(得分:1)

已提供提示,并且不涉及使用循环!

它建议使用s.replace(stra, strb)并描述可能产生的影响,因此,如果问题陈述允许,请查看sstrastrb应该是什么。< / p>

  • 我们只想在第一个字符后替换出现,因此s中的s.replace(stra, strb)应该是第二个字符的所有内容。我们可以使用切片s[1:]来获取此信息(此处s是传递给函数的参数)。
  • 由于我们要替换第一个字符的所有匹配项,stra应该是第一个字符,或s[0](再次s是参数)。
  • strb很简单,它说我们正在用*替换匹配,因此strb'*'

所以在你的函数的某个地方,你需要s[1:].replace(s[0], '*'),这将使你在那里的大部分时间。

答案 2 :(得分:1)

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

def fix_start(s):

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

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

答案 3 :(得分:0)

这是我更长的解决方案。我将s分成两部分,然后将字符串的第二部分替换为“休息”。它更长,但包含在这里以显示解决难题的思考过程。

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

  return star+rest