1

while ループ内で for ループを使用するにはどうすればよいですか? これが私のコードです:

def avoids(word,forbidden):
    for fl in forbidden:
        for letter in word:
            if letter == fl:
                return False
    return True

fin= open('words.txt')
u=97
v=97
w=97
x=97
y=97
minim=100
while u <= 122:
    while v <= 122:
        while w <= 122:
            while x <= 122:
                while y <= 122:
                    count=0
                    for line in fin:
                        word = line.strip()
                        if avoids(word,chr(u)+chr(v)+chr(w)+chr(x)+chr(y)):
                            #print(word)
                            count+=1
                            #print((100/113809)*count)
                    if (100/113809)*count<minim:
                        print(count)
                        minim=(100/113809)*count
                        print(minim,chr(u)+chr(v)+chr(w)+chr(x)+chr(y))
                    y+=1
                y=97
                x+=1
            x=97
            w+=1
        w=97
        v+=1
    v=97
    u+=1

for ループを 1 回だけ実行します。fin= open('words.txt') を最新の while ステートメント内に配置できますが、プログラムは非常に遅くなり、ほとんど使用できなくなります。どうすればいいですか? (リストなどを使いたくないわけではありません)

4

3 に答える 3

1

コードは次のようにインデントが少なくなります。

from string import ascii_lowercase
from itertools import product

for u, v, w, x, y in product(ascii_lowercase, repeat=5):
    ...

avoids()関数が何をすべきかわかりません。今の形では使い物になりそうにありません。まったくテストしましたか?

多分あなたの意図はこのようなものです

def avoids(word, forbidden):
    for fl, letter in zip(forbidden, word):
        if letter == fl:
            return False
    return True

しかし、それがどのように役立つか想像するのは難しいです。ロジックはまだ間違っているようです

于 2013-06-28T13:58:09.283 に答える