Reputation: 39
I am attempting to make a sort of AI like script which will figure out your phrase. It is still a work in progress and is not yet complete.
Each guess should print the following info:
The text produced: ......... The string generated by the script.
The length of the text: ... The length of the previously mentioned string.
The score of the text: ..... The script will score the text based on how long it is and what letters are in it.
The target text: ................. The text it is trying to produce.
For some reason, after the first string the code freezes. I am hoping anyone can help, Thanks in advance!
import random
posAlpha = ["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", "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", "!", "?", ",", ".",
" ", "&", "0", "1", "2", "3",
"4", "5", "6", "7", "8", "9"]
def scoreText(input, goal):
output = 0-abs(len(input)-len(goal))
for i in range(len(min(input, goal, key=len))):
if not (input[i] in goal):
output+=0
elif not (input[i] == goal[i]):
output += 1
else:
output += 2
if output < 1:
return 1
else:
return output
goal = input("Target phrase: ")
score = 0
Ai=""
for i in range(random.randrange(round(len(goal)*0.5), len(goal)*2)):
Ai = Ai+ random.choice(posAlpha)
score = scoreText(Ai, goal)
print("Result: " + Ai)
print("Result Length: " + str(len(Ai)))
print("Goal: " + goal)
print("Score: " + str(score))
print()
while True:
oldAi = Ai
Ai = ""
for i in range(len(Ai)-1):
if (score == 1 or random.randrange(1, score) == 1):
Ai = Ai+random.choice(posAlpha)
else:
Ai = Ai+oldAi[i]
while True:
lenVariation=random.randrange(-4, 4)
if not (len(Ai)+lenVariation > len(goal)*2 or len(Ai)+lenVariation<round(len(goal)*0.5)):
if lenVariation > 0:
for i in range(lenVariation):
Ai = Ai+ random.choice(posAlpha)
break
elif lenVariation < 0:
for i in range(lenVariation):
AI=Ai[:-1]
break
score = scoreText(Ai, goal)
print("Result: " + Ai)
print("Result Length: " + str(len(Ai)))
print("Goal: " + goal)
print("Score: " + str(score))
print()
input("Goal Achived!!")
Upvotes: 1
Views: 168
Reputation: 6386
It is because the execution is stuck in the second infinite loop. The condition (len(Ai)+lenVariation > len(goal)*2 or len(Ai)+lenVariation<round(len(goal)*0.5))
is met every time after the first execution so the if statement is never evaluated to True
and the while loop is never exited.
Also, note that your break
statements only exist the for loop and not the while loop so statements after the second break are never executed.
Upvotes: 1