Автор оригинала: Robin Andrews.
Здесь «забавная проблема Python с участием просто немного математического ноу-хау:
Напишите функцию, которая принимает аргумент N и печатает пару натуральных чисел x, y такого, что x² +
Для целей этого упражнения мы предположим, что N> 0. Так, например: для, мы можем иметь 1² +, так и.
Существует связь между этой проблемой и известным Пифагоренская теорема , что является одним из самых важных произведений математических знаний, когда-либо обнаруженных. Он лежит в основе многочисленных аспектов технологического мира, в котором мы живем, и это также очень полезно в играх для расчета расстояния между вещами. Вы можете прочитать больше об этом здесь: Как рассчитать расстояние между двумя точками с Python и веселая игра, чтобы играть Отказ
Вот пара наблюдений, которые могут помочь вам:
- В Python для расчета квадратного корня N, мы можем использовать Math.sqrt (n)
- Поскольку n> 0, x должен быть не менее 1.
- С x, Y можно больше √ (n – 1)
- Давайте предположим x, как иначе у нас были бы дубликаты решения (например, 1² + и 3² +)
- В Python в одну сторону на квадрат ряд – использовать ** 2. E.G 3 **
- Существует полезная функция math.floor (n), что дает наибольшее целое число меньше или равно n
- Это полезно, потому что E.G для, 1² + (√3) ² округляется будет слишком большим. Поэтому мы используем math.floor (math.sqrt (n)) как верхнее значение для x или y
- Вы можете прочитать на вложен для петлей Чтобы помочь вам с этой проблемой
import math
def sum_of_squares(n):
""" Returns a pair of natural numbers x, y, such that x² + y² = n """
pass
assert sum_of_squares(10) == (1, 3) assert sum_of_squares(3) is None
Пройдите в завершение вышеуказанного кода для себя, используя свою любимую среду разработки Python. Заявления Assert – это просто простой способ проверить свой код – когда это правильно, ничего не произойдет, что это хорошо, но если утверждение не соответствует действительности, вы получите AssertionError. Если это не понятно, и вы предпочли бы не использовать Assert, вы можете удалить эти операторы и просто использовать оператор печати. Например. Печать (Sum_of_squares (10)).
Решение Python Sum 2 квадратов вызов
Нажмите ниже, чтобы один из способов решить проблему.
import math
def sum_of_squares(n):
"""
Returns a pair of natural numbers x, y, such that x² + y² = n
"""
max_val = math.floor(math.sqrt(n))
for i in range(1, max_val + 1):
for j in range(1, max_val + 1):
if i ** 2 + j ** 2 == n:
return (i, j) # Returns first correct pair.
return None
assert sum_of_squares(10) == (1, 3)
assert sum_of_squares(3) is None
# for i in range(1, 201):
# print(sum_of_squares(i))
Я надеюсь, что вы обнаружили, что это интересный вызов для кодирования Python. Все время, которое вы проводите думая, как решить такие проблемы с тем, чтобы сделать вас лучшим программистом Python. Счастливые вычисления.