I wrote some code that was meant to try to approach a target string by selecting randomly from a list of chars, but I have some problem that I do not quite understand.
import random
class MonkiesGo:
    __chars = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    def __init__(self, targetString):
        __targetString = targetString.lower()
        __targetList = list(targetString)
        __attemptList = []
        __unmatchedIndexes = [ x for x in range(0, (len(targetString)-1)) ]
    def attemptToSolve(self):
        if len(__unmatchedIndexes) == 0:
            __attemptString = ''.join(__attemptList)
            return __attemptString, __targetString
        else:
            for index in __unmatchedIndexes:
                __attemptList[index] = randomChar()
    def updateSolutionProgress(self):
        for indexCheck in __unmatchedIndexes:
            if __targetList[index] == __attemptList[index]:
                __indexToClear = __unmatchedIndexes.index(index)
                del __unmatchedIndexes[indextToClear]
    def __randomChar(self):
        return __chars[ random.randint(0,26) ]
when I import it into a python shell in my terminal, make an object as follows:
from monkies import MonkiesGo 
mk = MonkiesGo("hello")
mk.attemptToSolve()
I get the error:
Traceback (most recent call last): File "", line 1, in
File "path/to/the/file/monkies.py", line 15, in attemptToSolve if len(__unmatched 0: NameError: name '_MonkiesGo__unmatched' is not defined
What is causing this, and why is there an underscore before MonkiesGo?
THanks in advance.
Updated to:
import random
class MonkiesGo:
    def __init__(self, targetString):
        self.targetString = targetString.lower()
        self.targetList = list(targetString)
        self.attemptList = []
        self.unmatchedIndexes = [ x for x in range(0, (len(targetString)-1)) ]
        self.chars = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    def attemptToSolve(self):
        if len(self.unmatchedIndexes) == 0:
            self.attemptString = ''.join(self.attemptList)
            return self.attemptString, self.targetString
        else:
            for index in self.unmatchedIndexes:
                self.attemptList[index] = randomChar()
    def updateSolutionProgress(self):
        for indexCheck in self.unmatchedIndexes:
            if self.targetList[index] == self.attemptList[index]:
                indexToClear = self.unmatchedIndexes.index(index)
                del self.unmatchedIndexes[indextToClear]
    def randomChar(self):
        return self.chars[ random.randint(0,26) ]
Now I get a name error regarding randomChar..?
 
    