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)
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.
@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
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
wydaje mi sie ze bobNum=+1 to linijka zła, powinno byc bobnum+=1
W trzeciej od końca linii masz bobNum =+1 zamiast bobNum += 1.
Komentarz usunięty przez autora
s.count('bob')
?
@lothar: 2
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
string.count(substring)
Niekoniecznie zbędny. Nie dawałem Ci rozwiązania. Edukowałem Cię nt. różnicy pomiędzy += a =+. Operatora += użyjesz jeszcze nie raz.
Komentarz usunięty przez autora
http://pastebin.com/M0hJM2q3
http://pastebin.com/Da0gTttY
@Sh1eldeR:
Chodzi o niewykorzystanie możliwości języka czy sam algorytm? Jeśli to drugie proszę o rozwinięcie.
@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
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.
bob_count = sum([s[i:i+3] == 'bob' for i, _ in enumerate(s)])