# 9.13. The Accumulator Pattern with StringsÂ¶

We can also accumulate strings rather than accumulating numbers, as youâ€™ve seen before. The following program isnâ€™t particularly useful for data processing, but we will see more useful things later that accumulate strings.

Look carefully at line 4 in the above program (ac = ac + c + "-"). In words, it says that the new value of ac will be the old value of ac concatenated with the current character and a dash. We are building the result string character by character.

Take a close look also at the initialization of ac. We start with an empty string and then begin adding new characters to the end. Also note that I have given it a different name this time, ac instead of accum. Thereâ€™s nothing magical about these names. You could use any valid variable and it would work the same (try substituting x for ac everywhere in the above code).

We can use the accumulator pattern to reverse a string, as in the following code.

The key thing here is that we have ac = c + ac. The iterator variable comes first, before the accumulator. We are pre-pending the new value onto the beginning of the value that has been accumulated so far, and that leads to reversing the whole string. Try it in codelens if youâ€™re having trouble envisioning why this works.

Note

A little humorous asideâ€¦ Youâ€™ve probably heard of Murphyâ€™s Law, that everything that can go wrong will go wrong.

In a paper co-authored by one of this bookâ€™s authors, we described eBayâ€™s reputation system as an example of Yhprumâ€™s Law (Yhprum is Murphy spelled backward, with a little change in capitalization): â€śSystems that shouldnâ€™t work sometimes do, or at least work fairly well.â€ť

1. Accumulate all the characters from the string in the variable str1 into a list of characters called chars.
Assign an empty string to the variable output. Using the range function, write code to make it so that the variable output has 35 a s inside it (like "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"). Hint: use the accumulation pattern!