2015-01-15 3 views
0

Я работаю на питоне exercise, который спрашивает:двойной, если условие в Python для цикла

# Return True if the string "cat" and "dog" appear the same number of 
# times in the given string. 
# cat_dog('catdog') → True 
# cat_dog('catcat') → False 
# cat_dog('1cat1cadodog') → True 

Это мой текущий код:

def cat_dog(str): 
    c=0 
    d=0 
    for i in range(len(str)-2): 
    if str[i:i+3]=="cat": 
     c=+1 
    if str[i:i+3]=="dog": 
     d=+1 
    return (c-d)==0.0 

Я смотрю на него, и я думаю, что он должен но он не прошел некоторые тесты, которые подсказывают мне, что я не понимаю что-то в том, как работает логика Python. Любое объяснение, почему мое решение не работает, было бы здорово. Это все результаты тестов:

cat_dog('catdog') → True   True   OK   
cat_dog('catcat') → False   False   OK   
cat_dog('1cat1cadodog') → True  True   OK   
cat_dog('catxxdogxxxdog') → False True   X  
cat_dog('catxdogxdogxcat') → True True   OK    
cat_dog('catxdogxdogxca') → False True   X 
cat_dog('dogdogcat') → False  True   X 
cat_dog('dogdogcat') → False  True   OK   
cat_dog('dog') → False    False   OK   
cat_dog('cat') → False    False   OK   
cat_dog('ca') → True    True   OK   
cat_dog('c') → True     True   OK   
cat_dog('') → True     True   OK 
+1

Я думаю, вы имеете в виду 'c + = 1' и' d + = 1' вместо 'c = + 1' и' d = + 1' – dazedconfused

+0

, конечно же, простую опечатку, как видно из ответа gnibbler – MyCarta

ответ

6

Вы должны

c += 1 вместо c = +1

и

d += 1 вместо этого of d = +1

3

Ниже вы можете найти ответы на рассылку:

cat_dog=lambda str1: str1.count("cat")==str1.count("dog") 
print (cat_dog("catcat")) 

Она возвращает True если отсчеты равны, иначе возвращаются False. Но если это вас смутило, здесь долго.

def cat_dog(str1): 
    c="cat" 
    d="dog" 
    a=str1.count(c) 
    b=str1.count(d) 
    if a==b: 
     return True 
    return False 
print (cat_dog('catcat')) 

Вот лучший способ. count очень полезен для вашей программы. Меньше кодов, потому что readability считается.

print (cat_dog('catcat')) -False 
print (cat_dog('catdog')) -True 
5

Более простой способ решить эту проблему было бы использовать встроенные строковые функции, например:

def cat_dog(s): 
    return s.count('cat') == s.count('dog') 
+1

Как код делает предположение, что они появляются рядом друг с другом? – ryanpattison

+0

Я собирался спросить того же – MyCarta

Смежные вопросы