2017-01-07 7 views
0

Я пытаюсь сделать угадывание пароля, используя python для проекта. Однако я застрял. Вот код, который я использую в настоящее время.Проблема с Python с глобальным?

dictfile = open('c:/PC/wordsEn.txt', 'r') 
DictionaryWords = dictfile.readlines() 


Password = 'zygote10' 

Intadd = 0 

def Number_Finder(): 
    for x in DictionaryWords: 
     global Intadd 
     print(x .replace("\n", str(Intadd))) 
     if x .replace("\n", str(Intadd)) == Password: 
      print("Congrats, you found the password!") 
      break 
     else: 
      while Intadd < 10: 
       Intadd += 1 
       print(x.replace("\n", " ") + str(Intadd)) 


def Password_Tester(): 
    for x in DictionaryWords: 
     if x .replace("\n", "") == Password: 
      print('Found it!', x, 'is the password!') 
      break 
    else: 
     Number_Finder() 


Password_Tester() 

Когда я запускаю код, я хочу, чтобы увидеть что-то вроде этого:

apple1 
apple2 
apple3 
apple4 
apple5 
apple6 
apple7 
apple8 
apple9 
apple10 
ate1 
ate2 

и так далее. (В основном я хочу, чтобы код запускал слово, каждый раз меняя число, пока число в нем не достигнет 10, затем измените слово, а затем повторите этот процесс).

Однако, когда я запускаю код, я вижу это:

apple1 
apple2 
apple3 
apple4 
apple5 
apple6 
apple7 
apple8 
apple9 
apple10 
ate10 
aviation10 

(После того, как яблоко, слова не повторять процесс перехода от 1 до 10, а слово просто меняется с числом 10 после него)

Я думаю, что проблема кроется в глобальной команде. Я довольно новичок в Python, поэтому мне жаль, если это очевидное решение. Спасибо, парни!

+2

Итак, где вы настройки 'Intadd' обратно в 0, снова? Вы ожидали, что он вернется к 0 самостоятельно, когда функция закончится? Это не так, как работают глобальные группы. –

+0

Какое содержимое 'wordsEn.txt'? Возможно, было бы полезно написать упрощенную версию этого кода, которая работает с небольшим количеством строк, содержащихся в списке глобальных переменных. – Tagc

ответ

0

Вы не должны использовать global в целом, так и локальную переменную для цикла:

def Number_Finder(): 
    for x in DictionaryWords: 
     for n in range(10): 
      x2 = x.strip()+str(n) 
      print(x2) 
      if x2 == Password: 
       print("Congrats, you found the password!") 
       return 
Смежные вопросы