2017-05-19 8 views
0

グラントを作成するためにcolrライブラリを使用して、テキスト付きASCIIピクチャであるシェルログイン時にMOTDを表示する小さなスクリプトがあります。私は色のリストを無作為化する関数を書いていて、IDLEで実行すると、リストからランダムな色が引かれます。しかし、スクリプトを実行すると、最初の要素()が返されます。ここに私の機能は次のとおりです。randcolor()関数はランダム化されていません - python

from random import randint 
from colr import Colr as C 
def randcolor(): 
     colors = ['red', 'blue', 'green', 'cyan', 'orange'] 
     n = (len(colors)) 
     o = randint(0, n-1) 
     color = colors[o] 
     return color 

ので、ここでIDLEで実行した場合の結果は次のとおりです。

>>> randcolor() 
'red' 
>>> randcolor() 
'red' 
>>> randcolor() 
'green' 
>>> randcolor() 
'cyan' 
>>> randcolor() 
'green' 
>>> randcolor() 
'red' 
>>> randcolor() 
'orange' 
>>> randcolor() 
'green' 

しかし、私は私のスクリプトでそれを実装する際には、最初の要素だけを返すように表示されます。

f = open('/etc/motd', 'r') 
    motd = f.readlines() 
    f.close() 

print(str(C(' '.join(motd)).gradient(name=randcolor())) 

スクリプトの結果をここに追加することはできませんが、グラデーションを変更していないと言うだけで十分です。何がうまくいかないのですか?

また、これがラムダとして実行できるかどうかは疑問でした。私はただ変数を割り当てようとしました:color = colors[(randint(0, len(colors)-1))]しかし、それはスクリプトがしているように最初の要素を返しただけです。助言がありますか?ありがとう!

+2

なぜ「random.choice」を使用しないのですか? –

+0

私はまだ学習していますが、ランダムライブラリに精通している人はまだいません。私はそれを試して、それが事態を訂正するかどうかを見ます。 –

+0

変数名に 'o'を使うと遅かれ早かれ問題になります。それはあまりにも '0'のように見えます。 –

答えて

1

random.choice()ソリューションのおかげでStevenに感謝します。

print(str(C(' '.join(motd)).gradient(name=random.choice(colors)))) 
関連する問題