Я не нашел ответа для этого. Извините, если это распространено. Я любопытный новичок.рекурсивный для динамического указателя
Я создаю для петель, как это (для создания словаря скрипта):
for i1 in range(len(n)):
for i2 in range(len(n)):
for i3 in range(len(n)):
for i4 in range(len(n)):
for i5 in range(len(n)):
for i6 in range(len(n)):
word = n[i1] + n[i2] + n[i3] + n[i4] + n[i5] + n[i6]
И я хотел бы создать рекурсивную версию, в которой я мог бы выбрать количество петель. Поэтому, если у меня будет большее слово, он будет достаточно петли. И мне нужно будет переменный указатель позже (для этого словотворчества), поэтому я думал, что при использовании динамических переменных [Do, если его можно не знать, хотя]
n = len(string)
def loop(n): #'n' is a string and the length would be the number of recursions
if n > 0:
var1 [defining my dynam. var]
for var1 in range(len(string)):
loop(n-1)
else:
return word() #I guess I know how to code this one
Так .. Я хочу иметь такие переменные, как var1, var2, var3 и т. д., чтобы положить в мой for. Любая помощь/направления приветствуются! Спасибо заранее!
Редактировать: Извините, что проблема не понятна. Хорошо, я не уверен, что я должен это сделать (следует ли стереть выше?). Мне удалось создать итеративную версию того, что я хочу: ввести строку и распечатать список со всеми возможными комбинациями с этими символами.
С помощью следующей функции я получил результат, который хотел, но он ограничен 6 символами. Я предполагаю, что с рекурсивной версией он сможет получить любой ввод и создать столько циклов, сколько необходимо. [Теперь лучше объяснить?]
Мой фактический сценарий выглядит следующим образом (я знаю, что есть лучшие способы сделать фильтр/чеки):
def rec():
word = ""
txtfile = open(arq,'w') #arq is the string input + .txt
s=0 #Counts the number of words writen
t=0 #tests if the word exists
for i1 in range(len(n)):
for i2 in range(len(n)):
for i3 in range(len(n)):
for i4 in range(len(n)):
for i5 in range(len(n)):
for i6 in range(len(n)):
#This is a filter for not repeating the same character in a word
if not (i1 == i2 or i1 == i3 or i1 == i4 or i1 == i5 or i1 == i6 \
or i2 == i3 or i2 ==i4 or i2 == i5 or i2 ==i6 \
or i3 == i4 or i3 == i5 or i3 == i6 \
or i4 == i5 or i4 == i6 \
or i5 == i6):
word = n[i1] + n[i2] + n[i3] + n[i4] + n[i5] + n[i6]
txtfile.close()
data_file = open(arq)
#This one search for the word in the file, for not having duplicates
for line in data_file:
if line == word + "\n" :
t = 1
else:
pass
data_file.close()
if not t == 1:
s+=1
txtfile = open(arq,'a')
txtfile.writelines(word + "\n")
t=0
print ("Number of words writen:",s)
Мой выход для «EEEEEE» только что один строка, как пример. И первые из них для бейджей: значки badgse badegs badesg badsge badseg bagdes bagdse bageds bagesd bagsde bagsed baedgs
Большое спасибо за отзывы!
Если вам просто нужно сгенерировать все возможные строки, то вещий способ сделать это было бы [это] (http://stackoverflow.com/questions/ 7074051/is-there-any-best-way-to-generate-all-possible-three-letters-keywords). – malloc47
Трудно понять, что вы пытаетесь сделать. Можете ли вы дать лучшее определение проблемы, которую хотите решить? –
Я знаю, что вы хотите рекурсивную версию, но вместо этого я бы использовал 'itertools.combinations_wit_replacement'. Стандартный и намного проще/быстрее :) –