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)
并描述将产生什么效果,因此鉴于问题陈述,让您查看s
,stra
和strb
应该是什么。
- 我们只想替换第一个字符之后,因此
s.replace(stra, strb)
中的s
应该是第二个字符的所有内容。我们可以使用slices[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