Python 破解代码访谈1.4
我通过破解密码面试练习面试问题 问题是对于每个空间“”,请将其替换为“%20”。 字符串的结尾为字符串中的每个空格增加了2个空格 例如,输入:str=b_g_f_______________________代表空间。更容易表示Python 破解代码访谈1.4,python,python-2.7,Python,Python 2.7,我通过破解密码面试练习面试问题 问题是对于每个空间“”,请将其替换为“%20”。 字符串的结尾为字符串中的每个空格增加了2个空格 例如,输入:str=b_g_f_______________________代表空间。更容易表示 output: str2 = "b%20g%20f" 目前我的输出无法正常工作 input: "b c " output: "b%20c%20%20" correct output: "b%20c" 代码: 也许我错过了一些东西,但仅仅这样做有什么错: >
output: str2 = "b%20g%20f"
目前我的输出无法正常工作
input: "b c "
output: "b%20c%20%20"
correct output: "b%20c"
代码:
也许我错过了一些东西,但仅仅这样做有什么错:
>>> s = "b f g "
>>> s.strip().replace(' ','%20')
'b%20f%20g'
改写语言中固有的行为并不会让你变得更聪明,恰恰相反。这样看:
任何Python开发人员都清楚地知道这段代码的作用。
这些功能都有很好的文档记录和测试。
我用大约1%的时间编写了这个函数,这是您编写和测试函数所花费的时间。
在输入字符串的末尾,这些空格将不算作转换的一部分。 根据ASCII,空格字符“”是数字32,而空字符是数字0。这将有助于您理解这个问题的含义,因为在char数组的末尾有足够的空间。 除此之外,这个面试问题还规定你应该在适当的地方进行转换。所以尽量不要为它创建第二个字符串。这是作弊吗
> import urllib
> urllib.quote("b g f ")
'b%20g%20f%20%20%20%20%20'
多亏了@SteveJessop,我终于理解了这个问题,我不确定示例中的正确输出是什么,下面是我对使用生成器的看法,也许它更有效:
input = "b g f "
def generate_str(input):
new, orig = [len(input)] * 2
for i, char in enumerate(input):
if i == new:
break
if char == " ":
new -= 2
yield "%20"
else:
yield char
print ''.join(generate_str(input))
Python字符串是不可变的。因此,如果您想在Python中实现这样的字符串替换,那么输入字符串中的额外空格将毫无帮助。如果要用Python解决问题,请以Python的方式进行:
def editstr(s):
n = s.count(' ')
if n == 0: return s
return s[:-2*n/3].replace(' ', '%20')
这将删除在末尾添加的额外空格,并使用.replace来执行实际的字符串替换。更多pythonic:
import urllib
urllib.quote(url.strip())
对上述讨论采取后续行动:
urllib.quote(url[:-2]+(url[-2:].strip()))
…你不能只做str.replace“”,“%20”…?不要用python编写C代码。@nnoneo你读了整个问题了吗,包括这个例子?我仍然不理解要求:输出字符串是否应该忽略输入字符串末尾的空格?@liondacer:这对我来说很有意义。我的意思是,我不知道为什么有人可能需要Python中的这个函数,但我可以阅读它的规范,我可以看到它更适用于C。然而,我在评论中与一些人进行了两次讨论,他们完全忽略了你所说的关于附加尾随空格的内容,我认为他们被这个问题对Python的不恰当性弄糊涂了。这没什么错!但是我真的不想使用这些函数。也许我对自己太苛刻了,但是=/@sudo_O:您的代码为输入“”提供了错误的输出三个空格,这是错误的。这也是错误的结果,你使用的值应该是“b%20f%20g%20%20”-根据描述,结尾处只应删除N*2个空格。如果这是一次面试,而我是面试官,我希望得到这样一个答案,它表明你清楚地理解了问题,也很好地掌握了你的选择语言。我不同意有很多方法要解决这个问题,需要清楚地理解所需的语言和逻辑。一个好的面试问题不需要100行代码来回答。它不符合问题的要求,所以它可能与是否作弊无关。也就是说,额外的尾随空格看起来很傻,所以这可能是个糟糕的问题。如果是这样的话,那么你回答提问者应该问的问题可能不是作弊…@SteveJessop,你能解释一下吗?也许我误解了这个问题。这个问题说,由于未知的原因,输入字符串包含两个额外的尾随空格,每个空格应该被转换。示例“正确输入/输出”显示了已删除的这些附加尾随空格。示例“不正确的输出”显示了这些已转换的附加尾随空格。@SteveJessop那么您是否应该计算输入中的空格数,然后在输出末尾添加2倍的空格数,然后进行编码?我被这个问题弄糊涂了。请专注于给出的例子。输入字符串中有6个空格。其中两个已转换,其中4个已忽略字符串中每个空格的两个额外空格。是的,我知道我应该在适当的位置执行此操作。想先尝试一种不同的更简单的方法!谢谢你的意见@nneonneo:+1,用于能够读取规范并实现它,而不是实现您认为更合理的其他内容。如果输入字符串以要替换的空格结尾,则s.strip或s.rstrip将错误地删除比所需更多的空格。例如,考虑“xxy'”,它有三个尾随空间;所需的输出为“x%20”。对于所有长度大于2且仅包含空格的偶数字符串,此操作均失败。@sudo\u O:请仔细阅读问题说明。此解决方案适用于仅包含空格的字符串,前提是它具有3个空格的倍数
这是问题描述所必需的。如果字符串包含4个空格,则一个字符串空格将替换为2个匹配空格和1个不明确空格,还是一个空字符串应为2对匹配空格?这个案例似乎没有定义。
urllib.quote(url[:-2]+(url[-2:].strip()))