У меня странная проблема, которую я хотел бы понять. Я написал простой генетический код, позволяющий угадать пару букв «ab». Существует цикл, в котором в качестве первого шага используется функция, генерирующая случайных кандидатов. Функция работает и ее легко понять, но она не работает при импорте, только в том случае, если она находится внутри всего модуля генетического кода. Если я напишу другой модуль только с этой функцией и импортирую оттуда, он будет работать нормально.
Что это за черт?
Это код, который я использую для импорта функции:
from scratch_2 import generate_random_candidate
print (generate_random_candidate())
Это Scratch_2:
import random
import string
target = "ab"
letras = string.ascii_lowercase
tried_candidates = set()
def generate_random_candidate():
while True:
intento = random.choice(letras) + random.choice(letras)
if intento not in tried_candidates:
tried_candidates.add(intento)
return intento
Так вот что работает совершенно нормально. А это Scratch_1, когда я импортирую оттуда, я вижу, что функция отладки не работает, если я печатаю try_candidates, я вижу, что она печатает set(), set(), set(), как будто это внутри бесконечного цикла. Это потому, что он вызывает функцию, но не запускает ее код? Связано ли это с переменной try_candidates. Разве одна и та же функция не должна работать независимо от того, в каком модуле она хранится?
Это Scratch_1, если я импортирую функцию из него, она ничего не делает.
import random
import string
import matplotlib.pyplot as plt
import plotly.graph_objects as go
target = "ab"
letras = string.ascii_lowercase
tried_candidates = set()
def generate_random_candidate():
while True:
intento = random.choice(letras) + random.choice(letras)
if intento not in tried_candidates:
tried_candidates.add(intento)
return intento
def generate_children(parent):
hijos = []
while True:
intento = parent[0] + random.choice(letras)
if intento not in tried_candidates:
hijos.append(intento)
break
while True:
intento = random.choice(letras) + parent[1]
if intento not in tried_candidates:
hijos.append(intento)
break
return hijos
def evaluate_candidate(candidate):
score = 0
if candidate[0] == target[0]:
score += 1
if candidate[1] == target[1]:
score += 1
"""
if candidate[0] == target[1]:
score += 0.1
if candidate[1] == target[0]:
score += 0.1
"""
return score
def g ():
tried_candidates = set()
population_size = 10
population = []
for _ in range(population_size):
population.append(generate_random_candidate())
contador = 1
while True:
tried_candidates.update(population)
scores = []
for candidate in population:
scores.append(evaluate_candidate(candidate))
children = []
Flag = False
for i, score in enumerate(scores):
if score == 2:
Flag = True
break
if score == 1 :
x = generate_children(population)
tried_candidates.update(x)
children.extend(generate_children(population))
if len(children) < population_size:
new_candidates = []
for _ in range(population_size - len(children)):
y = generate_random_candidate()
tried_candidates.update(y)
new_candidates.append(y)
children.extend(new_candidates)
population = children
else:
meter = children[population_size:]
population = children[:population_size]
tried_candidates.difference_update(meter)
found = False
for candidate in population:
if evaluate_candidate(candidate) == 2 or Flag == True:
found = True
return contador
contador = contador +1
resultados = []
for i in range (100000):
resultados.append(g())
Подробнее здесь: https://stackoverflow.com/questions/791 ... hen-import
Импортированная функция Python работает при импорте из модуля 1, но не работает при импорте из модуля 2. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему моя импортированная функция не работает в моем основном файле в Python
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему моя импортированная функция не работает в моем основном файле в Python
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-