Я пытаюсь создать функцию, где:
- Список вывода генерируется из случайных чисел из списка ввода
- Список вывода имеет указанную длину и добавляет к указанная сумма
отл. Я указываю, что мне нужен список, который имеет длину 4 и добавляет до 10. Случайные числа извлекаются из списка ввода до тех пор, пока критерии не будут удовлетворены.
Мне кажется, что я неправильно подхожу к этой проблеме, пытаясь использовать рекурсию. Любая помощь будет принята с благодарностью !!!
РЕДАКТИРОВАТЬ: для получения дополнительной информации по этой проблеме .... Это будет случайный вражеский генератор.
Будет введен список ввода конечной цели из столбца в CSV под названием XP. (Я планирую использовать модуль pandas). Но у этого CSV будет список имен врагов в одном столбце, XP в другом, Health в другом и т. Д. c. Таким образом, конечная цель состоит в том, чтобы иметь возможность указать общее количество врагов и сумму XP, которая должна быть между этими врагами, и составить список с соответствующей информацией. Например 5 противников с общим количеством очков опыта 200 между ними. Результат может быть -> Apprentice Wizard (50 xp), Apprentice Wizard (50 xp), Grung (50), Xvart (25 xp), Xvart (25 xp). На самом деле список вывода должен включать всю информацию о строках для выбранных элементов. И это совершенно нормально, если дублировать результаты, как показано в этом примере. Это на самом деле будет иметь больше смысла в описательной части игры, для которой она предназначена.
CSV -> https://docs.google.com/spreadsheets/d/1PjnN00bikJfY7mO3xt4nV5Ua1yOIsh8DycGqed6hWD8/edit?usp=sharing
import random
from random import *
lis = [1,2,3,4,5,6,7,8,9,10]
output = []
def query (total, numReturns, myList, counter):
random_index = randrange(len(myList)-1)
i = myList[random_index]
h = myList[i]
# if the problem hasn't been solved yet...
if len(output) != numReturns and sum(output) != total:
print(output)
# if the length of the list is 0 (if we just started), then go ahead and add h to the output
if len(output) == 0 and sum(output) + h != total:
output.append(h)
query (total, numReturns, myList, counter)
#if the length of the output is greater than 0
if len(output) > 0:
# if the length plus 1 is less than or equal to the number numReturns
if len(output) +1 <= numReturns:
print(output)
#if the sum of list plus h is greater than the total..then h is too big. We need to try another number
if sum(output) + h > total:
# start counter
for i in myList:# try all numbers in myList...
print(output)
print ("counter is ", counter, " and i is", i)
counter += 1
print(counter)
if sum(output) + i == total:
output.append(i)
counter = 0
break
if sum(output) + i != total:
pass
if counter == len(myList):
del(output[-1]) #delete last item in list
print(output)
counter = 0 # reset the counter
else:
pass
#if the sum of list plus h is less than the total
if sum(output) + h < total:
output.append(h) # add h to the list
print(output)
query (total, numReturns, myList, counter)
if len(output) == numReturns and sum(output) == total:
print(output, 'It worked')
else:
print ("it did not work")
query(10, 4, lis, 0)