Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 破解代码访谈1.4_Python_Python 2.7 - Fatal编程技术网

Python 破解代码访谈1.4

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" 代码: 也许我错过了一些东西,但仅仅这样做有什么错: >

我通过破解密码面试练习面试问题

问题是对于每个空间“”,请将其替换为“%20”。 字符串的结尾为字符串中的每个空格增加了2个空格

例如,输入:str=b_g_f_______________________代表空间。更容易表示

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()))