首先,我意识到下面的代码可能不是很好,所以对任何令你畏缩的事情表示道歉,我只是想尽可能多地编写代码,以期变得更好。
这是一个小型刽子手游戏项目的一部分,我正试图找出处理字符串中重复字母的最佳方法。
这就是我现在所得到的:
def checkDupes(word):
global dupeList
global repeatTimesDupes
if repeatTimesDupes != 0:
dupeCount = 0
for i in range(len(word)):
temp = word[i]
print("temp letter is: ", temp)
for j in range(i+1,len(word)):
if word[j] == temp:
if temp not in dupeList:
dupeList.append(word[j])
print("the dupeList contains: ", dupeList)#debug
repeatTimesDupes -= 1
def getLetter(position,buttons,word):
i = 96
index = 0
letter = chr(i)
for button in buttons:
if button != None:
i+=1
if button.collidepoint(position):
print("the position is: ", position)
print(i)
for j in range(len(word)):
print(word[j] , chr(i))
if word[j] == chr(i):
index = j
return chr(i), index
else:
return '?', -1
def checkForLetter(word,letter):
inWord = " "
for i in range(len(word)):
if word[i] == letter:
inWord = True
break
else:
print(len(word))
print (word[i])
inWord = False
return inWord
#========================== Start Loop ===========================================
while done == False:
events = pygame.event.get()
screen.fill(BGCOLOR)
timedelta = clock.tick_busy_loop(60)
timedelta /= 1000 # Convert milliseconds to seconds
for event in events:
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
done = True
if event.type == pygame.MOUSEBUTTONUP:
if event.button == MOUSEBUTTONLEFT:
pos = pygame.mouse.get_pos()
for button in buttonsList:
if button.collidepoint(pos):
if button != None:
checkDupes(gameWord)
letter, atIndex = getLetter(pos,buttonsList,gameWord)
letterSelected = True
moveCounter+=1
screen.blit(blackBG,(0,0))
showButtons(letterList)
showLetterSlots(gameWord,screenRect)
setCounters(moveMade,mistakeMade)
if letterSelected:
inGameWord = checkForLetter(gameWord, letter)
if inGameWord:
print(atIndex)
print(letter)
letterRen = wordFonts.render(letter,1,(0,255,0))
renderList[atIndex] = letterRen
print("The render list is: ", renderList)
renCount = 0
for r in lineRectList:
if renderList[renCount] != '?' :
screen.blit(renderList[renCount],((r.centerx-10),430))
if renCount <= len(gameWord):
renCount+=1
#update game screen
clock.tick(60)
pygame.display.update()
#========================== End Loop =============================================
pygame.quit()
我正在寻找快速处理重复的方法,因此他们会与他们的比赛一起进行。我已经慢慢放下了所有循环的字母blits,所以我不确定我现在的getDupes
是否可行。
如果有人愿意看这个并提供一些意见,我会非常感激。
感谢您的时间。
答案 0 :(得分:1)
根据您在评论中描述的内容,在这种情况下使用dictionary
对象似乎是合理的。您不仅要存储该字母,还要存储 那些字母。
字典有一个键和一个值。例如:
{'jack': 4095, 'jill': 12}
关键是jack
,值为4095
。
在这种情况下,我们不会使用int
作为值。我们实际上将使用一组int。
因此,您的字典可能如下所示:
{'o':[1, 5, 6, 3, 2, 1]}
其中这些数字是遇到该字母的索引。这适用于任意数量的重复字母。然后,在你的按钮中,你知道哪些是'blit',因为它们与字符串的顺序相同。
Python字典文档: https://docs.python.org/3/tutorial/datastructures.html
FWIW,你也可以在这里进行一些重构。