Bug fixes and features #1
|
@ -33,19 +33,26 @@ def main():
|
|||
word_count_by_status = collections.defaultdict(int)
|
||||
word_count_by_act = collections.defaultdict(int)
|
||||
status_by_chapter = {}
|
||||
|
||||
current_status = None
|
||||
|
||||
for line in open(filename).readlines():
|
||||
if line.startswith(CHAPTER_MARKER):
|
||||
word_count_by_act[act_heading] += word_count_by_chapter[chapter_heading]
|
||||
total_word_count += word_count_by_chapter[chapter_heading]
|
||||
if chapter_heading in status_by_chapter:
|
||||
word_count_by_status[status_by_chapter[chapter_heading]] += 1
|
||||
|
||||
chapter_heading = line[len(CHAPTER_MARKER):].strip('()\n')
|
||||
|
||||
word_count_by_chapter[chapter_heading] = count_words(chapter_heading) # Count the words in chapter heading, because the chapter number and title count as words.
|
||||
|
||||
status_by_chapter[chapter_heading] = collections.defaultdict(int)
|
||||
current_status = None
|
||||
elif line.startswith(STATUS_MARKER):
|
||||
status_by_chapter[chapter_heading] = line[len(STATUS_MARKER):].strip('()\n')
|
||||
if current_status == None:
|
||||
current_status = line[len(STATUS_MARKER):].strip('()\n')
|
||||
status_by_chapter[chapter_heading][current_status] = count_words(chapter_heading)
|
||||
else:
|
||||
current_status = line[len(STATUS_MARKER):].strip('()\n')
|
||||
status_by_chapter[chapter_heading][current_status] += 0
|
||||
elif line.startswith(ACT_MARKER):
|
||||
act_heading = line[len(ACT_MARKER):].strip('()\n')
|
||||
word_count_by_act[act_heading] = count_words(act_heading)
|
||||
|
@ -55,29 +62,32 @@ def main():
|
|||
line_word_count = count_words(line)
|
||||
word_count_by_chapter[chapter_heading] += line_word_count
|
||||
|
||||
if chapter_heading in status_by_chapter:
|
||||
word_count_by_status[status_by_chapter[chapter_heading]] += line_word_count
|
||||
if current_status:
|
||||
word_count_by_status[current_status] += line_word_count
|
||||
status_by_chapter[chapter_heading][current_status] += line_word_count
|
||||
witten marked this conversation as resolved
witten
commented
What does the What does the `+= 0` do? Maybe should just be `= 0`?
deroshkin
commented
The If this status hasn't been used in this chapter yet it's no different from If this status has been used, it leaves it unchanged. Didn't want to do a split logic. The `+= 0` is intentional.
If this status hasn't been used in this chapter yet it's no different from `= 0`, mainly here to initialize.
If this status has been used, it leaves it unchanged.
Didn't want to do a split logic.
witten
commented
Okay, I see now! Is it necessary to initialize though? Like won't the previous Okay, I see now! Is it necessary to initialize though? Like won't the previous `status_by_chapter[chapter_heading][current_status] = count_words(chapter_heading)` still work even if it hasn't been initialized? Or is the idea that sometimes you want to report statuses even if there are zero words for them?
deroshkin
commented
Yep, you're right. I think the only time that line would do anything is if you put a status change at the end of the file (the way it is in my version would report a 0 for that status), and now that I think about it, deleting that line would be an improvement, in my opinion. Also same thing if you switch status twice in a row. Yep, you're right.
I think the only time that line would do anything is if you put a status change at the end of the file (the way it is in my version would report a 0 for that status), and now that I think about it, deleting that line would be an improvement, in my opinion.
Also same thing if you switch status twice in a row.
witten
commented
Makes sense. I'll remove it after merging! Makes sense. I'll remove it after merging!
|
||||
|
||||
# Do some final accounting after the last chapter.
|
||||
word_count_by_act[act_heading] += word_count_by_chapter[chapter_heading]
|
||||
total_word_count += word_count_by_chapter[chapter_heading]
|
||||
if chapter_heading in status_by_chapter:
|
||||
word_count_by_status[status_by_chapter[chapter_heading]] += 1
|
||||
|
||||
# Print out word counts.
|
||||
for chapter_heading, chapter_word_count in word_count_by_chapter.items():
|
||||
if chapter_heading is None:
|
||||
continue
|
||||
|
||||
chapter_status = status_by_chapter.get(chapter_heading)
|
||||
|
||||
print(
|
||||
'chapter {}: {:,} words{}'.format(
|
||||
chapter_heading,
|
||||
chapter_word_count,
|
||||
' ({})'.format(chapter_status) if chapter_status else '',
|
||||
)
|
||||
)
|
||||
if len(status_by_chapter[chapter_heading]) > 1:
|
||||
print(f'chapter {chapter_heading}:')
|
||||
|
||||
for chapter_status, status_count in status_by_chapter[chapter_heading].items():
|
||||
print(f'\t {status_count:,} ({chapter_status})')
|
||||
print(f'\t {chapter_word_count:,} words (total)')
|
||||
elif len(status_by_chapter[chapter_heading]) == 1:
|
||||
chapter_status = list(status_by_chapter[chapter_heading].keys())[0]
|
||||
print(f'chapter {chapter_heading}: {chapter_word_count:,} ({chapter_status})')
|
||||
else:
|
||||
print(f'chapter {chapter_heading}: {chapter_word_count:,}')
|
||||
|
||||
|
||||
print()
|
||||
|
||||
|
|
Clever!