Нужна помощь в создании кривой Гильберта с использованием чисел в Python - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу создать функцию, которая будет создавать кривую Гильберта в питоне, используя числа. Параметрами для функции будут числа, которые будут указывать функции, сколько раз она должна повторяться. Чтобы создать кривую Гильберта, вы начинаете с «L», затем оно превращается в «+ RF-LFL-FR +», а затем «R» превращается в «-LF + RFR + FL-». Как мне это сделать?

#Here is what I've made so far
def hilbert(num):
  s = 'L'
  for i in range(num-1):
    s = s.replace('L','+RF-LFL-FR+')
    b = 'R'
    for i in range(num-1):
      b = b.replace('R','-LR+RFR+FL-')
      end = s + b
  return end

Он полностью вылетает, когда вы вводите 1, я пытался использовать код, созданный для снежинки Коха, но я не был уверен, как использовать две переменные.

#Here is the results for when I use the function
hilbert(1)
#It returns
a crash bruh
hilbert()
#It returns 
'+RF-+RF-LFL-FR+F+RF-LFL-FR+-FR+-L-LR+RFR+FL-+-LR+RFR+FL-F-LR+RFR+FL-+FL-'


#Here is what I want it to return
hilbert(1)
'L'
hilbert(3)
'+-LF+RFR+FL-F-+RF-LFL-FR+F+RF-LFL-FR+-F-LF+RFR+FL-+'

I 'Я не так хорош в петле диапазона, как мне это сделать?

1 Ответ

1 голос
/ 06 ноября 2019

В предоставленном вами коде вы тестируете с # 1 в качестве ввода. В этом случае:

for i in range(num-1):

не выполняется, и ваш цикл for никогда не инициализируется, поскольку ваш i уже вышел за этот диапазон.

Ниже вы можете увидеть пример кода, который вы можете использоватьв качестве справки при игре с кривой Гильберта:

import turtle

turtle.speed(speed=10)  # Fastest

hilbert_seq = "a"

for _ in range(5):
    new_seq = ""
    for char in hilbert_seq:
        if char == "a":
            new_seq += "-bF+aFa+Fb-"
        elif char == "b":
            new_seq += "+aF-bFb-Fa+"
        else:
            new_seq += char
    hilbert_seq = new_seq

for char in hilbert_seq:
    if char == "F":
        turtle.forward(9)
    elif char == "+":
        turtle.right(90)
    elif char == "-":
        turtle.left(90)

Снимок экрана из приведенного выше примера кода:

Screenshot of running turtle graphics implementation of the Hilbert Curve

...