Форум сайта python.su
Пытался сделать некое подобие “Виселицы”. Возникла следующая проблема: программа лишний раз выполняет цикл, когда должна была завершиться. Плюс не совсем корректно обрабатывает ввод первого символа. Если он неправильный, счетчик не увеличивается.
Спасибо
Прикреплённый файлы: viselica.zip (497 байт)
Офлайн
Я честно пытался понять Ваш код, но это конечно тяжело…
Быстрее было переписать самому. Лично мое мнение - Вы изначально выбрали неправильный путь.
Смотрите прикрепленный - это конечно далеко не идеальный вариант, но на скорую руку сойдет.
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)
Офлайн
# -*- 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
Отредактировано FishHook (Фев. 13, 2013 11:47:23)
Офлайн
Спасибо за ответы!
Вариант от warik'а более понятен мне, как новичку, но немного не точен: счетчик должен изменяться только в том случае, если игрок не угадал букву.
Не думал, что решения такой простой задачи могут так отличаться)
Офлайн