Wpis z mikrobloga

Program ma policzyć ile jest wystąpień 'bob' w s. Zawsze jednak wyświetla 1, dla przykładu poprawnie jest 3. Co nie tak? Python 2.7.
faza = 0
bobNum = 0
s = 'azcbobobegghaklbob'
for char in s:
if faza == 1 and char == 'o':
faza+=1
elif (faza == 0 or faza == 2) and char == 'b':
faza += 1
else:
faza = 0
if faza == 3:
bobNum =+ 1
faza = 1



print "Number of times bob occurs is: " + str(bobNum)

http://pastebin.com/sA5BszG2
#naukaprogramowania #python
  • 20
Już nie mogłem edytować.

Efektywnie, to co masz znaczy:

bobNum = +1

Czyli nie używasz operatora +=, który zwiększania wartości. Zamiast tego, używasz dwóch operatorów: "=" (operator przypisania) oraz jednoargumentowego "+". Jednoargumentowy plus w sumie nie robi tu nic. Istnieje trochę dla symetrii z jednoargumentowym minusem, żebys mógł napisać a = -b. Ale a = +b to w zasadzie to samo co a = b.

Więc to tak jakbyś tam miał:

bobNum
@venomik: Tylko str.count('bob') w 'azcbobobegghaklbob' da wynik 2, a powinno wyjsc 3.

@straggler: Ktos mądry wejdzie i zrobi to dużo lepiej, ale działa : D

string = raw_input('dawaj bob: ')
a = 0
for i in range(0,len(string)-2):
        if string[i] == 'b' and string[i+1] == 'o' and string[i+2] == 'b':
                        a += 1
        else:
                pass
print a
@Melt @straggler

Chodzi o niewykorzystanie możliwości języka czy sam algorytm? Jeśli to drugie proszę o rozwinięcie.

jeżeli chodzi o język, to tak, da się inaczej

s = 'azcbobobegghaklbob'
bob_count = sum([True for i, _ in enumerate(s) if s[i:i+3] == 'bob'])

Nie wiem na ile poprawnie, ale to moja próba.