自从我在Code Academy上学习完Python之后,我就开始制作一个完整的Hangman项目,这是我的第一个独立项目。 (Github:https://github.com/jhern603/Python-Hangman)
当前,它能够识别字符串中的重复出现的字符,但是如果发生两次以上,则不会计算重复字符的额外次数。
例如,如果用户选择“电影”作为类别,并且程序选择“全金属外套”,它将计为两个“ l”,但之后不计任何其他“ l”,从而使程序位于除非用户故意犯错,否则用户将无法完成它的状态。 这就是控制台上的样子(打印出猜中的字母数组):
选择一个字母:k
'K'是正确的。
完成任务
有问题的块
...
def word_selector(self, category):
if category in self.words:
self.properCategory = True
print("\nYou selected: '" + category + "' as the category for this round.\n")
self.picker = random.randint(0, len(self.words[category])) - 2
self.selected_category = self.words[category]
self.word = self.selected_category[self.picker].lower()
self.word_=self.word.replace(' ','')
self.word_sorted=sorted(self.word_)
self.counter = collections.Counter(self.word)
self.isAlpha = True
...
...
def correct(self):
if self.user_choice in self.word and len(self.guessed_correctly) <= len(self.word):
self.guessed_correctly.append(self.user_choice)
if self.user_choice in self.charRepeated:
self.guessed_correctly.append(self.user_choice)
print("\n'"+self.user_choice.upper() + "' was correct.\n")
print(' '.join(self.guessed_correctly))
答案 0 :(得分:3)
from collections import Counter
Counter(word)
您可以使用pythons Counter来计数每个字符在一个单词中出现的次数。从那里很容易滤除多次发生的事件。
例如,在您的情况下,您可以使用以下内容:
word = "full metal jacket"
counts = Counter(word)
recurring = {k:v for k, v in counts.items() if v > 1}
这将为您提供:
{'e': 2, 't': 2, ' ': 2, 'a': 2, 'l': 3}
答案 1 :(得分:0)
我只需遍历所有地方并替换猜测字母即可。这是一个愚蠢的,效率低下的工作代码,只是为您提供了一种可行的方法。
import random
import re
class Hang:
def __init__(self):
print('Hello Hangma: \n')
def replacer(self):
if not self.position:
self.position = []
while self.guess in self.selected:
self.position.append(self.selected.index(self.guess))
self.selected = self.selected.replace(self.guess,'_',1)
return self.position
def hang(self):
self.guess = input('\nGuess a letter:\n')
assert len(self.guess)==1
#do something
if self.guess in self.selected:
self.position = self.replacer()
for i in self.position:
self.dash = f'{self.dash[:i]}{self.guess}{self.dash[i+1:]}'
else:
print(f'Nope! {self.guess} is not there')
self.position = []
print(self.dash)
return self.dash
def play(self):
self.category = {'movies':['full metal jacket','rambo','commando']}
self.selected = random.choice(self.category['movies'])
self.dash = re.sub('\w','_',self.selected)
self.position = None
print(f'Hit:\n{self.dash}')
while '_' in self.dash:
self.dash = self.hang()
if __name__=='__main__':
game = Hang()
game.play()
我所做的工作创建了三个功能。游戏只是调用其余部分的主要部分。 replacer是一个函数,它替换字母在单词中出现的所有位置,并挂起调用replacer函数的作用。现在,您可以添加尝试次数,并建立一个子手。目前没有限制;)