2014-04-11 72 views
2

我有一個文本文件中的6個單詞的列表,並希望打開該文件以讀取單詞列表作爲3x2網格,也可以隨機化每次程序運行時字的順序。使用文本文件將文字排列成網格形式

詞是:

cat, dog, hamster, frog, snail, snake 

我希望他們能夠顯示爲:(但每次程序運行時隨機爲了做到這一點)

cat dog  hamster 
frog snail snake 

到目前爲止,所有我已經設法做的是從6個單詞的列表中獲得一個單詞,以隨機順序出現,使用 - 幫助將得到很多appriciated

import random 

words_file = random.choice(open('words.txt', 'r').readlines()) 
print words_file 

回答

1

這裏的另一個問題:

>>> 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) 
0

你會想看看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

我最喜愛的食譜與zipiter分塊:

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)) 
+0

@SteinarLima Gah謝謝!我努力了,但沒有時間檢查。固定 –