基本上我想实现的是拥有一个字符串,比如说“汤姆有一只猫”。并检查以这种方式将10x3表格填满多少次,而不会将单词切成两半:
"T" "o" "m" " " "h" "a" "s" " " "a" " "
"c" "a" "t" "." " " "T" "o" "m" " " " "
"h" "a" "s" " " "a" " " "c" "a" "t" "."
我目前正在尝试做的是拥有一个字典,其中键是行数,值是一个表,其中空字符串等于列数。 我不知道该怎么做:
for i in range(1, rows+1) #id's of keys of already created dict
for n in range(columns):
for letter in string:
d["{}".format(i)][n] = letter
,当没有空间来完成下一个单词时,应在ID上加上+1,然后开始填充下一行。然后,当句子完成后,应该继续从第一个字母开始填充。最后,它应该告诉用户句子填充表的次数(示例中为2次)。
我希望我可以理解它,并且我非常感谢每个想法!
编辑: 句子和“。”之间应该有一个空格。是“猫”的一部分。最后,程序应该用“ *”填充所有备用空间,例如:
“ c”“ a”“ t”“。 “”“ T”“ o”“ m”“” *“
但这是最不重要的事情。
答案 0 :(得分:0)
一种解决方案(可能不是最干净的)是
def into_grid(s, width, height):
words = cycle(s.split(" "))
res = ""
row = 0
col = 0
next_word = next(words)
while row < height:
if col + len(next_word) <= width:
res += next_word + " "
col += len(next_word) + 1
next_word = next(words)
else:
row += 1
col = 0
res += "\n"
return res
答案 1 :(得分:0)
您可以将句子拆分为单词,并使用itertools.cycle
循环浏览每个单词,并根据当前行的空余空间,当前单词的长度和前导空格(如果存在)填充列表列表该行不为空:
from itertools import cycle
def fill(sentence, rows, cols):
table = [[]]
words = cycle(sentence.split())
while True:
word = next(words)
if len(table[-1]) + len(word) + bool(table[-1]) > cols:
table[-1].extend('*' * (cols - len(table[-1])))
if len(table) == rows:
return table
table.append([])
if table[-1]:
table[-1].append(' ')
table[-1].extend(word)
这样:
fill('Tom has a cat.', 4, 10)
返回:
[['T', 'o', 'm', ' ', 'h', 'a', 's', ' ', 'a', '*'],
['c', 'a', 't', '.', ' ', 'T', 'o', 'm', '*', '*'],
['h', 'a', 's', ' ', 'a', ' ', 'c', 'a', 't', '.'],
['T', 'o', 'm', ' ', 'h', 'a', 's', ' ', 'a', '*']]