Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 12, 2013 09:25:06

Trempel
Зарегистрирован: 2013-02-12
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помощи. Проблема с циклами (наверное)

Пытался сделать некое подобие “Виселицы”. Возникла следующая проблема: программа лишний раз выполняет цикл, когда должна была завершиться. Плюс не совсем корректно обрабатывает ввод первого символа. Если он неправильный, счетчик не увеличивается.
Спасибо

Прикреплённый файлы:
attachment viselica.zip (497 байт)

Офлайн

#2 Фев. 12, 2013 11:27:11

warik
Зарегистрирован: 2013-02-06
Сообщения: 23
Репутация: +  1  -
Профиль   Отправить e-mail  

Прошу помощи. Проблема с циклами (наверное)

Я честно пытался понять Ваш код, но это конечно тяжело…
Быстрее было переписать самому. Лично мое мнение - Вы изначально выбрали неправильный путь.
Смотрите прикрепленный - это конечно далеко не идеальный вариант, но на скорую руку сойдет.

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

Отредактировано warik (Фев. 12, 2013 11:27:36)

Офлайн

#3 Фев. 12, 2013 11:46:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Прошу помощи. Проблема с циклами (наверное)

# -*- 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



Отредактировано FishHook (Фев. 13, 2013 11:47:23)

Офлайн

#4 Фев. 13, 2013 10:13:38

Trempel
Зарегистрирован: 2013-02-12
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помощи. Проблема с циклами (наверное)

Спасибо за ответы!
Вариант от warik'а более понятен мне, как новичку, но немного не точен: счетчик должен изменяться только в том случае, если игрок не угадал букву.
Не думал, что решения такой простой задачи могут так отличаться)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version