我有一个来自文本文件的6个单词的列表,并且想要打开文件以将单词列表读取为3x2网格,也可以在每次运行程序时随机化单词的顺序。 / p>
字样是:
cat, dog, hamster, frog, snail, snake
我希望它们显示为:(但每次运行程序时都是以随机顺序执行此操作)
cat dog hamster
frog snail snake
到目前为止,我所做的就是从6个单词的列表中获取一个单词,以随机顺序出现 - 帮助会非常适合
import random
words_file = random.choice(open('words.txt', 'r').readlines())
print words_file
答案 0 :(得分:2)
这是另一个:
>>> import random
>>> with open("words.txt") as f:
... words = random.sample([x.strip() for x in f], 6)
...
...
>>> grouped = [words[i:i+3] for i in range(0, len(words), 3)]
>>> for l in grouped:
... print "".join("{:<10}".format(x) for x in l)
...
...
snake cat dog
snail frog hamster
首先我们读取文件的内容并选择六个随机行(确保您的行只包含一个单词)。然后我们将单词分组为三个列表并使用字符串格式打印它们。格式括号中的<10
左对齐文本,并将每个项目填充10个空格。
答案 1 :(得分:1)
要选择6个字,您应该尝试random.sample
:
words = randoms.sample(open('words.txt').readlines(), 6)
答案 2 :(得分:1)
您需要查看string formatting!
import random
with open('words.txt','r') as infile:
words_file = infile.readlines()
random.shuffle(words_file) # mix up the words
maxlen = len(max(words_file, key=lambda x: len(x)))+1
print_format = "{}{}{}".format("{:",maxlen,"}")
print(*(print_format.format(word) for word in words_file[:3])
print(*(print_format.format(word) for word in words_file[3:])
有更好的方法可以通过三次运行列表分组,但这适用于您的有限测试用例。 Here's a link to some more information on chunking lists
我最喜欢的食谱是使用zip
和iter
分块:
def get_chunks(iterable,chunksize):
return zip(*[iter(iterable)]*chunksize)
for chunk in get_chunks(words_file):
print(*(print_format.format(word) for word in chunk))