Найти - Пользователи
Полная версия: Прошу помощи. Проблема с циклами (наверное)
Начало » Центр помощи » Прошу помощи. Проблема с циклами (наверное)
1
Trempel
Пытался сделать некое подобие “Виселицы”. Возникла следующая проблема: программа лишний раз выполняет цикл, когда должна была завершиться. Плюс не совсем корректно обрабатывает ввод первого символа. Если он неправильный, счетчик не увеличивается.
Спасибо
warik
Я честно пытался понять Ваш код, но это конечно тяжело…
Быстрее было переписать самому. Лично мое мнение - Вы изначально выбрали неправильный путь.
Смотрите прикрепленный - это конечно далеко не идеальный вариант, но на скорую руку сойдет.

import sys
def main():
    word = str(raw_input('Enter key word: '))    
    if not word:
        print 'Empty word!'
        sys.exit(0)
    word_ = word
    
    result = list('*'*len(word))
    print ''.join(result)
    for i in range(10):        
        a = str(raw_input('Enter a letter: '))        
        if not a or len(a)>1:
            print 'Enter a letter and only one letter!'
            continue
        
        for j in range(word.count(a)):
            result[word.index(a)] = a
            word = word.replace(a,'_', 1)
        print ''.join(result)
        if list(word_) == result:
            print 'Correct!'
            sys.exit(0)
        print '%d chances left' % (9-i)
if __name__ == '__main__':
    main()
FishHook
# -*- coding: utf-8 -*-
class Game(object):
    ATTEMPTS = 10
    STAR = "*"
    def __init__(self):
        self.word = raw_input('Type a word').lower()
        self.word_dct = dict(enumerate(self.word))
        self.mask = [self.STAR] * len(self.word)
        self.attempts_remaining = self.ATTEMPTS
        self.used_letters = set()
        self.result = self.step()
    def step(self):
        print self.mask
        letter = raw_input('Type a letter')[0].lower()
        if letter in self.used_letters:
            print 'This letter has already been. Try again'
            return self.step()
        self.used_letters.add(letter)
        if letter in self.word:
            for k, v in self.word_dct.items():
                if v == letter:
                    self.mask[k] = letter
            print "OK"
        else:
            print 'FAIL'
            self.attempts_remaining -= 1
            print 'Attempts=%s' % self.attempts_remaining
        if not self.mask.count(self.STAR):
            return 'You win!!!'
        if self.attempts_remaining == 0:
            return 'You FAILED!!!'
        return self.step()
game=Game()
print game.result
print 'Letter was "%s"' % game.word

fixed
Trempel
Спасибо за ответы!
Вариант от warik'а более понятен мне, как новичку, но немного не точен: счетчик должен изменяться только в том случае, если игрок не угадал букву.
Не думал, что решения такой простой задачи могут так отличаться)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB