グラントを作成するために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))]
しかし、それはスクリプトがしているように最初の要素を返しただけです。助言がありますか?ありがとう!
なぜ「random.choice」を使用しないのですか? –
私はまだ学習していますが、ランダムライブラリに精通している人はまだいません。私はそれを試して、それが事態を訂正するかどうかを見ます。 –
変数名に 'o'を使うと遅かれ早かれ問題になります。それはあまりにも '0'のように見えます。 –