Wcześniej omawialiśmy wzór akumulatora.
Ale wzór akumulatora staje się jeszcze
mocniejszy, gdy połączymy go z warunkami warunkowymi.
Przypomnijmy, że wzór akumulatora
obejmuje trzy szerokie kroki.
Najpierw inicjujemy zmienną akumulatora,
a następnie iterujemy odpowiednią sekwencję.
Następnie, gdy przechodzimy przez tę sekwencję,
aktualizujemy naszą zmienną akumulatora.
Ostatecznie
zmienna akumulatora, jeśli wykonaliśmy te kroki dobrze,
ma odpowiedź, której chcemy.
Zastosujmy ten szablon i użyjmy
go w połączeniu z warunkami warunkowymi.
Załóżmy, że mamy tutaj frazę i
chcemy policzyć liczbę
znaków, które nie są spacjami.
Innymi słowy, chcemy policzyć
1, 2, 3, 4.
Chcemy pominąć miejsce pięć,
pominąć przestrzeń 6
, 7 i tak dalej.
Następnie możemy użyć
wzoru akumulatora z warunkami warunkowymi.
Sposób, w jaki możemy to zrobić, polega na tym, że
inicjujemy naszą całkowitą zmienną akumulatora na zero.
Innymi słowy, liczba
znaków niebędących spacjami, które widzieliśmy do tej pory.
Następnie iterujemy naszą sekwencję,
w tym przypadku jest to fraza.
Następnie odpowiednio aktualizujemy naszą zmienną akumulatora.
W tym przypadku chcemy powiedzieć,
widzieliśmy jeszcze jedną przestrzeń bez znaków, jeśli
postać w naszej frazie nie jest spacja.
Piszemy, jeśli znak, a następnie wykrzyknik równa się,
to znaczy nie równa się.
Jeśli znak nie jest spacją,
mówimy, że suma równa się sumie plus jeden.
Kiedy uruchomimy nasz kod,
będzie policzył liczbę znaków spoza spacji.
W tym przypadku jest to 26.
Gdybyśmy mieli tu tylko spacje, otrzymalibyśmy zero.
Gdybyśmy mieli trzy postacie niebędące
spacjami, dostałbyś trzy, i tak dalej.
Gdybyśmy chcieli rozwiązać nieco inny problem.
Załóżmy, że chcemy policzyć
liczbę samogłosek wewnątrz
tego łańcucha s. Następnie wykonujemy te same szerokie kroki.
Inicjujemy naszą zmienną akumulatora x na zero.
Następnie przechodzimy przez naszą sekwencję.
Następnie mówimy, jeśli ta postać i,
więc ja jestem indywidualną postacią.
Jeśli jest na tej liście, a,
e, i, o,
u, to znaczy,
że jeśli ja jest samogłoską, to jest
to jedna z a,
e, i, o, u.
Jeśli jest to samogłoska,
aktualizujemy naszą zmienną akumulatora x, aby dodać ją do niej.
Rezultat jest taki, że będziemy
liczyć liczbę samogłosek.
Kiedy uruchamiamy nasz kod,
widzimy, że w ciągu znaków znajduje się osiem
samogłosek. Możemy to wizualizować na przykładzie.
Tutaj chcemy policzyć liczbę O i onomatopei.
W naszym kodzie, zapętlamy każdy znak i
mówimy, czy znak C jest znakiem O,
następnie dodaj jeden do liczby O.
W rezultacie zamierzamy
zapętlić każdy znak w
naszym słowie, drukując liczbę O w naszym słowie.
Kiedy widzimy pierwsze O,
dodajemy do niego jedno.
Kiedy widzimy drugie O,
mieliśmy kolejne.
Następnie przechodzimy przez pętlę za każdym razem, gdy widzimy O,
zwiększamy liczbę O o jeden.
Kiedy nasz kod zostanie uruchomiony,
liczba O
wyniosłaby cztery, a my drukujemy ich cztery O w onomatopei.
Innym powszechnym wzorcem, który łączy warunki warunkowe i
wzorzec akumulatora, jest tak
zwana akumulacja wartości maksymalnej.
W akumulacji wartości maksymalnej
staramy się znaleźć największą
rzecz na liście rzeczy.
W tym przykładzie załóżmy, że chcemy znaleźć
największą liczbę na tej liście liczb.
Numy to tylko losowa lista liczb. To,
co zamierzamy zrobić, to użyć
wzoru akumulatora, aby śledzić
najlepszą lub najwyższą liczbę, jaką widzieliśmy do tej pory.
Innymi słowy, przypisujemy best_num.
Na początku przypisujemy go jako pierwszą liczbę, którą
widzimy, więc przypisujemy najlepszą liczbę jako dziewięć.
Następnie zamierzamy
zapętlić
wszystkie liczby w numerach i powiedzieć,
jeśli znajdziemy wyższą liczbę niż nasza najlepsza do tej pory liczba,
to zaktualizujemy najlepszą liczbę, aby była tą liczbą.
Mówimy dla każdej liczby n,
jeśli n jest większe niż
najlepsza liczba, jaką widzieliśmy
do tej pory, to ponownie przypisz najlepsze num na
n. Zamierzam
symulować wykonanie na tym kodzie,
zanim faktycznie go uruchomię.
Najpierw przypisujemy najlepszy numer jako pierwszą liczbę,
a następnie zapętlamy każdą liczbę.
Po przypisaniu najlepszego num jako pierwszej liczby,
następnie przechodzimy przez każdą liczbę.
Po pierwsze, n będzie
dziewięć i mówimy, że jest dziewięć większe niż najlepsze num,
czyli dziewięć, tak nie jest, więc
następnie przechodzimy do następnej liczby trzy.
Czy trzy są większe niż dziewięć?
Nie jest tak, że przechodzimy do następnej ósemki.
Czy osiem jest większe niż dziewięć?
Nie jest tak, że przechodzimy do następnego numeru, 11.
Następnie, teraz, kiedy n jest 11,
mówimy, że jest 11 większe niż dziewięć?
To jest. Ponownie przypisujemy najlepsze num z dziewięciu, aby
zamiast tego było 11, a
następnie przechodzimy do następnej liczby,
pięć i zamiast porównywać ją do dziewięciu,
ponieważ najlepsza liczba to teraz 11,
porównujemy, jest pięć większe niż 11?
To nie jest. Przechodzimy do następnej liczby,
29 i pytamy, czy
29 jest większe niż 11?
Dlatego ponownie przypisujemy najlepszy numer na 29.
Potem po tym, jak to zrobiliśmy, n jest teraz dwa,
i pytamy, czy dwa są większe niż 29? W
tym momencie tak nie jest,
ponieważ przeszliśmy przez
wszystkie liczby w naszej sekwencji,
a potem skończyliśmy z tą czterema pętlami.
Kiedy skończymy z tą czterema pętlami,
najlepszy numer został przypisany do 29,
więc drukujemy 29.
Innymi słowy, naszą strategią
akumulacji maksymalnej wartości jest
śledzenie najwyższej wartości,
jaką widzieliśmy do tej pory, a następnie zapętlenie każdego elementu w
sekwencji i jeśli zobaczymy liczbę
wyższą niż najwyższa, którą widzieliśmy do tej pory,
a następnie ponownie przypisz nasz najwyższy,
który widzieliśmy do tej pory, do tej wyższej liczby.
Wiemy, że zanim ta czterema pętlami zostanie
uruchomiona, najlepszym numerem będzie
największa liczba w naszej sekwencji.
Kiedy uruchomimy ten kod,
powinniśmy spodziewać się wydrukowania 29 i widzimy, że tak jest.
Jeśli zmienię tę sekwencję, aby
zamiast tego mieć 50 zamiast pięciu,
to powinniśmy teraz spodziewać się wydrukowania 50 i tak dalej.
Jeśli zmienię to na
200, wydrukuje się 200.
Zawsze drukuje największą liczbę w sekwencji.
W tym pytaniu jesteśmy pytani, co jest
drukowane w następujących stwierdzeniach?
Przypisujemy s do ciągu, którego się uczymy,
a następnie przypisujemy x jako zero.
X tutaj jest naszą zmienną
akumulacyjną, s jest sekwencją, nad którą iterujemy, i mówimy,
jeśli ja jest w a,
b, c, d, e więc innymi słowy,
jeśli jest to jeden z tych znaków,
to przypisujemy x jako x+1.
Następnie na końcu drukujemy wartość x.
To jest wzorzec akumulacji i
gromadzimy liczbę znaków, które są a,
b, c, d i e. Aby odpowiedzieć na to pytanie,
musimy policzyć liczbę a, b, c, d
i e w ciągu s. Widzę 1, 2,
3, 4, 5, więc oczekuję, że odpowiedź będzie pięć.
To pytanie dotyczy tego, co
wydrukowano w poniższych stwierdzeniach?
Mamy zmienną o nazwie wartość min
, która jest przypisywana do zera i mamy listę
, którą iterujemy w tej czterech pętli i mówimy, że
jeśli element na tej liście jest mniejszy niż wartość minimalna,
to wartość minimalna jest równa pozycji.
Tutaj przypisujemy wartość minimalną do zera
i jedną rzeczą, którą od razu zauważyłem, jest to, że
żaden element na tej liście nie jest w rzeczywistości
mniejszy niż zero, więc oznacza
to, że to wyrażenie logiczne nigdy nie będzie
prawdziwe, ponieważ nie mamy elementu, który jest mniejszy niż zero.
Spodziewam się, że to nigdy nie zadziała i pod koniec naszej pętli,
minimalna wartość będzie wynosić zero.
Jeśli rzeczywiście chcieliśmy
zebrać minimalną wartość z tej listy,
zamiast przypisywać wartość minimalną do zera,
powinniśmy przypisać wartość min
równą pierwszej pozycji na liście.
Innymi słowy, lista poniżej zera,
a następnie wartość minimalna zaczynałaby się jako pięć i
zrobilibyśmy formę akumulacji wartości maksymalnej.
Jak widzieliśmy, wzór akumulatora staje się jeszcze
mocniejszy, gdy połączymy go z warunkami warunkowymi.
To wszystko na teraz, aż do następnego razu.