Можно ли сократить в питоне часть кода, которая проверяет сколько раз из промежутка выполняется условие (если необходимо произвести отбор элементов с определённым количеством чисел, соответствующих условию). пример:
на промежутке от 1 до 999 находятся числа которые можно представить суммой квадратов двух натуральных чисел единственный образом
for i in range(1, 1000):
....k = 0
....for a in range(1, isqrt(i)):
... if isqrt(i - a ** 2) == sqrt(i - a ** 2):
... k += 1
...if k == 1:(....)
возможно, 3-6 строки можно записать в одну, что упросит код и возможно оптимизирует программу, но я не знаю как это сделать, если необходимо, чтобы условие выполнялось определённое кол-во раз (в примере 1)
помогите начинающему программисту, спасибО!
Python
Как сократить код
Работа со списками, самое интересное
Простой генератор списка:
[i for i in range(1,1000)]
Генератор списка с условием
[i for i in range(1,1000) if i%2==0]
Простой каскад генераторов с условием:
[i2 for i2 in [i1 for i1 in range(1,1000)] if i2%2==0]
Усложнённый каскад генераторов с условием
[[i3*2 for i3 in range(1,i2)] for i2 in [i1 for i1 in range(1,1000)] if i2%2==0]
Короче в одну строчку можно налепить овер много списков и условий к ним, при этом работать это будет местами быстрее чем обычная многострочная роспись.
Простой генератор списка:
[i for i in range(1,1000)]
Генератор списка с условием
[i for i in range(1,1000) if i%2==0]
Простой каскад генераторов с условием:
[i2 for i2 in [i1 for i1 in range(1,1000)] if i2%2==0]
Усложнённый каскад генераторов с условием
[[i3*2 for i3 in range(1,i2)] for i2 in [i1 for i1 in range(1,1000)] if i2%2==0]
Короче в одну строчку можно налепить овер много списков и условий к ним, при этом работать это будет местами быстрее чем обычная многострочная роспись.
> 3-6 строки можно записать в одну, что упросит код и возможно оптимизирует программу
вот ты сам хоть раз пробовал пытаться разобрать, что делает "упрощённый" код в одну строчку (чужой, разумеется), прежде чем такое говорить?
про оптимизацию вообще молчу
хочешь что-нибудь оптимизировать - убери sqrt и добавь сразу отсечение, если k==2, ещё можно попробовать перебирать не сумму квадратов, а их основания по отдельности, а писать говнокод не нужно
вот ты сам хоть раз пробовал пытаться разобрать, что делает "упрощённый" код в одну строчку (чужой, разумеется), прежде чем такое говорить?
про оптимизацию вообще молчу
хочешь что-нибудь оптимизировать - убери sqrt и добавь сразу отсечение, если k==2, ещё можно попробовать перебирать не сумму квадратов, а их основания по отдельности, а писать говнокод не нужно
Так делать то что программа должна, хотя бы вот из этого примера? Найти все такие натуральные числа, которые можно представить в виде двух квадратов единственным образом, и аккуратно напечатать их список? Дак тут надо не код упрощать, а проверку числа на соответствие данному требованию оптимизировать и вывод списка делать покрасивее да поэлегантнее, то есть как-нибудь так:



То что Вы дали, это не код, а непонятно что.
Так как мэйл. ру корежит код до неузнаваемости, то чтобы здесь выкладывать, отступы надо заменять тильдами, или выкладывать на
pastebin.com
а сюда ссылку.
По-моему задачу:
"на промежутке от 1 до 999 находятся числа которые можно представить суммой квадратов двух натуральных чисел единственный образом"
можно решить так:
--------------
from time import time
#от 1 до N включительно
#N = 1000_000
N = 999
M = int(N**0.5)+1
#======================================
stt = time()
A = set()
B = set()#не единственным образом
for i in range(1,M):
~~~~for j in range(i,M):
~~~~~~~~a = i*i + j*j
~~~~~~~~if a <= N:
~~~~~~~~~~~~if a in A:
~~~~~~~~~~~~~~~~B.add(a)
~~~~~~~~~~~~A.add(a)
C = sorted(A-B)
print(len(C))
print(C[:10])
print(C[-10:])
print(time()-stt)
with open('f.txt','w') as fw:
~~~~print(*C,file=fw)
Так как мэйл. ру корежит код до неузнаваемости, то чтобы здесь выкладывать, отступы надо заменять тильдами, или выкладывать на
pastebin.com
а сюда ссылку.
По-моему задачу:
"на промежутке от 1 до 999 находятся числа которые можно представить суммой квадратов двух натуральных чисел единственный образом"
можно решить так:
--------------
from time import time
#от 1 до N включительно
#N = 1000_000
N = 999
M = int(N**0.5)+1
#======================================
stt = time()
A = set()
B = set()#не единственным образом
for i in range(1,M):
~~~~for j in range(i,M):
~~~~~~~~a = i*i + j*j
~~~~~~~~if a <= N:
~~~~~~~~~~~~if a in A:
~~~~~~~~~~~~~~~~B.add(a)
~~~~~~~~~~~~A.add(a)
C = sorted(A-B)
print(len(C))
print(C[:10])
print(C[-10:])
print(time()-stt)
with open('f.txt','w') as fw:
~~~~print(*C,file=fw)
Похожие вопросы
- Кто поможет сократить код на tkinter
- Можете помочь! Нужен код для Python, что бы он заменял определенный текст в файле
- Помогите чайнику в Питоне. Как правильно перейти на другую строку в коде, чтоб он не запустился раньше времени?
- Проблема с кодом в Python
- С++ написать код для техникума.
- Как научится хорошо писать код?
- НАПИШИТЕ СРОЧНО КОД НА PYTHON!
- Не понимаю как выявить у кода (алгоритма ) сложность кто поможет с решением и объяснит как получил (выявил) Python
- Помогите пожалуйста соединить два кода в один,очень долго пытался,но всё равно не совсем правильно получается
- Что не так в моем коде? Крестики - Нолики на python