2017-10-17 5 views
0
import random 

avchars = ['a','b','c','d','e','f','g'] 
ra = random.randint(8,24) 
rb = random.randint(1,7) 
for i in range(ra): 
    file = open("pass","w") 
    ac = avchars(rb) 
    print(ac) 
    file.write(ac) 
file.close() 
print("Done") 

上記のリストから8-24文字を生成したいと思います。しかし、私はエラーが表示されます。リストから生成するときリストオブジェクトを呼び出す

TypeError: 'list' object is not callable

+0

'avchars(rb)'ではなく、 'avchars [rb]'でなければなりません。 –

+1

'IndexError:list index of range'を返します – Finlay

+1

もちろん、何を期待していますか?インデックスは「0」から始まる。だから 'rb = random.randint(0,6)'。 –

答えて

2

短いバージョン:

with open('pass', 'w') as fobj: 
    fobj.write(''.join(random.choice('abcedfg') for _ in 
         range(random.randint(8, 24)))) 

使用される機能:

random.choice(seq) 

Choose a random element from a non-empty sequence.

random.randint(a, b) 

Return random integer in range [a, b], including both end points.

+0

<3。私は13歳で、私の先生は私の上で4年間試験を受けました。なぜなら、私はそれを(練習のために)できると思うからです。私はそれをやる方法を知らない。これは本当に助けになりました。ありがとう – Finlay

+0

それは助けてよかった。あなたの問題が解決されたら、回答を受け入れることができます(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 –

1

リストはタプルではありませんまたは配列を含む。したがって、あなたが使用することはできません。

avchars(rc) 

代わりに使用します。

avchars[rc] 

は、あなたのコードがエラーをスローしません。

関連する問題