Логарифм Интегралыч
Логарифм Интегралыч Копипаст
26 мая 2022, 15:30

Python и МЫ

Python и МЫ
Python и МЫ


Данная тема развивает темы: Учим C# зная basic
Учу EXCEL за 6 минут в избранном у около 70 здешних
Учим c# windows forms зная basic
и наверняка подходит под форум Торговые роботы

Сейчас цель показать: посмотрев случайные видео уроки Python
легко и просто научиться программировать хоть что-то
и читать чужие программы и для начала проверять программы онлайн

Список программ ведёт в онлайн компилятор
QUAD rextester.com/IKMBI48397
FIBR rextester.com/FEEJ49204
SORT rextester.com/ZQSY77323
QUA rextester.com/OJN42859
+ qb64 Рюкзак 0-1 Knapsack 0-1

QUAD угадывает 1 из квадрилиона 10^15 за логарифмические шаги
и повторяет мои давнишние программы на qbasic & qb64 & C#

import random # QUAD rextester.com/IKMBI48397
h1, h2, t, f = 0, 10**15, 0, 0
c = random.randrange(0,h2) #comp
h = random.randrange(0,h2) #human
while f<1:
    print(t,c,h)
    if h<c:
        print('БОЛЬШЕ')
        a=h
        h=int((h+h2)/2)
        h1=a
    elif h>c:
        print('меньше')
        a=h
        h=int((h1+h)/2)
        h2=a
    else:
        print('угадано за', t, 'шагов')
        f=1
    t=t+1

FIBR числа Фибоначчи в столбик

fi1=fi2=fi3=1 # FIBR rextester.com/FEEJ49204
for da in range(1, 88):
    print("."*(20-len(str(fi3))), end=' ')
    print(fi3)
    fi3 = fi2+fi1
    fi1 = fi2
    fi2 = fi3
Результат должен быть ровный столбец:
................... 1
................... 2
................... 3

....... 6557470319842
...... 10610209857723
...... 17167680177565

.. 420196140727489673
.. 679891637638612258
. 1100087778366101931

SORT простейшая пузырьковая сортировка
from random import randint #sort rextester.com/ZQSY77323
N=10
a = [1]
for i in range (1,N):
    a[i]=a.append(i) 
    a[i]=randint(1,10)
    print(a[i], end=' ')
print()
for i in range (0,len(a)-1):
    for j in range (i,len(a)):
       if a[i]>a[j]:
           t=a[i]
           a[i]=a[j]
           a[j]=t
for i in range (1,len(a)):
    print(a[i], end=' ')
Пример:
5 3 4 9 6
3 4 5 6 9 

QUA остроумное квадратное уравнение:
ответы текстовые или числовые

a,b,c= 1, 6, 5 # QUA rextester.com/OJN42859
d=(b*b)-(4*a*c)
if d<0:
    x1='без '
    x2="решения"
else:
    x1=(-b+(d**0.5))/(2*a)
    x2=(-b-(d**0.5))/(2*a)
    print(a*x1*x1 +b*x1 +c)
    print(a*x2**2 +b*x2 +c)
print(x1,x2)
Ответ: «без решения» или сейчас:
0 0  -1  -5 

Python и МЫ

Заодно на qbasic qb64 кратко решена классическая задача Рюкзак 0-1

Оглавление: rosettacode.org/wiki/Knapsack_problem
Подробно англ.: rosettacode.org/wiki/Knapsack_problem/0-1

Новейшая моя программа синтезирует все шифры 0 и 1
добавляя лишний регистр и 0 остаются слева в шифре 

Количество сравнений уменьшается с N! до 2^N
например N=5 N!=120 >> 2^N=32

Автоматически присваиваются случайные значения
количества и качества и получается интеграл стоимости
и вообще: интеграл количества и качества

Программа пишет в каталог qb64
Open "knapsack.txt" For Output As #1
N=7: L=5: a = 2^(N+1): Randomize Timer 'knapsack.bas DANILIN
Dim L(N), C(N), j(N), q(a), q$(a), d(a)

For m=a-1 To (a-1)/2 Step -1: g=m: Do ' sintez shifr
    q$(m)=LTrim$(Str$(g Mod 2))+q$(m)
    g=g\2: Loop Until g=0
    q$(m)=Mid$(q$(m), 2, Len(q$(m))) 
Next

For i=1 To N: L(i)=Int(Rnd*3+1) ' lenght & cost
C(i)=10+Int(Rnd*9): Print #1, i, L(i), C(i): Next ' origin

For h=a-1 To (a-1)/2 Step -1
    For k=1 To N: j(k)=Val(Mid$(q$(h), k, 1)) ' from shifr
        q(h)=q(h)+L(k)*j(k)*C(k) ' 0 or 1
        d(h)=d(h)+L(k)*j(k)
    Next
    If d(h) <= L Then Print #1, d(h), q(h), q$(h)
