Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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和java/c中的循环_Java_Python_C++_Loops_For Loop - Fatal编程技术网

比较python和java/c中的循环

比较python和java/c中的循环,java,python,c++,loops,for-loop,Java,Python,C++,Loops,For Loop,我正在尝试将以下代码从Java转换为Python,这是输入: commonPrefix("", "something"), //one string is "" commonPrefix("some", "something"), " //for loop finishes commonPrefix("someother", "something") //for loop breaks Java/C++代码: String commonPrefix(String str1, String st

我正在尝试将以下代码从Java转换为Python,这是输入:

commonPrefix("", "something"), //one string is ""
commonPrefix("some", "something"), " //for loop finishes
commonPrefix("someother", "something") //for loop breaks
Java/C++代码:

String commonPrefix(String str1, String str2){
  int len = min(len(str1), len(str2));
  for (int i = 0; i< len; i++) {
      if (str1[i] != str2[i]) break;
  }
  return str1.substring(0,i);
}

你不需要为你的最终返回语句切片,如果它达到这一点,那么整个单词已经匹配,所以你可以只返回整个单词。至于检查单词是否为空,如果
len(str1)==0或len(str2)==0,那么for循环将不会运行,您只需要返回两个值中的最小值

def commonPrefix(str1, str2):
    length = min(len(str1), len(str2))

    for i in range(length):
        if str1[i] != str2[i]:
            return str1[0:i]

    return min(str1, str2)

print(commonPrefix("something", "something"))
>> something
print(commonPrefix("someother", "something"))
>> some
print(commonPrefix("", "something"))
>> ""
print(commonPrefix("something", ""))
>> ""

错误出现在函数的第一行:
len=min(len(str1),len(str2))
。您正在用结果覆盖len函数。我假设,由于您在尝试使用len函数的同一行上执行此操作,python认为变量尚未定义。下面是一个如何修复它的示例

def commonPrefix(str1, str2):  
    min_length = min(len(str1), len(str2))
    for i in range(min_length):
        if str1[i] != str2[i]:
            return str1[:i]
    return str1

其他答案已经充分回答了这个问题,但是对于
itertools
中的
takewhile
,列表理解也可以做同样的事情

from itertools import takewhile

def common_prefix(s1, s2):
    return ''.join([c[0] for c in takewhile(lambda x: x[0] == x[1], zip(s1, s2))])
我的三分钱

def common_prefix( s1, s2 ):
    i, l = 0, min( len( s1 ), len( s2 ) )
    while i < l and s1[i] == s2[i]: i += 1
    return s1[:i]

print( "\"{}\"".format( common_prefix( "", "something" ) ) )
print( "\"{}\"".format( common_prefix( "some", "something" ) ) )
print( "\"{}\"".format( common_prefix( "someother", "something" ) ) )
def公共_前缀(s1、s2):
i、 l=0,最小值(透镜(s1),透镜(s2))
而i
你把一切都搞砸了。在Java中,您无法像正在尝试的那样从字符串中获取字符。这个代码甚至不会编译。C++中没有“代码”>字符串类型,除非您自己编写或从库中获得它。我使用JavaAyt,Python约定是使用SnaKeKEY函数名称。因此,函数名应该是
common_prefix
。应该返回min(str1,str2)ic,您使用while来绕过索引问题,我感到困惑。如果您感到困惑,为什么要接受答案?它甚至没有回答被问到的问题。这是方法名称的解决方案@user389955@AK47我认为这并不是令人困惑的答案。正是在原始代码中使用索引混淆了::@VladfromMoscow是其bigdadyrep偏好。我打赌他一定被你的答案弄糊涂了,这对Python新手来说很难理解&这个家伙正在努力为循环编写代码/salt@AK47. 我正在学习python,所以我试图用python重写一些java代码。我认为“for I in range(length)”和“for(int I=0;Idef common_prefix( s1, s2 ): i, l = 0, min( len( s1 ), len( s2 ) ) while i < l and s1[i] == s2[i]: i += 1 return s1[:i] print( "\"{}\"".format( common_prefix( "", "something" ) ) ) print( "\"{}\"".format( common_prefix( "some", "something" ) ) ) print( "\"{}\"".format( common_prefix( "someother", "something" ) ) )