这个Python代码是否等同于Java代码?

时间:2017-09-01 19:37:29

标签: java python

我对Python很新,所以请耐心等待。

这是Java代码:

public static int countDeafRats(final String town) {
    String t = town.replaceAll(" ","");
    int count = 0;
    for (int i = 0 ; i < t.length() ; i+=2) 
        if (t.charAt(i) == 'O') count++;
    return count;
}

这是我尝试将其翻译为Python:

def count_deaf_rats(town):
    count = 0
    increment = 0
    newTown = town.replace(" ", "")
    while increment <= len(newTown):
        if newTown[increment]=='O':
            count +=1
            increment +=2
    return count

我没有在Python中使用for循环,因为我不知道如何递增2,所以正如标题所说,这是否可以接受?

修改,示例输入:~O~O~O~OP~O~OO~

3 个答案:

答案 0 :(得分:4)

您似乎正在尝试查找字符串中出现在索引处增加2处的零的数量。您可以在Python中使用正则表达式和列表推导:

import re

new_town = re.sub("\s+", '', town)

count = sum(i == "0" for i in new_town[::2])

答案 1 :(得分:1)

好的我建议你必须按照 @ Ajax1234 提供的答案,但既然你提到你对python是相当新的(可能对regex不太熟悉),所以我会建议您在当前实例中坚持使用您要转换为的代码。只需要对代码进行一些修改(尽管与缩进相关的非常小),这是相当正确的。修改后的代码如下所示:

def count_deaf_rats(town):
    count = 0
    increment = 0
    newTown = town.replace(" ", "")
    while increment <= len(newTown):
        if newTown[increment]=='O':
            count +=1
        increment +=2
return count

#print count_deaf_rats("~O~O~O~OP~O~OO~")

这会产生与相应java代码相同的结果。此外,由于while循环在python中不被认为handy(但在某些情况下也非常有用),因此我将坚持使用for循环:

#Same as above
for increment in range(0,len(newTown),2):
    if newTown[increment] == 'O':
        count +=1
return count

详细了解范围函数here

答案 2 :(得分:1)

我不太了解Java,但我相信这是将代码更直接地翻译成python:

def countDeafRats(town):
    count = 0
    new_town = town.replace(' ','')
#format for range: start, end (exclusive), increment
    for i in range(0, len(new_town), 2):
        if new_town[i] == '0':
            count += 1
    return count

我同意@ Ajax1234的回答,但我认为你可能想要一个看起来更接近你的代码的例子,使用一个for循环来演示使用增量为2.希望这有帮助!