Next
max=0: m=1: For i=1 To a
    If d(i)<=L Then If q(i) > max Then max=q(i): m=i
Next
Print #1,: Print #1, d(m), q(m), q$(m): End
Результат сокращён вручную: там длины и интегралы и наибольшая сумма произведений
1             2             17 
 2             2             14 
 3             2             17 
 4             1             11 
 5             2             18 
 6             3             14 
 7             3             10 

 5             73           1101000
 2             28           0100000
 5             81           0011100 !!!
 3             45           0011000
 5             76           0010010
 2             36           0000100

 5             81           0011100

Главное очень кратко и понятно думаю всем

Python и МЫ

n=5; N=n+1; G=5; a=2**N		# N=7: L=5: a = 2^(N+1): 'knapsack.bas DANILIN
L=[];C=[];e=[];j=[];q=[];s=[]	# Dim L(N), C(N), j(N), q(a), q$(a), d(a)
d=[];L=[1]*n;C=[1]*n;e=[1]*a	# KNAPSACK 0-1 DANILIN
j=[1]*n;q=[0]*a;s=[0]*a;d=[0]*a  # https://rextester.com/BCKP19591

from random import randint	# Randomize Timer 
for i in range(0,n):		# For i=1 To N 
    L[i]=randint(1,3)		# L(i)=Int(Rnd*3+1) 
    C[i]=10+randint(1,9)	# C(i)=10+Int(Rnd*9) 
    print(i+1,L[i],C[i])	# Print i, L(i), C(i): Next
print()

for h in range(a-1,(a-1)//2,-1):# For m=a-1 To (a-1)/2 Step -1: g=m: Do
    b=str(bin(h))		# q$(m)=LTrim$(Str$(g Mod 2))+q$(m): g=g\2: Loop Until g=0
    e[h]=b[3:len(b)]		# q$(m)=Mid$(q$(m), 2, Len(q$(m))): Next
        
    for k in range (n):		# For k=1 To N:
      j[k]=int(e[h][k])		# j(k)=Val(Mid$(q$(h), k, 1)) ' from chifer
      q[h]=q[h]+L[k]*j[k]*C[k]	# q(h)=q(h)+L(k)*j(k)*C(k) ' 0 or 1
      d[h]=d[h]+L[k]*j[k]	# d(h)=d(h)+L(k)*j(k): Next
        
    if d[h]<= G:		# If d(h) <= L Then 
      print(e[h], G, d[h],q[h])	# Print #1, d(h), q(h), q$(h): Next
print()   

max=0; m=1 			# max=0: m=1: 
for i in range(a):		# For i=1 To a
    if d[i]<=G and q[i]>max:	# If d(i)<=L Then If q(i) > max 
        max=q[i]; m=i		# Then max=q(i): m=i: Next
print (d[m], q[m], e[m])	# Print #1,: Print #1, d(m), q(m), q$(m): End

# Mass Cost
1 2 12
2 3 17
3 1 14
4 3 17
5 1 13

Chifer Mass Cost           
11000 5 5 75
10101 5 4 51
01001 5 4 64
00111 5 5 78 !!!
00110 5 4 65
00101 5 2 27
00000 5 0 0

Mass MAX Chifer
5 78 00111


32 Комментария
  • InvestorNaDolgo
    26 мая 2022, 15:46
    Норм
    • Mityan
      26 мая 2022, 16:21
      Логарифм Интегралыч, 

      если так уж хочется использовать библиотеку random, а не numpy, то:
      a = [random.randrange(-100,100) for _ in range(N)]

      Если так уж хочется распечатать каждое число на отдельной строке, то:
      print(*a, sep='\n')
        • Mityan
          26 мая 2022, 17:09
          Логарифм Интегралыч, 

          вот в три строчки:
           заполняем:
          a = [[i * j for i in range(1, 6)] for j in range(1, 6)]

          переводим в list of str:
          b = [[' ' + str(v) if v < 10 else str(v) for v in row] for row in a]

          распечатываем:
          print(*[' '.join(row) for row in b], sep='\n')
  • Доктор
    26 мая 2022, 17:03
    def optimus_prime(val):
    return [x for x in range(2,val+1) if all((x%y for y in range(2,1+int(x**0.5))))]

    За 500руб, расскажу, что происходит
      • 3Qu
        26 мая 2022, 17:59
        Логарифм Интегралыч, 
        def мне требовались чрезвычайно редко
        И напрасно. Простенький код на страничку без 3-4 оределений функций (def) и их применения в коде программы уже перестает читаться. Вы и сами в своем коде уже через 1-2 неделю перерыва с трудом разберетесь. Эт я по себе сужу.))
        Не говоря уж о более сложных программах, где уже не только def, но и class нужны.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн