Google Python类弦乐练习



i从事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.

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

是的,有一种更简单的方法可以做到,这个问题已经为您提供了提示:

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

想想如何使用该功能。

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

它建议使用s.replace(stra, strb)并描述将产生什么效果,因此鉴于问题陈述,让您查看sstrastrb应该是什么。

  • 我们只想替换第一个字符之后,因此s.replace(stra, strb)中的s应该是第二个字符的所有内容。我们可以使用slice s[1:]来获得此功能(此处 s是传递到函数的参数)。
  • 由于我们要替换第一个字符的所有出现,因此stra应该是第一个字符或s[0](再次是s是参数)。
  • strb很容易,它说我们正在用*替换比赛,因此strb'*'

所以在您的功能中的某个地方,您需要s[1:].replace(s[0], '*'),这将使您大部分时间。

这是我得到的,无需循环。

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

这仅考虑他们告诉我们我们应该假设字符串不是''。在这种情况下

这是我的更长解决方案。我将S分为两个部分,并在字符串的第二部分中进行了替换。它更长,但在这里包括一个思考过程来解决难题。

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

最新更新