Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/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 2个相同位置的相似字符_Python_String_Function - Fatal编程技术网

Python 2个相同位置的相似字符

Python 2个相同位置的相似字符,python,string,function,Python,String,Function,我试图返回两个字符串具有相同字符的位置数 试用代码: def matches(stringOne, stringTwo): if stringOne or stringTwo == " ": return None else: n=0 count=0 if stringOne[n] == stringTwo[n]: count=count+1 else:

我试图返回两个字符串具有相同字符的位置数

试用代码:

    def matches(stringOne, stringTwo):
    if stringOne or stringTwo == " ": 
        return None
    else:
       n=0
       count=0
       if stringOne[n] == stringTwo[n]:
           count=count+1
       else:
           pass
       n=n+1
       return count
例如:

   matches = matches("abcd", "xbade")
   print matches
   2
谢谢!:)

不,这不是家庭作业


请不要用拉链。我没有尝试使用Python内置函数。

您可以使用带有
zip
的生成器表达式来迭代字符串,以进行逐字母比较

def matches(stringOne, stringTwo):
    return sum(1 for i,j in zip(stringOne, stringTwo) if i == j)

>>> matches("abcd", "xbade")
2
>>> matches('dictionary', 'dibpionabc')
6
如果您不想使用Python的
zip
函数

def matches(stringOne, stringTwo):
    shorter = min(len(stringOne), len(stringTwo))
    same = 0
    for i in range(shorter):
        same += stringOne[i] == stringTwo[i]
    return same

尽管该方法也使用
min
len
范围
。如果你拒绝使用一种语言的内置函数,你真的是束手无策。

我会按照赛博的建议使用生成器,否则就把函数改大:

def matches(a, b):
    total = 0

    for i, j in enumerate(a):
        for x, y in enumerate(b):
            if i == x and j == y:
                total += 1

    return total
a='abcd'
b='xbddea'
def匹配(astr、bstr):
总数=0
i=0

当我离你很近的时候。考虑Srimon和Strime2具有不同长度的情况。比较之后,您必须检查是否已到达两个字符串的末尾。如果是,返回。使用范围是个坏主意。使用enumerate,就像我在回答中检查索引和值是否相同一样。@MalikBrahimi如果要使用
enumerate
,也可以使用
zip
,但OP出于某种原因不想使用它。使用
range
并不是一个“坏主意”,因为我确保使用两个长度中较短的一个。是的,我试图给OP更多的函数,而不是生成器的单个语句。这里只使用了两个内置项,print()和len()。我记得len()只是一个int查找,而不是每次使用的字符数。我
a = 'abcd'
b = 'xbddea'
def matches(astr, bstr):
    total = 0
    i = 0
    while i<len(astr) and i<len(bstr):
        if astr[i] == bstr[i]:
            total += 1
        i += 1
    return total
print(matches(a,b)