2012-12-10 2 views
4

당신이 모음이나 자음을 8 번 입력하는 프로그램을 쓰려고하면 선택한 편지 목록이 표시됩니다. 같은 글자가 두 번 올 수 없도록 프로그램하는 방법이 있습니까? 예를 들어, 모음을 선택하고 문자 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 
+1

어떤 특별한 이유를 할 수 있습니까? 이것이 일종의 anagramming 게임이라면, 나는 유용한 단어를 만들 수 있기 위해 특정 모음을 두 번 이상 가져올 것으로 기대합니다. –

답변

8

shuffle 모든 consonnants의 모든 모음의 목록을 만들고 그들을 무작위로 다음 한 번에 하나 개의 요소를 가지고 : 목록에서

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") 
+1

'vow.pop() 주위에 try/except 블록이 있어야합니다. '줄이 8 개 미만이기 때문에 :)^ – Andbdrew

+0

@ 앤드류 - 너 말이 맞아. 나는 consonnants (결과 단어의 길이가 21을 초과하는 경우)에 대해 동일한 수표를 추가했습니다. – eumiro

+0

cool. 'len (글자) <8'비트 때문에 자음은 필요하지 않지만 확실히 상처를주지는 않습니다. – Andbdrew

6

변경 문자에 이 지금까지 프로그램입니다 세트 : 참조

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

: Python sets

,

편집 : 방금 설정 한 작업과 다른 것을 요구하고있는 것으로 나타났습니다. eumiro의 대답은 당신이 찾고있는 것입니다. 이 질문에 대한 답변을 원하지 않는다면 내 대답을 삭제하겠습니다.

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") 

내부 임의의 선택 목록에 이미있는 경우, 프로그램은 또 다른 편지를 선택하도록 루프가있다.

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() 
관련 문제