Как создать несколько итераций

1

Я хочу знать, как создать итерацию, которая будет содержать несколько или несколько параметров с разными диапазонами. Например, я хочу создать несколько объектов с итерациями, которые имеют разные диапазоны. Как и функция треугольника, которая принимает три параметра, как я могу использовать итерации, чтобы дать один параметр одному значению из диапазона, например, от 50 до 100, а другой параметр - совсем другой. Я знаю, как создать экземпляр над одним параметром:

for i in range(100):

Но что мне делать, чтобы создать экземпляр, если требуется несколько параметров

  • 0
    Вы имеете в виду эти функции треугольника mathworld.wolfram.com/TriangleFunction.html ? Какие аргументы принимает ваша функция?
  • 0
    Извините за путаницу, это просто функция, которая определяет, могут ли данные три значения образовывать треугольник или нет
Показать ещё 6 комментариев
Теги:

3 ответа

1
Лучший ответ

Похоже, вы захотите использовать вложенные для циклов. Например, для трех параметров:

# these are just example ranges, replace with what meaningful for your problem
range_for_parameter_0 = range(100)
range_for_parameter_1 = range(150)
range_for_parameter_2 = range(75)

# start a nested for loop
for i in range_for_parameter_0:
    for j in range_for_parameter_1:
        for k in range_for_parameter_2:
            # you can print something out to see exactly what happening
            # feel free to comment out the print statement
            print('Calling triangle_function with parameters {},{},{}'.format(i,j,k))

            # evaluate your triangle_function which takes 3 parameters
            triangle_function(i,j,k)
  • 0
    кажется довольно хорошим, откуда ты это взял? книгу или что-то для ссылки, потому что я искал много из них, которые дали бы передовые методы, но не могу найти хорошие
  • 0
    Привет, Афзал, хороший источник информации, когда ты только начинаешь, это docs.python.org/3/tutorial . Страница, которая обсуждает циклы, является docs.python.org/3/tutorial/controlflow.html#for-statements . Если вы посмотрите на 4.4, у них есть пример, который использует вложенные циклы for.
1

Вы можете попробовать выполнить итерацию по картезианскому product.

Дано

import itertools as it


def is_tri(a, b, c):
    """Return True if the sides make a triangle."""
    a, b, c = sorted([a, b, c])
    return (a + b) > c

ranges = range(1, 2), range(1, 3), range(1, 5)

Код

[sides for sides in it.product(*ranges) if is_tri(*sides)]
# [(1, 1, 1), (1, 2, 2)]

подробности

Если вы не знакомы со списком, последнее эквивалентно следующему коду:

results = []
for x, y, z in it.product(*ranges):
    if is_tri(x, y, z):
        results.append((x, y, z))

results
# [(1, 1, 1), (1, 2, 2)]

За ваш комментарий is_tri() предварительно сортирует аргументы, поэтому вы меняете их:

assert is_tri(13, 12, 5) == True 
assert is_tri(12, 5, 13) == True
assert is_tri(5, 13, 12) == True

Если ваши диапазоны одинаковы, вы можете упростить ввод с помощью параметра repeat, например it.product(range(1, 101), repeat=3).

  • 0
    Это отлично!
0

Вы не можете. Вам нужны три итерации.

for i in range(x):
    ...

for j in range(y):
    ...

for k in range(z):
    ...

См. Определение range() здесь

  • 0
    да, но я не могу создать экземпляр с указанием только одного параметра за раз
  • 0
    Функция range(start, stop[, step]) может принимать только один параметр stop , так что вы либо используете вложенный цикл во вложенном цикле (очень плохо с точки зрения производительности), либо вы полностью реструктурируете логику алгоритма и соответствующим образом реорганизуете свой код.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню