2016-08-01 1 views
-3

Во-первых, я понимаю, что следующий код, вероятно, не очень хорош, поэтому извиняюсь за все, что заставляет вас съеживаться, я просто пытаюсь закодировать столько, сколько могу, в надежде получить лучше.Проект палача новичка: Работа с дублирующими буквами

Это часть маленького игрового проекта для палача, я пытаюсь найти лучший способ справиться с повторяющимися буквами в строках.

Это то, что я сейчас:

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

Я ищу быстрый способ иметь дело с дубликатами, чтобы они вместе с выведено их спичек. Я уже замедляю свои блики с этим циклом, поэтому я не уверен, что мой текущий getDupes - это путь.

Если кто-то хочет взглянуть на это и внести свой вклад, я очень благодарен.

Спасибо за ваше время.

+5

Пожалуйста, сузите отправку кода только на то, что имеет отношение к вопросу, который вы задаете. –

+0

Сделано и сделано, в то время как все downvotes? Разве это место настолько укоренилось в элитизме, что люди смотрят на новичков и тех, кто пытается улучшить? Прошу прощения, я не хочу встречаться с задницей, но отрицательный ответ, который я получаю на каждый вопрос, который я публикую, немного расстраивает. Я имею в виду, должен ли я просто искать в другом месте для достойной помощи? – Wretch11

+1

@ Wretch11 Добро пожаловать в переполнение стека! Головокружения не являются личным размышлением о вас. Тебе очень рады. Downvotes - это сигналы о том, что сообщение должно быть улучшено, а не прямое отклонение того, что вы отправили. Теперь посмотрим, сможем ли мы понять, что здесь происходит. Какое желаемое поведение здесь? Что должно произойти, если есть повторяющаяся строка? – Ares

ответ

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, некоторые рефакторинга бы вам услугу здесь.

+0

Я попробую это сейчас, и, изучая понимание списка диктов, я, вероятно, могу сделать многое намного быстрее. Спасибо человеку, я вернусь, когда попробую это. – Wretch11

Смежные вопросы