4

母音または子音を 8 回入力すると、選択した文字のリストが表示されるプログラムを作成しようとしています。同じ文字が 2 回出てこないようにプログラムする方法はありますか。たとえば、母音を選択して文字 a を取得した場合、文字 a が再びランダムに選択されることはありませんか? これまでのプログラムは次のとおりです。

lt = 0
letters = []
while lt<8:
    letter = raw_input("Please enter v for a Vowel or c for a Consonant: ")
    if letter == "c":
        letters.append(random.choice(consonant)),
        lt = lt + 1
    elif letter == "v":
        letters.append(random.choice(vowel)),
        lt = lt + 1
    else:
        print("Please enter only v or c")

print ("letters:")
print letters
4

4 に答える 4

8

すべての子音とすべての母音のリストをshuffleランダムに作成し、一度に 1 つの要素を取ります。

import random

con = list('bcdfghjklmnpqrstvwxyz') # in some languages "y" is a vowel
vow = list('aeiou')
random.shuffle(con)
random.shuffle(vow)
# con is now: ['p', 'c', 'j', 'b', 'q', 'm', 'r', 'n', 'y', 'w', 'f', 'x', 't', 'g', 'l', 'd', 'k', 'h', 'z', 'v', 's'] or similar
# vow is now: ['e', 'u', 'i', 'a', 'o'] or similar

letters = []
while len(letters) < 8:
    letter = raw_input("Please enter v for a Vowel or c for a Consonant: ")
    if letter == "c":
        if con:
            letters.append(con.pop())
        else:
            print("No more consonnants left")
    elif letter == "v":
        if vow:
            letters.append(vow.pop())
        else:
            print("No more vowels left")
    else:
        print("Please enter only v or c")
于 2012-12-10T14:39:26.060 に答える
6

リストからセットに文字を変更します。

letters = set()
>>> letters.add('x')
>>> letters.add('x')
>>> letters
set(['x'])

参考:Pythonセット

編集:セットがどのように機能するかとは異なる何かを求めていることに気づきました。eumiroの答えはあなたが探しているものです。これを参照用に保持したい場合は問題ありません。それ以外の場合は回答を削除します

于 2012-12-10T14:41:01.740 に答える
2

あなたはこれを行うことができます

lt = {}
while len(lt.keys()) < 8:
    letter = raw_input("Please enter v for a Vowel or c for a Consonant: ")
    added == false
    while added != true:
        if letter == "c":
            toAdd = random.choice(consonant)
        elif letter == "v":
            toAdd = random.choice(vowel)
        else:
            print("Please enter only v or c")
        if not lt.has_key(toAdd): 
            lt[toAdd] = 1
            added = false
    letters = lt.keys()
于 2012-12-10T14:44:27.390 に答える
1

リストに子音または母音を追加する直前に、リストにすでに含まれているかどうかを確認することをお勧めします。たとえば、このようなチェックを含む while ループは次のようになります。

while lt<8:
    letter = raw_input("Please enter v for a Vowel or c for a Consonant: ")
if letter == "c":
    c = random.choice(consonant)
    while c not in letters:
        c = random.choice(consonant)
    letters.append(random.choice(consonant))
    lt = lt + 1
elif letter == "v":
    v = random.choice(vowel)
    while v not in letters:
        v = random.choice(vowel)
    letters.append(random.choice(vowel))
    lt = lt + 1
else:
    print("Please enter only v or c")

内側の while ループは、ランダムな選択が既にリストにある場合、プログラムが別の文字を選択するためのものです。

于 2012-12-10T14:43:00.623 に答える