Como encontrar os números perfeitos entree 1 e um dado n? Por número perfeito entende-se um número que é igual ao produto de dois inteiros iguais. Por exemplo, 25 = 5 * 5 é um número perfeito. Outra forma de definir seria dizer que é um número cuja raiz quadrada é um inteiro.
Uma solução muito simples será calcular os sucessivos produtos de um inteiro por si próprio filtrando os resultados menores ou iguais a n.
def perfeito(n): for i in range(1,n+1): prod = i * i if prod <= n: print(n)Fácil, certo? Mas será que vale a pena repetir i ciclo n vezes?? Por exemplo, se n=100 é claro que basta testar os inteiros … até 10, ou seja,até à raiz quadrada de 100. Daí uma nova solução.
import math def perfeito(n): sup = int(math.sqrt(n)) for i in range(1,sup+1): prod = i * i if prod <= n: print(n)E pronto. Notar apenas que temos que garantir que os argumento de range são números inteiros.
Pergunta 3
Esta pergunta é semelhante à colocada na TP1. Daí que apresentemos apenas a solução. O leitor deve referir-se ao texto anterior caso não entenda o que é apresentado. Dito isto, chamamos a atenção para o modo como conseguimos que a formação seja diferente, alterando apenas o modo de modificar a nova posição.
import turtle
def triangulo(lado,orientacao,pos_x,pos_y,cor):
# inicializa tartaruga
turtle.showturtle()
turtle.penup()
turtle.goto(pos_x,pos_y)
turtle.setheading(orientacao)
turtle.colormode(255)
turtle.pencolor(cor)
turtle.pendown()
# desenha triangulo
for i in range(3):
turtle.forward(lado)
turtle.left(120)
turtle.hideturtle()
def boneco(lado,orientacao,pos_x,pos_y,cor,n):
for i in range(n):
triangulo(lado,orientacao,pos_x,pos_y,cor)
pos_x = pos_x - lado//5
pos_y = pos_y - lado//5
orientacao = orientacao + 15
lado = lado + 10
if __name__ == '__main__':
#triangulo(40,45,25,50,(0,255,255))
boneco(50,0,0,0,(0,0,255),10)
turtle.exitonclick()
