2014-01-23 1 views
1
LETTERS = "abc" 
correct = "cab " 
guess = "" 

while guess != correct: 
    for i in LETTERS: 
     position = random.randrange(len(LETTERS)) 
     guess += LETTERS[position] 
     LETTERS = LETTERS[:position] + LETTERS[(position + 1):] 
    print(guess) 

내가 파이썬에서 새로운 그리고 난이 간단한 프로그램을 만들고 싶어 : "ABC"문자로은 간단 가져올 수 없습니다

  • 그들을 뒤범벅 새로운 3 ~을 만들 lettter word 무작위로.
  • 뒤범벅을 인쇄하십시오.
  • 컴퓨터가 혼란 스러울 때까지이 루프를 계속하십시오.
  • 그런 다음 중지하십시오.

이 코드가 생겨서 무한 루프가 발생합니다. 왜 그렇게하는지 알 수 없습니다. 나는 쉽게 느낄 수 있지만 나는 그것을 볼 수 없다고 확신한다. 도움이 필요해! 감사!

+2

올바른 값을 공백으로 끝내시겠습니까? –

+1

그리고 실패한 후에 추측을 재설정하겠습니까? – user2357112

+2

OP는 for 루프의 모든 반복에서'LETTERS '도 변경합니다. while 루프 내에서 즉시 myLetters = LETTERS [:]로 문자의 사본을 변경해야합니다. (다시'추측 '을 재설정하십시오.) – inspectorG4dget

답변

2

당신의 correct 값은 공간을 포함하지만 루프는 결코 공백이 발생하지 : 그래서 단지

correct = "cab" 

다음, 루프는 빈 문자열로 LETTERS을 감소 :

correct = "cab " 

이 그 공간을 제거를 루프는 임의의 guess을 생성하지만 나중에는 LETTERS = ''과 함께 붙어 있으므로 for 루프가 실행되지 않습니다.

당신은 추측 생산 random.shuffle를 사용하여 더 나을 것 :

LETTERS = list("abc") 
correct = "cab" 

while True: 
    random.shuffle(LETTERS) 
    guess = ''.join(LETTERS) 
    if guess == correct: 
     print(guess) 
     break 
3

당신은 세 가지 문제를 가지고 내가 볼 수 있습니다

  1. "cab "에 공백이, 그리고 LETTERS이 없습니다 우주. 따라서 공간을 추측 할 수는 없습니다.
  2. guess을 재설정하지 마십시오. 당신은 단순히 계속 계속 추가합니다.
  3. for 루프에서 LETTERS을 변경하므로 while 루프의 두 번째 반복에서 완전히 비어있게됩니다.

    다음
    _LETTERS = "abc" 
    correct = "cab" 
    guess = "" 
    
    while guess != correct: 
        LETTERS = _LETTERS[:] 
        guess = "" 
        for i in LETTERS: 
         position = random.randrange(len(LETTERS)) 
         guess += LETTERS[position] 
         LETTERS = LETTERS[:position] + LETTERS[(position + 1):] 
        print(guess) 
    

    난 당신이 무슨 말을 하려는지 인 (임의의 검색을 수행 할 방법은 다음과 같습니다

이 난 당신이 (최소한의 수정으로) 수행하려고하는 일을 가겠어요 어떻게 해야 할 일 :

guess = "abc" 
correct = "cab" 

while guess != correct: 
    guess = list(guess) 
    random.shuffle(guess) 
    guess = ''.join(guess) 
    print(guess) 
print(guess) 

물론 "cab"을 올바르게 추측하는 더 좋은 기술이 있습니다. 철저한 검색을 실제로하고 싶다면 역 추적 DFS를 사용할 수 있습니다 :

def DFS(letters, correct, sofar=None) 
    if sofar is None: 
     sofar = '' 
    if not letters: 
     if sofar == correct: 
      print("Yay! I found it") 
     else: 
      print("Oops! I found %s instead" %sofar) 
    else: 
     for i,char in enumerate(letters): 
      DFS(letters[:i]+letters[i+1:], correct, sofar+char) 
+0

두 번째 코드 스 니펫이 작동하지 않습니다. 넌 셔플리스트를 버리고있어. – user2357112

+0

@ user2357112 : 거짓. 'random.shuffle'은 IN-PLACE입니다. 'None'을 반환합니다. – inspectorG4dget

+0

즉시 던져 놓은 목록에서 적절한 위치에 있습니다. – user2357112