Что не так с моим программированием с использованием функции разделения? - PullRequest
0 голосов
/ 07 мая 2019

Я хочу ограничить количество символов в строке до 77. В связи с этим ограничением, если длина последнего слова превысит 77 символов, я бы хотел разместить его на новой строке ниже текущей строки ,

Я создал код ниже, но он помещает слова «люди» в неправильную строку кода.

txt = '''hello there my dear friends and enemies and other people my name is simon and I like to do drawings for all you happy people'''

txtSplit = []
txtSplit = txt.split(' ')

rowsDict = {}
countOfCharactersPerLine = 0
row = 0
for i in range(len(txtSplit)):
    countOfCharactersPerLine += len(txtSplit[i])

    if countOfCharactersPerLine >= CHARACTERS_PER_LINE:
        countOfCharactersPerLine = len(txtSplit[i])
        row += 1
        rowsDict[txtSplit[i]] = row

    else:
        rowsDict[txtSplit[i]] = row 

for key,value in rowsDict.items():
    print(key,value)

Вывод кода:

hello 0
there 0
my 0
dear 0
friends 0
and 0
enemies 0
other 0
people 1
name 0
is 0
simon 0
I 0
like 0
to 0
do 0
drawings 1
for 1
all 1
you 1
happy 1

Почему слово "люди" стоит в строке 1 вместо строки 0?

Ответы [ 3 ]

4 голосов
/ 07 мая 2019

Слово people встречается в этом тексте дважды, и словари могут содержать только один ключ. Второе вхождение people заменяет первое.

2 голосов
/ 07 мая 2019

Джон Гордон дал вам причину, почему это не работает. Следующее может быть полезно для решения вашей проблемы:

word_list = []
countOfCharactersPerLine = 0
row = 0

for s in txtSplit:
    countOfCharactersPerLine += len(s)

    if countOfCharactersPerLine >= CHARACTERS_PER_LINE:
        countOfCharactersPerLine = len(s)
        row += 1
    word_list.append((s, row))

print(word_list)
1 голос
/ 07 мая 2019

В вашем предложении дважды встречаются люди, поэтому вторые «люди», которых вы видите, имеют число строк = 1. Это потому, что словари Python не хранят дубликаты ключей. Это может сделать вас более ясным.


Если вы хотите, вы можете использовать списки:
txt = "hello there my dear friends and enemies and other people my name is simon and I like to do drawings for all you happy people"

txtSplit = []
txtSplit = txt.split(' ')
rowsList = []
countOfCharactersPerLine = 0
row = 0
CHARACTERS_PER_LINE = 77
for i in range(len(txtSplit)):
    countOfCharactersPerLine += len(txtSplit[i])
    #print(i,txtSplit[i],len(txtSplit[i]),countOfCharactersPerLine)
    if countOfCharactersPerLine >= CHARACTERS_PER_LINE:
        countOfCharactersPerLine = len(txtSplit[i])
        row += 1
    rowsList.append(txtSplit[i])
    rowsList.append(row)
for i in range(0,len(rowsList),2):
    print(rowsList[i],rowsList[i+1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...