2014-02-18 53 views
31

我:的Python:查找字符串中的子字符串并返回字符串的索引

  • 功能:def find_str(s, char)

  • 和一个字符串:"Happy Birthday"

我基本上想输入"py"并返回3,但我仍然得到2而不是返回。

代码:

def find_str(s, char): 
    index = 0   
    if char in s: 
     char = char[0] 
     for ch in s: 
      if ch in s: 
       index += 1 
      if ch == char: 
       return index 

    else: 
     return -1 

print(find_str("Happy birthday", "py")) 

不知道什么是错的!

回答

5

理想情况下,你会使用str.findstr.index像痴呆刺猬说。但是你说你不能......

你的问题是你的代码只搜索搜索字符串的第一个字符它(第一个)是在索引2

你基本上是说,如果char[0]s,增量index,直到ch == char[0]返回3,当我测试它,但它仍然是错误的。这是一种方法。

def find_str(s, char): 
    index = 0 

    if char in s: 
     c = char[0] 
     for ch in s: 
      if ch == c: 
       if s[index:index+len(char)] == char: 
        return index 

      index += 1 

    return -1 

print(find_str("Happy birthday", "py")) 
print(find_str("Happy birthday", "rth")) 
print(find_str("Happy birthday", "rh")) 

它产生了以下的输出:

3 
8 
-1 
+0

我需要编写一个执行.find函数的算法。不幸的是我不能使用它! – Tyler

+0

@Tyler编辑我的答案,因为没有你的问题的实际答案。 –

+0

谢谢,非常有帮助! – Tyler

115

有一个关于字符串对象一个内置的方法你知道蟒蛇做到这一点?

s = "Happy Birthday" 
s2 = "py" 

print s.find(s2) 

Python是一种“包括语言电池”有写做你最想要什么已经(任何你想要的)..除非这是功课:)

编辑代码:find返回-1如果该字符串找不到。

+8

这应该是接受的答案 – Kev1n91

+2

不基于要求提问 – Oliver

+1

取决于您如何解释问题。如果问题是标题中所述的话,那就没问题。即使不是,你也不应该编写自己的查找方法,除非你正在做作业或出于自动识别的目的。所以可以说“你做错了”是一个合理的答案。 –

0

晚会晚会,正在寻找相同的,因为“in”是无效的,我刚刚创建了以下。

def find_str(full, sub): 
    index = 0 
    sub_index = 0 
    position = -1 
    for ch_i,ch_f in enumerate(full) : 
     if ch_f.lower() != sub[sub_index].lower(): 
      position = -1 
      sub_index = 0 
     if ch_f.lower() == sub[sub_index].lower(): 
      if sub_index == 0 : 
       position = ch_i 

      if (len(sub) - 1) <= sub_index : 
       break 
      else: 
       sub_index += 1 

    return position 

print(find_str("Happy birthday", "py")) 
print(find_str("Happy birthday", "rth")) 
print(find_str("Happy birthday", "rh")) 

产生

3 
8 
-1 

除去低()的情况下,不区分大小写找到没有必要的。

相关问题