2014-12-17 4 views
-4

Целью программы является создание анаграммы с учетом 6 произвольно сгенерированных алфавитов. Синтаксис кажется правильным, но есть некоторая логическая ошибка, которую я не могу понять. Если вы выполняете программу, тогда она будет продолжать работать, & не будет останавливаться. Я не думаю, что это из-за любого бесконечного цикла, а скорее из-за его неспособности найти анаграмму, используя 6 сгенерированных букв. Может, я сделал тупая ошибка , но, пожалуйста, укажите его. Я выделил часть, где я думаю, что есть ошибка. Я буду рад, если бы вы могли мне помочь. Файл words.txt можно загрузить с http://thinkpython.com/code/words.txtПожалуйста, помогите мне с этим кодом python

import random 

def game(): 

    while True: 
    ch=[] 
    res=[] 
    print 'The 6 randomly generated alphabets are :' 
    for i in range(6): 
     ch.append(chr(random.randrange(97,123))) 
    print ch,'\n' 
    delimiter='' 
    z=delimiter.join(ch)      #converted list to a string 
    word_list2=dict()      #word_list2 is a dictionary containing randomly generated letters as keys 
    for c in z: 
     if c not in word_list2: 
     word_list2[c]=1 
     else: 
     word_list2[c]=word_list2[c]+1 

    fin=open('words.txt') 
    for c in range(130000): 
     words=fin.readline() 
     word=words.strip() 
     flag=1 
     if len(word)==6: 

      word_list1=dict()     #word_list1 is a dict containing char present in word as keys 

      for c in word: 
       if c not in word_list1: 
        word_list1[c]=1 
       else: 
        word_list1[c]=word_list1[c]+1 

      ***for c in word_list2: 
       if c not in word_list1: 
        flag=1         
        break 
       else: 
        if word_list1[c]==word_list2[c]:    #comparing if characters in both dict have same no. i.e 'a' should occur 2 times in both etc 
         flag==0 
        else: 
         flag=1 
         break*** 



     if flag==0: 
      res.append(word) 

    if not res: 
     print 'the list is empty' 
     print 'Selecting a new set of randomly generated characters\n' 

    else : 
     print res 
     break 

game() 
+2

Я бы предложите вам найти минимальный пример того, где код «сбой», чтобы мы могли более четко рассмотреть его. Вы пытались удалять блоки кода стратегически или печатать трассировки каждые несколько строк? –

+0

Поскольку у вас есть цикл while while, и вы сообщаете, что он не заканчивается, вам нужно взглянуть на программу по мере ее запуска. Один из способов сделать это - вручную отслеживать выполнение кода и пытаться выяснить его. Другой - вставить некоторые операторы печати в ключевые моменты, чтобы вы могли смотреть программу по мере ее выполнения. –

+0

Это еще один вариант кода! Его работа отлично – DarkLord

ответ

0

я, наконец, понял, как это сделать ..... Спасибо за вашу помощь guys.Here код, который работает

def is_anagram(s,t): 
    x=dict() 
    y=dict() 
    for c in s: 
     if c not in x: 
      x[c]=1 
     else: 
      x[c]=x[c]+1 
    for c in t: 
     if c not in y: 
      y[c]=1 
     else: 
      y[c]=y[c]+1 

    for c in x: 
     if c not in y: 
      flag=1 
      break 
     else: 
      if x[c]==y[c]: 

       flag=0 
      else: 
       flag=1 
       break 
    if flag==0: 

     return 0 
    else: 

     return 1 

import random 

def game(): 

    while True: 
    ch=[] 
    res=[] 
    print 'The 6 randomly generated alphabets are :' 
    for i in range(6): 
     ch.append(chr(random.randrange(97,123))) 
    print ch,'\n' 
    delimiter='' 
    z=delimiter.join(ch)      #converted list to a string 

    fin=open('words.txt') 
    for c in range(130000): 
     val=1 
     words=fin.readline() 
     word=words.strip() 
     flag=1 
     if len(word)==6: 

      val=is_anagram(z,word) 



     if val==0: 
      res.append(word) 

    if not res: 
     print 'the list is empty' 
     print 'Selecting a new set of randomly generated characters\n' 

    else : 
     print res 
     break 

game() 
Смежные вопросы