Printable Version of Topic
Click here to view this topic in its original format
თბილისის ფორუმი > Hello World > ჩაინიკური შეკითხვები Python-ში


Posted by: Shamili_gamarjoba 13 Jun 2009, 23:31
გამარჯობათ

ვიცი რომ ამ ენას ბევრი არ ხმარობს საქართველოში, თუმცა საკმაოდ ძლიერი და კარგი ენაა. მეც ეხლა დავიწყე ამის სწავლა და კარგი იქნება ვინც ერკვევით თუ გაგვიზიარებთ ცოდნას.

მაგალითად დავიწყოთ თავიდან ვინ რომელ პროგრამას იყენებთ Python-ში დაპროგრამებისთვის?




Posted by: nv86 21 Oct 2016, 23:38
Shamili_gamarjoba
გაუ biggrin.gif
რა გამოხმაურება მოყვა შენ თემას. biggrin.gif

მოკლედ. ეს თემა იქნება ჩემი აწი. აქ გავღუნავ ტვინს. დავდებ მაგალითებს დავწერ შეკითხვებს და აშ.
პრეტენზია ხო არავის გექნებათ?

პითონი იმსახურებს საკუთარ თემას.


გამოდით ვინც ამ ენას იყენებთ ან სწავლობთ. რადგან

cookbook 3 edition ხვალიდან უნდა ჩავყვე თავიდან ბოლომდე უნდა მივიდე.

learn python the hard way და კიდევ ერთი შესავალი კურსი გავიარია. ანუ ზოგადი ძალიან.

აჰათ ლინკები
http://sahandsaba.com/thirty-python-language-features-and-tricks-you-may-not-know.html

http://stackoverflow.com/questions/691946/short-and-useful-python-snippets

http://stackoverflow.com/questions/101268/hidden-features-of-python

http://sebsauvage.net/python/snyppets/

Violent Python ეს წინიც მირჩიე. სერიოზულად ვაპირებ სწავლას. ეს თემა მჭირდება და ავწევ.


Posted by: nv86 31 Oct 2016, 22:48
ესეიგი. უბრალოდ და ძალიან სასარგებლო ბიბლიოთეკა collections. რომელშიც შედის namedtuple, Counter ჰეშებლე ობიექტების ლექსიკონში დასათვლელად. deque, orderedDict და defaultdict.

აქ დავწერ პატარა და ლამაზ სკრიპტს რომელიც მომეწონა ძალიან სასწავლად შესანიშნავი მაგალითია.


CODE

from collections import deque

def search(lines, pattern, hist=5):
   prevlines = deque(maxlen=hist)
   for line in lines:
       if pattern in line:
           yield pattern, prevlines
       prevlines.append(line)

if __name__ == '__main__':
   with open('test') as file:
       for pattern, line in search(file, 'python', 5):
           for lines in line:
               print lines, 'previous lines'
       print pattern, '\n','end of match', '\n'
       print '-'*20


მარტივი კოდია.
ხსნი ტექსტურ ფაილს, გადასცემ ფუნცქციას რომელიც პარსავს თითოეული ხაზს, თუ რომელიმე ხაზში ხვდება 'python' მაჩავს if-ით და yield-ით აბრუნებს პატერნს 'python' და ასევე წინა ხუთ ხაზს. deque maxlen-ის საშუალებით , რომელიც არის სპეციალიზირებული დატატიპი <type 'collections.deque'>.
ის ანაცვლებს არსებულ dict, list, tuple, set კონტეინერებს. შეგვეძლო გამოგვეყენებინა list და push და pop-ით შეგვეზღუდა მისი ზომა 5 მდე მაგრამ deque ბევრად სწრაფად აკეთებს ამას იოლად და მოხერხებულად. როდესაც გვიჭრდება რაიმეს მოძებნა yield გენერატორი გამოყენება გვიმარტივებს ამოცნას რადგან არ გვიწევს მიღებული რეზულტატში რამის ძებნა პირდაპირ yield-ით მოგვაქვს რაც გჭირდება. ეს კოდი ჩემი აზრით გვეხმარება ბევრი რამის გააზრებაში და სხვადასხვა ფუნქციების ეფექტურად გამოყენებაში რეალური პრობლემების გადასაჭრელად.

Posted by: nv86 2 Nov 2016, 14:33
შემდეგი კოდი გათვლილია მესამე ვერსიის პითონზე.
ცენტოესზე პითონის დაყენება: https://devops.profitbricks.com/tutorials/install-python-3-in-centos-7/

რამდენიმე სასარგებლო დატატიპი და ალგორითმი collection-იდან გარდა სტანდარტული list, dict, set-ისა რომელიც გვეხმარება. search, sort, order, filter-ში.

მიმდევრობის ცვალდში გატენვა. როდესაც არ ვიცი მიმდევრობის ზომა.
CODE

a,  *b,  c  = [i for i in range(1,10)]
print (a)
print (b)
print (c)


ყველაფერი რაც ვარსკვლავურ ცვლადშია იქნება list. შიგ რომ არაფერი იყოს None მაინც list-ია.

აქ გამოვიყენეთ list comprehension რომელიც ასევე ძალიან კარგია მიმდევრობისგან ცვალდების სწრაფად შესაქმნელად.
http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Comprehensions.html

შევიძლია გამოვიყენოთ throwaway ცვლადი. დროებით ცვლადი რომელიც რომელშიც ვტენით არასაჭირო ინფორმაციას და ვაგდებთ.

მაგალითად. გვაქვს ტელეფონის ნომრების სია და გვაინტერესებს მხოლოდ ბოლო ნომერი.
CODE

phone_numbers = [ 233, 4442, 2444, 23655,9999]
*_, last_number = phone_numbers
print (last_number)


კიდევ ერთი მაგალითი ფუნქციის გამოყენებით.

CODE

nums = [ 233, 4442, 2444, 23655,9999]

def avg_number(data):
    first, *middle, last = data
    return sum(middle)/len(middle)
   
   
print (avg_number(nums))


ვარსკვიან ცვალდს შევიცლია შევუთავსოთ სტრინ გადამამუშავებელ ხელსაწყოებს. მაგალითად split.
CODE

line = "libstoragemgmt:x:995:992:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin"
uname, *fields, homedir, shell = line.split(':')

print (uname, shell)
print (fields)


ასევე შევიძლია გადავუაროთ დატაგულ tupple -ს.
CODE

records = [
                  ('foo', 1,2),
                  ('bar', 'hello'),
                  ('foo', 3,4)
]

def do_foo(x,y):
print ('foo', x,y)

def do_bar(s):
print ('bar',s)

for tag, *args in records:
if tag == 'foo':
 print (do_foo(*args))
elif tag == 'bar':
  print (do_bar(*args))


კიდევ ერთი სასარგებლო წევრი collection-და deque რომელიც ზემოთ მიწერია.

CODE

from collections import deque



def search(data, match, history=None):
   que = deque(maxlen=history)
   for lines in data:
       if match in lines:
           yield match, que
       que.append(lines)

with open('test') as file:
   for match, prevlines in search(file, 'python', history=2):
       for matches in prevlines:
           print matches
       print match

ეს 2.7 პითონზეა. უბერავს ჩემი ეკლიპსი. ეკიდება. პარამეტრები არ იცვლება. დამტანჯა. pycharm-იც იგივეა ჩექბოქსები არ მუშაობს, არც დროპდაუნლისტები.

ონლაინ ინტერპერეტს ვიყენებ https://repl.it/languages/python3
და თან ადგილობრივ ეკლიპს როცა რაიმე ფაილი გახსნა მჭრიდება.

შემდეგი ნაწილს ალბათ lambda, filter, map, reduce დავუთმობ.


* * *
რთულია ისე სწავლა თუ არ გაქვს მიზანი დავალება ან რაიმე ამოცანის ამოხსნა არ გაქვს დასახული რადგან გავიწყდება. უმნიშვნელო რაც არის. ამიტომ აქ დავწერ ხელით ყველა კოდს და თან ახსნასაც გავუკეთებ თითოეულ ნაწილს პროგრამის. ასე ჩემს თავსაც ვეხმარები და იქნებ სხვასაც გამოადგეს ვინც ამ წინგის შესავლის პროცესშია და თან მეზარება ხოლმე მაგალითების გაკეთება რაც ყველაზე მნიშვნელოვანია. სანამ 10000-ჯერ არ დაწერ თუნდაც უმნიშვნელო სულელურ პროგრამებს მანამდე ვერ ისწავლი აზროვნებას პროგრამისტულად. თან code completion-ის გარეშე მივეჩვევი პროგრამის უშეცდომოდ წერას. რუსული და ინგლისური ეგრევისწავლე biggrin.gif

CODE


import heapq

class PriorityQue:
   def __init__(self):
       self._index = 0
       self._queue = []

   def push(self, item, priority):
       heapq.heappush(self._queue, (-priority, item))
       self._index += 1
   def pop(self):
       return heapq.heappop(self._queue)

class Item:
   def __init__(self, name):
       self.name = name
   def __repr__(self):
       return 'Item({!r})'.format(self.name)

x = PriorityQue()
x.push(Item('bar'), 2)
x.push(Item('foo'), 54)
x.push(Item('notbar'), 4)
x.push(Item('bar'), 2)

print x.pop()
print x.pop()[-1]


ამ კოდში თავიდან მეორე ქვედა კლასმა __repr__ მეთოდის არსი ზოგადად ახლაც არ მესმის კარგად.
პა დეფოლტ აბრუნებს ობიექტის მისამართს მეხსიერებაში. თუ კლასში ვაუწერთ ხელით მეთოდს და თან ფორმატინგსაც გავუკეთებთ. სხვა ჩაინიკური ახსნა რთულია.
ამ შემთხვევაში ეს კლასი დავჭირდა მე მგონი იმისთვის რომ მერე მეორე კლასს გადავცემ tuple-ს მასში კი არ შეიძლება ჰეშებლე ობიექტების ქონა. რანდგან უცვლელია. immutable.

პირველ ფუნქციას ვაძლევთ tuple-ს (ობიექტი, პრიორიტეტ) კლასის კონსტრუქტორში __init__ში.
ვაკეთებთ ცარიელ list-ს და ინდექსს 0-ით

შემდეგი ფუნქცია heapq.heappop ამატებს ლისტში პრიორიტეტს უარყოფით ნიშნით მინუსით ანუ და თავად ობიექტს. უარყოფითი ნიშნით იმიტომ რომ heapq ქმნის სიას რომელიც დალაგებულია ზრდის მიხედვით. ჩვენ კი გვინდა მაღალი პრიორეტიანი ოქბიეტები თავში მოხვდეს ამიტომ ვუცვლით ნიშანს მინუსით. ყოველ დამატებულ ობიექტზე ვზრდით ინდექს 1-ით რადგან სიაში მივიღოთ ასეთი სტრუქტურა მონაცემების.
priority, index, item
[(11, 2, Item('foo')),
(10, 1, Item('bar')),
(9, 0, Item('bar')) ]


* * *
პირიქით tuple არის ჰეშებლი
https://blog.m157q.tw/posts/2013/06/05/python-mutable-vs-hashable/


Posted by: nv86 4 Nov 2016, 19:40
ლექსიკონში და სეტში გასაღები ყოველთვის არეულადაა. ლისტი ინახავს თანმიმდევრობას. ტუპლიც.
ლექსიკონში ინახება ხოლმე key, value ინფორმაცია. key არის უცვლელი. უნდა იყოს ან string, number, tuple. აი მნიშვნელობაში შეგვიცლია ნებისმიერი კონტერიერი გამოვიყენოთ.
თუ თანმიმდევრობას აქვს მნიშვნელობა ვიყენებთ list-ს თუ არა set-ს.

თუ გვინდა ლექსნიკონის სწრაფი ინიციალიზაცია. ვთქვათ მოგვინდა ახალი ელემენტის დამატება ლექსიკონში. შესაბამისი გასაღები კი არ გვაქვს. ვიყენებთ defaultdict ან setdefault-ს. რომელი ჯობა მაგასაც დავწერ. defaultdict 60%-ით უფრო სწრაფია და კოდიც უფრო მოკლე და გასაგები გამოდის. მაგრამ. მის შემთხვევაში ის ყოველთვის შექმნის არარსებულ გასაღებს მაშინაც კი როდესაც არ გაქვს ის აი მაგალითად.
CODE
from collections import defaultdict
d = defaultdict(list)  
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

for key, value in s:
   d[key].append(value)
   
   
print (d)


დასთვლელად შეგვიძლია defaultdict(int) გამოვიყენოთ.
CODE

c = defaultdict(int)

m = 'missisipi'

for item in m:
c[item] += 1

print (c)



აქ list (default_factory) ქმნის ცარიელ სიას როდესაც ლექსიკონში ინიციალიზაცია ხდება ჯერ არასებული key-ით. იმპლემენტაცია რა და როგორ მუშაობს ჯერ ვერ ვუღრმავდები ეგეთ დონზე და არც მჭრიდება მაგრამ მაინც წავიკითხე.
https://docs.python.org/3/library/collections.html#collections.defaultdict

იგივე შეიძლება გაკეთდეს setdefault-ით.

CODE

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

d = {}

for k, v in s:
d.setdefault(k, []).append(v)

print (d)


ერთი განსხვავება defaultdict-ისგან ის აქვს რომ ნელია ყოველ გამოძახება ახალ ინსტანსს ქმნის წინა მნივნელობით. მაგრამ defaultdict ყოველთვის შემნის მნიშვნელობას არარსებული გასაღებით რომ გამოვიძახოთ მაინც. რაც ზოგჯერ სასურველი არაა. მაგალითად გვინდა ექსეფშენი ამოაგდოს keyError


ზოგჯერ გვინდა ლექსიკონში არსებული გასაღები დალაგებული იყოს მათი შექმნის მიხედვით. OrderedDict იზამს ამას იმის ხარჯზე რომ ლექსიკონის ზომა ორჯერ გაიზრდება. ამიტომ თუ ვაპირებთ 1000000 ხაზი გავუშვათ საკმაოდ გაზრდის მეხსიერების მოხმარებას რადდგან ის ინახავს double linked list-ში თითოეული გასაღების თანმიმდევრობას.

CODE

from collections import OrderedDict

d = OrderedDict()

d['key'] = 'value'
d['second'] = 2
d['third'] = 'third'

for key in d:
   print (key, d[key])



min ფუნცქია და მისი key პარამეტრი და zip რომელიც იღებს 2 მიმდევრობას და აბრუნებს ტუპლ წყვილებს. ზიპავს.

CODE

prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}

minprice = min(zip(prices.values(), prices.keys()))
print (minprice)


შეგვიძლია ასეც ვქნათ

CODE

prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}

minprice = prices[min(prices, key=lambda x: prices[x])]


ხო კიდევ ერთერთი მნიშვნელოვანი და ნაკლებად ცნობილი ფიჩერი keys() მეთოდისა გახლავთ ის რომ მასე შეიძლება ნებისმიერი set ოპერაციის წარმოება. union, differences, intersections. ასე რომ მიღებული key-view ობიექტიდან თავისუფლად შეგვიზლია set-ში გადაყვანის გარეშე გავაკეთოთ ოპერაციები.
ანალოგიურად items-view ობიექტიც.

აი value-view უკვეს ეს აღარ შეუძლია. რადგან ჰეშებლი არ არის ანუ უნიკალური.

კერძოდ set-ის სასარგებლო ოპერაციებში იგულისხმება მაგალითად ეს.

somedict.keys() - otherdict.keys() #აბრუნებს იმ გასაღებს რომელიც მეორეში არ არის...
somedict.keys() & otherdict.keys() #აბრუნებს გასაღებს რომელიც ორივეშია.

ხო უმნიშვნელოვანესი ფიჩა. dictionary comprehension

სინტაქსი მარტივია
d = {key: value for (key, value) in iterable}

და შეგვიძლია set ოპერაცია შევუთავსოთ უფრო სასრგებლო რომ გახდეს.

d = { key: somedict[key] for key in somedict.keys() - {'z', 'w'}}
* * *
ჰეშებლი ნიშნავს უბრალოდ იმას რომ ობიექტს გააჩნია უნიკალური ჰეში რომელიც არ იცვლება ამ ობიექტის არსებობის მანძილზე და მათი ჰეშ მნიშვნელობა იგივე მათი id-ა.
ყველა id(object) აბრუნებს მის უნიკალურ id-ს ანუ იგივე ჰეშ მნიშვნელობას. set-ის წევრები არიან ჰეშებლი მაგრამ სეტის მუტაცია ანუ შეცვლა შეიძლება ამიტომ ისევე როგორც ლისტი და ლექსიკონი ის ვერ იქნება ჰეშებლი.
https://docs.python.org/2/library/sets.html

ეს კოდი ძალიან მაბნევს მაგრამ მისი სრულად გაგება ძალიან სასარგებლო ყოფილა თურმე.
თუ გაანალიზებთ მლთიალანდ აბსოლუტურად ყველა მოქმედებას გაიგებთ ძალიან კარგი იქნება.
ნაწილებად დაყავით და თითოეული მოქმედება შეისწავლეთ. ჩაანალიზება ჭირდება ამ კოდს. მოდით ერთად ჩავაანალიზოთ.
CODE

a = [ {'x':1, 'y':2}, {'x':1, 'y':3}, {'x':1, 'y':2}, {'x':2, 'y':4}]

def dedupe(data, key=None):
   uniq = set()
   for item in data:
       val = item if key is None else key(item)
       if val not in uniq:
           yield item
           uniq.add(val)

print (list(dedupe(a, key = lambda d: (d['x'], d['y']))))


აქ ლამბდა lambda d: (d['x'], d['y']) იმიტომ დაგვჭირდა რომ ის აბრუნებს tuples-ს რადგან პარენტეზში ზის (). ტუპლი კი ჰეშებლია. რადგან თითოეული ელემენტი გადაგვყავს ჰეშებლ ფორმატში შემდეგ სეტში თავისუფლად მოხდება 2 ერთნაირი ელემენტის გაშიფრვა. ამისთვის გვინდა ზუსტად ლამბდა.
ის აბრუნებს კონკრეტულად ლექსიქონიდან ველუებს ანუ (1,3) (2,4) (1,2) იმავე თანმიმდევრობით რაც ლექსიკონშია. ამიტომ გვაქვს თანმიმდევრობაც დაცული და ერთნაირი ელემენტებიც იფილტრება.

ვიცი ძალიან მოსაწყენია და შრომატევადი მაგრამ აბსოლუტურად საჭიროა ყველაფერის ასე ანალუარდ და ანალიზურად ჩავწვდეთ რათა ვისწავლო ელემენტალური რომ რთულზე არ გაგვიჭირდეს ძაან. რთული კი წინ გველის.

Posted by: mikey:) 6 Nov 2016, 20:59
რატო არ უყვართ პითონი საქართველოში ?

Posted by: nv86 6 Nov 2016, 21:11
mikey:)
QUOTE
რატო არ უყვართ პითონი საქართველოში ?

საქართველოში რა უყვართ არ ვიცი მაგრამ მე პირადად ძალიან შემიყვარდა პითონი.
ნუ პირველ რიგში პითონი იმიტომაა პოპულარული რო ითვლება რომ ადვილი სასწავლია 1 ენისთვის.
ამიტომ სკოლებში და უნებში იყენებენ მას.

მე სადაც ვმუშაობდი. მანდ უყარდათ. სახლემწიფო სტურქტურებში ბევრი სოფთის ფრონტი და ალბათ არამარტო ფრონტი პითონზე იყო დაწერილი. მასშტაბი იყო და არის ძალიან დიდი. წარმოუდგენლად დიდი.

არის ხალხი ვინც მუშაობს პითონზე აი ბოლოს აზრში ვიყავი გასაუბრებაზე. ძაან მინდოდა მანდ მუშაობის დაწყება. მაგრამ აზრზე არ ვიყავი 1 კვირის დაწყებული მქონდა სწავლა. მითხრეს რო ცოტა გიან დამიძახებდნენ მაგრამ ამაოდ.

ეს მე რაც ვნახე მხოლოდ. სერიოზული ხალხი იყენებს ფითონს. სერიოზულ დონეზე.

აი კომპანიები რომლებიც იყენებენ. ამ ჩამონათვას აკლია youtube twitter და ბერი რამ კიდე
https://www.safaribooksonline.com/library/view/learning-python-5th/9781449355722/ch01s04.html

https://en.wikipedia.org/wiki/TensorFlow

ეს და კიდევ ბევრი სერიოზული პროექტი ნაწილობრივ პითონზეა
პირველი რასთანაც მქონდა შეხება და ძალიან დიდი შტაბეჭდილება მოახდინა იყოს gentoo portage რომელიც ასევე პითონზეა.
პ.ს ადრე რო დამეწყო ცოტა ეხლა ძალიან მაღალ ლეველზე ვიქნებოდი. მაგრამ ასე მოხდა და საჭიროც ესე იყო ალბათ.

Posted by: mikey:) 6 Nov 2016, 21:32
nv86
კიბატონო, ძაან "გემრიელი" ენაა პითონი, უბრალოდ ჩვენთან ვაკანსიების რაოდენობაა ძაან მცირე, მაგიტომაც ხალხს ურჩევნია ჯავა ან c# ისწავლოს

Posted by: nv86 6 Nov 2016, 21:36
mikey:)
კი ეგრეა. ბევრისგან გამიგია რო C შარპით იწყებენ. მაგალითად არავინ ეტყვის დამწყებს რო წადი ოჯექტივ სი ისწავლე ან გოუ ლენგი ან რუბი.
ჯავა ცუდი კიარაა პროსტა იმენა შტამპოვკაა. მაგაში "იშოვება დიდი ფული" biggrin.gif კუთხით უდგებიან.

Posted by: Turf 8 Nov 2016, 17:33
3 როგორ მიიღეს ვერ გავიგე sad.gif

Qვევითა მგონი გავიგე



Posted by: nv86 8 Nov 2016, 18:30
3 ჯერ 6 არის თვრამეტი

პითონში თუ მიუთითე // გაყოფის ნიშანი მაშინ გაყოფს უნაშთოდ. რასაც floor division ქვია.
მოდულო ანუ % გაყოფს 22-ს 7-ზე და მარტო ნაშთს დაგიბრუნებს. 1-ს.

ეს მესამე ვერსია პითონზე და 2.X როგორც მახსოვს ასეა.

20 გაყოფილი 6-ზე ანუ წილადის ნიშანი თუ არ დაუსვი ყოფს ნაშთის გარეშე და დაგიბრუნებს 3-ს.

ხოლო თუ კი რომელიმე რიცხვს დაუწერ წილადის ნიშანს 22.0 / 7 მიიღებ 3.142857142857143 ანუ ჩვეულებრივ გაყოფს თავის წილადებით და ყველაფრით.

Posted by: RayV 8 Nov 2016, 18:30
Turf
პირველი ბეჭდავს იმ მთელ რიცხვს რამდენჯერაც 6 მოთავსდება 20-ში
მეორე კიდე ნაშთს გეუბნება

Posted by: nv86 8 Nov 2016, 18:48
RayV
Turf
დიახ. კარგია რო დასვი ეს შეკითხვა. რადგან ეგრევე ფუნცქიცების და კლასების წერით დავიწყე თუმცა არ გამოვტოვებ არცერთ ასპექტს ამ თემაში და დაწყებული სტრინებით, გაყოფებიბით დამთავრებული, მეტაპროგრამინგინთ პოლიმორფიზმით, multiple inharitance ყველაფერს მოვედები აბსოლუტურად.

არ შეგეშინდეთ არავის თუ ვერაფერს გებულობთ თავიდან. ყველაფერი თავის ადგილზე დალაგდება. დრო უნდა უბრალოდ, წაკითხვა გააზრება, გაგულვა და ცოტა შრომა და ნებისყოფა.

Posted by: Turf 9 Nov 2016, 18:12
Eგ გავიგე.

Eსეც ამიხსენით რა



................

Posted by: Klopia 9 Nov 2016, 18:32
პითონებო ))) ერთი შეკითხვა მაქვს ასეთი:

შესაძლებელია თუარა რომ დავკრიპტო კოდი ანუ ტექსტი კოდში და გაშვების წინ პროგრამამ ჯერ ენკრიპტი გაუკეთოს და შემდეგ გაუშვას ხაზები (ცოტა გაუგებრად ვწერ ვიცი აი მაგალითი:

a = "testi"
text = 'print (a)'
key = 3

def getTranslatedMessage(mode, text, key):
return translated

ნუ კოდის შუალედები გამოვტოვე მარა ჩავთვალოთ რომ დეკრიპტი გააკეთა "text"ში არსებული სიმბოლოების და მიიღო წინადადება print (a) ანუ print'testi' ეხლა მინდა რომ თვითონ .### ფაილმა დაბეჭდოს ეს "ტესტი" სიტყვა და აღიქვას ბრძანებად და არა ტექსტად. ანუ პრინციპს მიხვდით რაც მინდა რომ ვქნა ? : ((


და საბოლოოდ ჩემი კოდი იქნებოდა ესეთი როჟა

a = "testi"
text = 'xy/asdd/dsgi (g)'
key = 3

def getTranslatedMessage(mode, text, key):
return translated

და ენკრიპტის მერე ტექსტში რაც წერია იქიდან მიიღებდა ბრძანებას პრინტ ა და დაბეჭდავდა ას. ესეთ რამე შესაძლებელია თუ თყუილად მივყევები ამ დინებას ? biggrin.gif

თუ მეტყვით რომ შეუძლებელია მაშნ ბარემ მეორე კითხვა: თუ ვასწავლე ჩემივე პროგრამას როგორ გააკეთოს კომპილირება რაღაც ბძანების და შემდეგ შექმნას ეგზექიუთებლ ფაილი მაშინ ხომ იმუშავებს ? biggrin.gif ვიცი რომ კოსმოსში გავედი ეხლა მარა თეორიულად ხომ შესაძლებელია ?

Posted by: RayV 9 Nov 2016, 22:13
Turf
CODE

x = 5
y = x + 3 (ანუ y = 8)
y = int(str(y) + '2')
(str(y) იგრეკს აქცევს სტრინგად. ანუ იგრეკი გახდება "8". "8" + "2" იქნება "82". int("82") იქნება 82. იმიტომ რომ int() სტრინგს ისევ რიცხვში გადაიყვანს. ანუ y = 82)
print(y) (ამობეჭდავს იგრეკს. output იქნება 82.)

Posted by: Turf 9 Nov 2016, 22:20
RayV
აჰაა გასაგები გახდა

ტელეფონში მიწერია პროგრამა და იქიდან ვსწავლობ

არის რაიმე უფრო ადვილიდან დასაწყები წყარო?

და რა მაინტერესებს

ეს ყველაფერი ვთქვათ გავიგე,მერე?
ანუ ამ კოდებით რა იწერება ის ვერ გავიგე,ეს პრინტები რა შუაშია
ცოტა დავიბენი რა
ჩაინიკი კი არა ტაფა ვარ აქ drug.gif

Posted by: RayV 9 Nov 2016, 22:41
Turf
პრინციპში ტელეფონშიც შეიძლება წერა მარა ტყუილი წვალებაა მანდ

მე გირჩევდი კომპში წერო
არის რამდენიმე ონლაინ კურსი რომელიც შეგიძლია უფასოდ გაიარო
ანდაც აიღო რამე წიგნი და იმას მიყვე

მე მაგალითად ამით გავდივარ: learn python the hard way

ამ ლინკებს გადახედე:
https://github.com/Michael0x2a/curated-programming-resources/blob/master/resources.md#python
https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md#python

ესეც ნახე ქართული რესურსია : http://pythongeo.blogspot.com/2015/03/blog-post_52.html

Posted by: nv86 10 Nov 2016, 02:05
Klopia
გენაცვალე კარგი შეკითხვა დასვი.

საერთოდ არ ხარ კოსმოში კი არა და ძალიან კარგი შეკითხვაა და ხშირად გამოყენებადი რამეა.

სახე რო არ მქონდეს გამდძვრალი დღეს გაუჩერებლივ 6 საათი ვაპროგრამებდი. კოდს რო ვხედავ აბრატკას მაძლევს. ექსეფშენებს მიგდებს... ხვალ ან ზეგ ჩემი პროგრამის კოდსაც დავდებ. 100 ხაზამდე ავედი პირველად თან სულ ჩემით და მანამდე მაგ კითხვას გადავურბინოთ იმედია გვიან არ იქნება (ხვალ ზეგ მაქს მაზეგ gigi.gif)

ისეთი სამარცხვინო და მახინჯი კოდია იმენა დასახვრეტი ვარ. მაგრამ მაინც დავდდებ რო მომავალში ვნახო რა ლოხი ვიყავი user.gif
* * *
RayV

კარგი რესურსია.

წმებო. python cookbook 3 არის ყველაზე კარგი წინგნი intermediate დონის. რომელსაც არ უნდა გაეკაროთ.
სანამ არ გაივლით. learn python the hard way-ს მერე თუ გინდათ. coursera.org-ზე შედით მანდაც არის კარგი უფასო კურსი თან ნიშანს გიწერს ბოლოს და სერტს გაძლევს. პირველივე კვირაში სწავლა რო დავიწყე დავამთავრე ეგ კურსი და 10/10 ავიღე. ანუ ძაან ადვილია და ნერვებს არ დაგაწყვიტავს.
კიდევ დავდვებ ძალიან სასარგებლო ლინკებს ერთიორს.
აი ქუუქბუქი კი შესანიშნავია. რომ მორჩებით ყველაფერს. ეს წინგი უნდა შეისწავლოთ დეტალურად... up.gif

ვა ქართული ბლოკი კარგი იყო გაასწორა. მეც გავაკეთებ მომავალში. ბლოგი სულ მინდოდა მქონოდა smile.gif

აუ ერთი ორასი წიგნია რომლის წაკითხვაც ღირს. ერთი ორასი ბლოგია რომელსაც თვალყური უნდა ადევნო. არის რამოდენიმე "სვეწილა" პითონის სამყაროში ზოგი გუგლიდან რომელსაც თვალყური უნდა ადევნო და მოკლედ აქ მოვუყაროთ თავი ყველაფერს საუკეთესოს.
* * *
ტელეფონში წერას http://repl.it ეს გამიყენეთ რამდენ თავისტკივილს აიცილებს ამით ჩაინიკი ვააბშე დამწყები 0ზე როა არ იცით. ფასდაუდებელია.

სანამ pip და ან easy_install-ში გაერკვევა. სანამ IDE-ს გამართავს. ძალიან ბევრს ყველაფრის სურვილი დაეკარგება. ამიტომ ონლაინ კურსებით დაიწყეთ თავის ინტერპრეტერი რომ აქვს. repl.it-ც გამოიყენეთ და კიდევ არის უამრავი საიტი ონლაინ.

Posted by: Klopia 10 Nov 2016, 15:55
nv86
2kiss.gif 2kiss.gif

შენ გაიხარე მეთქი დარჩა ჩემი კითხვა ხავსმოდებული biggrin.gif

ვაა კოდი დაიდოს HD ში :დ რას წერ ?


გაგვიზიარე ბრატ vik.gif

Posted by: nv86 10 Nov 2016, 16:29
QUOTE
ვაა კოდი დაიდოს HD ში :დ რას წერ ?

სამწუხაროდ კოდი დახურული იქნება. რადგან ფულს ვიღებ. ეხლა მითხრეს დაიხუროსო smile.gif
არაუშავს სამაგიეროდ შენ კითხვასაც გაეცემა პასუხი biggrin.gif და თან კრიპტერის კოდსაც დავდებ.

ანტივირუსებმა რო ვერ დაიჭირონ შენი პროგრამა smile.gif და კოდიც დისასემბლინგით რო ვერ ნახოს სხვამ.

სხვა სოფტები open source და GPL-ში იქნება და github-ზეც დავყრი.

Posted by: Klopia 11 Nov 2016, 19:50
QUOTE (nv86 @ 10 Nov 2016, 16:29 )
QUOTE
ვაა კოდი დაიდოს HD ში :დ რას წერ ?

სამწუხაროდ კოდი დახურული იქნება. რადგან ფულს ვიღებ. ეხლა მითხრეს დაიხუროსო smile.gif
არაუშავს სამაგიეროდ შენ კითხვასაც გაეცემა პასუხი biggrin.gif და თან კრიპტერის კოდსაც დავდებ.

ანტივირუსებმა რო ვერ დაიჭირონ შენი პროგრამა smile.gif და კოდიც დისასემბლინგით რო ვერ ნახოს სხვამ.

სხვა სოფტები open source და GPL-ში იქნება და github-ზეც დავყრი.

ვააა საღოლ biggrin.gifდდ ზუსტად ეგ მინდოდა გამოიცანი :DDD



ამ მეთოდამდე სანამ მივიდოდი ადრე მინდოდა ნაწილებად დამეყო ბინარი კოდი და ტექსტურად შემენახა ვირუსში, და მერე ეს ჩემი ვირუსი ააწყობდა ამ რამოდენიმე ბინარი ტექსტებს ერთად და შექმნიდა ვირუსს და მეთქი ესე უფრო ვერ დაიჭერს მეთქი ანტივირუსი, მერე მოკლედ ძნელი აღმოჩნდა ეგ მეთოდი და ეს დეკრიპტის მეთოდზე დავფიქრდი იქნებ იმუშაოს მეთქი დავწერე კიდევაც კითხვა 7-8 წლის წინ ghackg ზე მარა მერე მოკვდა ეგ ფორუიმ და მეც დავიკიდე პროგრამირება :დ ჰოდა ეხლა უნდა გავიხსენო )))))))

popcorn.gif popcorn.gif popcorn.gif

მაგრა მაინტერესებს დეკრიპტის მეთოდი და მერე ბრძანებად აღმქის მომენტი გელოდები იცოდე biggrin.gif

Posted by: nv86 13 Nov 2016, 04:19
აუუუუუ რროოოოგორ მეზიზღებაააააააააააა ვინდოვსიიიიიიიიიიიიიიიიიიიიიიიი!
მძულს. ერთი პროგრამიდან მეორეზე გადავედი. 2 რდპ სესია მაქვს გახსნილი. გუგლ კლაუდზე ვინდოუსებზე სატესტოდ 1Mბიტ ინტერნეტით.

დავმუღადები მალე, მაგრამ იმდენი საქმე გამომიჩნდა ერთი თვე ალბათ არც ავდგები biggrin.gif
user posted image


მაგრამ ძალიან საინტერესოა და ზამასკიანი პროგრამის წერა. პირველად განვიცადე გუშინ დარსულებული პროგრამისგან მიღებული ექსტაზი.

მანამდე კედევლ ვურტყი თავი 3 საAთი. დაჟე ისე დამგრუზა რო პივით დავთვერი biggrin.gif
მერე მთელი დღE ვკვდებოდი და სამაგამოს გამომივიდა მაინც რაღაც ნაწილი.
მოკლედ facepalm.gif


ტრაკისკენ მიდის საქმე. ამეებს რო დავასრულებ აღარსდროს აღარ ვიმუშავებ სანამ არ ვისწავლი ზეპირად და თხრობით ქუუქბუქს. სანამ არ ვიქნები საშუალო დონის მაინც. მარტო ჩემთვის help.gif თორე ასმაგად ვწვალობ.

Posted by: RayV 14 Nov 2016, 23:21
learn python the hard way-ში კლასებზე მივედი და ცოტა გავჭედე
ისედაც ნელა ვსწავლობ drug.gif

მოკლედ ზოგადი წარმოდგენა კი შემექმნა კლასზე მარა
self და __init__ რა პონტია ვაბშე ვერ ვიგებ mad.gif

Posted by: nv86 15 Nov 2016, 01:14
RayV
მაგაზე მეც მაგრად დავიგურზე თავიდან. მაგრამ უმარტივესია. ეხლა აგიხსნი და მაინც ვერ გაიგებ.
მაგრამ ცოტა ხანში მიხვდები. თან წაიკითხე გზადაგზა. სტაკ ოფერვლოუ არის კანფეტი რამე.
http://stackoverflow.com/questions/625083/python-init-and-self-what-do-they-do

ჩემზე კარგად მოვლენ და პროგრამისტები აგიხსნია. რადგან ყველა პროგრამირების ენაში არის (Self) და
მგონი __init__

ზოგადად init მეთოდი ყველა ენაში არსებობს მსგავსი ჩაშენებული მეთოდი მე როგორც ვიცი ან ზუსტად იგივე მეთოდი. როდესაც ქმნი კლას ობიექტს. (class object)
მაგალითად :
CODE

class MyClass(object):
   def print_hi(self):
       print ('hi from print function of a MyClass instance')
   def __init__(self):
       print ('hello from init')
 

x = MyClass()

print (x)


init არის უბრალოდ ფუნქცია რომელიც კლასის ობიექტის შექმნისას აუცილებლად პირველ რიგში შერულდება ამიტომ ქვია contructor. რამდენი ახალი კლასის ობიექტიც არ უნდა შექმნა ანუ instance ყველაჯერე init შერულდება.

ანუ მაგალითად მიანიჭე რაიმე ცვლადს კლასი. ეხლა შევქმენით კლასის ობიექტი x-ის სახით ანუ მისი ინსტანსი შევქმენი. print (type(x)) რო გაუშვა დაგიწერს. <MyClass object at 0x7f3ba639eb00>
დალშე:

x = MyClass()
შენი აზრით
print (x) რას იზამს? დიახ.რადგან __init__ ფუნქციაში გვაქვს print ('hi from constructor') და პრინტავს მაგას.

აი.
print (x.print_hi())

print_hi -იც ხომ ფუნქციაა? მაგრამ კლასში არსებული ფუნქცია ხო? ანუ მაგ კლასის ობიექტზე მიბმული ფუნქციაა.
პირდაპირ ვერ გამოიძახებ
print_hi() ასე
აუცილებლად MyClass.print_hi() უნდა გამოიძახო.
ამიტომ ხდება self პარამეტრის გადაცემა კლასში არსებულ ფინქციებში. self უბრალოდ უბრალოდ ნიშნავს იმას რომ ფუნქცია მეიბას self ობიექტს სელფ ობიექტი კი ის კლასის ობიქტია რომელშიც ამ ფუნქციას აკეთებ ანუ თავის თავი.

თუ რამე ვერ ავხსენი ან ვერ გაიგე ვაბშე არ დაიგრუზო იმიტორო თავიდან არავის არ ესმის ეს აბსოლუტურად. ვინც გეტყვის რო მე გავიგეო შეუძლია გაიაროს.


ასევე C++-ში არსებობს კიდევ დესტრუქტორი.

smile.gif როდესაც
ვთქვათ წაშლი ჩვენ კლასზე მიბმულ ცვლად x-ს.
და ამ კლასისადმი აღ არსებობს არცერთი reference ანუ არაფერი არსად არ მიმართავს.

ხდება დესტრუქტორში არსებული კოდის გაშვება.

შეგიძლა 'hello i'm dying' ან რამე ჩაწერო შიგ.
* * *
QUOTE

Even though we haven't talked about classes and object orientation in previous chapters, we have worked with classes all the time. In fact, everything is a class in Python. Guido van Rossum has designed the language according to the principle "first-class everything". He wrote: "One of my goals for Python was to make it so that all objects were "first class." By this, I meant that I wanted all objects that could be named in the language (e.g., integers, strings, functions, classes, modules, methods, and so on) to have equal status. That is, they can be assigned to variables, placed in lists, stored in dictionaries, passed as arguments, and so forth." (Blog, The History of Python, February 27, 2009) This means that "everything" is treated the same way, everything is a class: functions and methods are values just like lists, integers or floats. Each of these are instances of their corresponding classes.


ამ ენის შემქნელი წერს. ობექტებზე. ყველაფრის გაკლასება ქონდა მიზნად პითონის შექმნისას.
წოტა წინ ვხტებით მარა ყველაფერის inherit შეგიძლია რადგან ყველაფერი class -ის ტიპის ობიექტია.

თვითონ კლასიც კი 2.4 ვერსიის შემდეგ კლასის ტიპია.

Posted by: RayV 15 Nov 2016, 22:42
nv86
აუ თითქოს გავიგე
რაღაც დონემდე მაინც
biggrin.gif

CODE

class Name(object):
   def __init__(self, text):
       self.text = text

   def say_my_name(self):
       print "Your name is " + self.text

x = Name("RayV")
x.say_my_name()


მგონი ეგაა

Posted by: nv86 16 Nov 2016, 19:24
RayV
კაია... ეგ ადვილი არ გეგონოს. hardway-ა wink.gif მაგრამ კარგია. ამიტომ დავწერე რო ჯერ coursera.org-ით გაიარე პითონის კურსი მეთქი. თუმცა პირდაპირ ეგეც შეიძლება.


კარგი. გავაგრძელებ წერას. ოღონდ ჯერ დამიგროვდეს დასაწერი მე თვითონ სწავლის პროცესში ვარ. უბრალოდ ბოლო კვირა მოვწყდი სხვა საქმეების გამო. მიუხედავად იმისა რო ყველა საკუთარ თავზე ფიქრობს და ფულის შოვნაზე მათ შორის მეც. ოღონდ ვინმეს რამე გამოტყუოს. მოპაროს მიითვისოს და გამიყენოს. ვიღაცამ შეიძლება სიდებილედ მიიჩნიოს აქ რო რამეს ვასწავლი ვინმეს.ისე ვისთვისაც რამე გამიზიარებია და მისწავლია ყოველთვის ეგეთი რეაქცია მოსდევს მარა არაუშავს. მითუმეტეს როცა შენთვითონ არ იცი, მაგრამ რეალურად ყველაზე კარგად ეგრე ისწავლება ნებისმიერი საგანი. ხარისხიანი ჯანსაღი ეკოსისტემა მხოლოდ open source სამყაროშია. გარდა 'უფასო და თავისუფალი კოდისა'. ჯერ ერთი კულტურაა თავისი. მეორე უარმავი ნიჭიერი ადამიანია. მიდგომაა აქვთ სხვანაირი თვითონ dev პროცესისადმი. სწავობ, კოდსაც იყენებ სხვისას. continuous deployment ხომ არსებობს მოდელი და როცა open source project-ში ხარ continuous development პროცესს თვითონ დეველოპერი განიცდის და უკეთესი ხდები. ამიტომ საკუთარი 'გენიალური' პროექტების წერას. ეგოისტობას.ჯობია იდეები ცვალო, კოდი გაცვალო, სხვას შეხედო სხვამაც შეგაფასოს. სხვანაირად უბრალოდ მაიმუნობაა კოდის წერა ჩემი აზრით. code monkey ხარ. ისწავლე კოდის წერა. არ გაქვს სტილი. ზედმეტად რთულ კოდს წერ. ზედმეტად ჭვკიანურს, ზედმეტად დიდს. ნელს არაეფიშენთს და ა.შ. პირველივე სტეპიდან ეს იდეები უნდა გაიზიარო და სანამ ცუდი ჩვევაში გაგიჯდება და სანამ შენი კოდის რევიუს არავინ გააკეთებს პროფესიონალურ დონეზე. PEP- სტანდარებს არ წავიკითხავთ და ა.შ
http://www.extremeprogramming.org/
არცერთ სასწავლო დაწესებულებაში არ გასწავლიან არაფერს გარდა ალგორითმებისა, მათემატიკის და სინტაქსის. რეალურ მუშაობას, იდეებს და ა.შ არავინ გასწავლის.
მერე გადაქექავ ინტერნეტს ვიღაცეებს მოპარავ კოდს, გადააკეთებ გადმოაკეთებ მიოპარავ ერთიორ იდეას ხელფასს გიხდიან და კმაყოფილი ხარ. შედექი კარგი პროგრამისტი ხარ ვსიო.
ეგრე არაა. აქაც არის ეთიკა და სტანდარტები და ჯობს თავიდანვე მიიღო განათლება ყველა კუთხით მარტო კოდის წერა არაა საქმე.
მე არ მაქვს პრეტენზია ვინმეს რამე ვასწავლო აქ. ერთადერთი მიზანი აქაურობისა. ჩემთვის პირდად არის ქუქბუქში მოყვანილი კოდის + ჩემს მიერ პირადად დაწერილი რაიმე პარალელური პროექტის დადება აქაც და გიტჰაბზე. ისტორიული და სხვადასხვა მიზნებისთვის. დავდებ განვიხილავ რაც ვფიქრობ დამეხმარება მე პირადად.

ამიტომ ჩემი თემა არაა ეს ნებისმიერ დამწყებს ვინც წერთ რამეს შეგიძლიათ დაწეროთ აქაც გვასწავოთ რამე. ახალი იდეები გაგვიზიაროთ ან ძველი რომელიც არ ვიცით და ა.შ
ან თუ ვერ ხედავთ აზრზს ეგეც დაიკიდეთ.

Posted by: bianco 8 Dec 2016, 19:38
სალამი მეგობრებო , კარგი ეს თემა რომ წამოწიეთ, მეც მაინტერსებს და ასე რომ ვთქავთ უნდა დავიწყო შესწავლა სტეპ ბაი სთეპ,
იქნებ დამეხმაროთ , კარგი წიგნი სრულიად ნოლიდან იქნებ იცოდეთ , კარგად და დეტალურად რომაა ახსნილი

მადლობა წინასწარ, ველი რჩევებს

Posted by: RayV 25 Dec 2016, 13:23
ვერა და ვერ გავცდი ამ საწყისებს
ხან დრო არ მაქვს
ხან ხასიათი ბლიად facepalm.gif
ხან კიდე ვერ ვიგებ lol.gif


bianco
ნახევარი თვის მერე კი გპასუხობ მარა აქ ნახე წიგნები: https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md#python

Posted by: Irakli2013 25 Dec 2016, 16:27
პითონი ობიექტზე ორიენტირებული პროგრამირების ენაა?

c++ ვსწავლობ და ვაპირებ, რომ თან კიდევ ერთი ენის სწავლს დავიწყო

Posted by: tweety86 29 Dec 2016, 16:19
მოგესალმებით

მოკლედ, მინდა შევისწავლო Python და გთხოვთ დამაკვალიანოთ საიდან დავიწყო ან რომელი ლიტერატურით ჯობია მივყვე და გავარჩიო. ვიდეოგაკვეთილები კი მირჩევნია მაგრამ ვერ ვიპოვე ეგეთი თან როცა დამწყები ხარ რთულია გაარჩიო რომელია უკეთესი

PyCharm დავაყენე და ტყუილად ხომ არა?

მადლობა წინასწარ

Posted by: MrAlex 29 Dec 2016, 16:21
QUOTE (tweety86 @ 29 Dec 2016, 16:19 )
მოგესალმებით

მოკლედ, მინდა შევისწავლო Python და გთხოვთ დამაკვალიანოთ საიდან დავიწყო ან რომელი ლიტერატურით ჯობია მივყვე და გავარჩიო

მადლობა წინასწარ

https://www.codecademy.com/ ვფიქრობ კარგი იქნება დამწყებისთვის

Posted by: tweety86 29 Dec 2016, 16:26
MrAlex
ვნახავ აუცილებლად და თუ რამეა ვიკითხავ

იმ დონეზე მინდა გავერკვე რომ კოდის გარჩევა შემეძლოს. სინტაქსი და ა.შ. ყველაფერი

Posted by: RayV 13 Jan 2017, 22:30
თეორია რაღაც დონეზე ვისწავლე
და პატარა ამოცანების ამოხსნა გადავწყვიტე

codefights.com-ზე პირველი სავარჯიშო გავაკეთე
დიდი არაფერი მაგრამ გულს გაუხარდა user.gif

Posted by: Irakli2013 14 Jan 2017, 14:27
RayV
ამ საიტზე აკეთე ამოცანები http://codeforces.com/

ამოხსნების მიხედვით დაალაგე

Posted by: RayV 14 Jan 2017, 15:27
Irakli2013
უკეთესია ეგ საიტი ?

სადაც ვაკეთებ მომწონს
დამწყებისთვის ნორმალურია



ისე წიგნი რომლითაც გავდიოდი აღარ დავასრულე
მომბეზრდა სულ თეორიის სწავლა
თავიდან ვიფიქრე რამე ფრეიმვორქის სწავლა დამეწყო პირდაპირ
მაგრამ მგონი ჯერ პატარა ამოცანების კეთება ჯობია biggrin.gif

Posted by: Irakli2013 14 Jan 2017, 17:49
RayV
ძალიან კარგი საიტია
ყველა სირთულისძალიან ბევრი ამოცანა
თან 100-ობით ტესტს უტარებს ყველა ამოხსნას

პლიუს ამას შეჯიბრები ტარდება ხშირად

ბევრ ენაზე შეგიძლია დაწერო კოდი

Posted by: nv86 16 Jul 2017, 12:31
CODE

from socket import socket, AF_INET, SOCK_STREAM


ip = 'localhost'
port = 8080

def server():
   sock = socket(AF_INET, SOCK_STREAM)
   sock.bind(('', 8080))
   sock.listen(5)
   while True:
       conn, addr = socket.accept()
       data = conn.recv(1024)
       reply = "Sever got: [%s]" % data
       conn.send(data.encode())

def client(name):
   sock = socket(AF_INET, SOCK_STREAM)
   sock.connect((ip, port))
   sock.send(name.encode())
   reply = sock.recv(1024)
   sock.close()
   print('Client got reply: [%s]' %reply)

if __name__ == '__main__':
   from threading import Thread
   sthread = Thread(target=server)
   sthread.daemon = True
   sthread.start()
   for i in range(5):
       Thread(target=client, args=('client%s'%i,)).start()


connection refused-ზედს რატომ მაძლევს რაუნდა?

line 19 არ მოსწონს.

(()) ჩასმულია 1 არგუმენტი უნდა მარტო და გავატუპლეიე მაინც ეგრე აკეთებს რა დედა მისის უნდა?

Posted by: Dixtosa 16 Jul 2017, 13:43
nv86
socket.accpet
->
sock.accept

Posted by: nv86 16 Jul 2017, 13:55
Dixtosa
გაიხარე.

ნერვებზე მომშალა დილიდან biggrin.gif

გადავედი სხვა რაღაცეებზე. გავარგძელებ ამას ახლა.
მადლობა.

Posted by: Forrest Gump 10 Sep 2017, 16:21
გამარჯობა,
თქვენი დახმარება მჭირდება რა .
List Item
QUOTE
prices = {"banana" : 4,
        "apple" : 2,
        "orange" : 1.5,
        "pear" : 3}
stock = {"banana" : 6,
        "apple" : 0,
        "orange" : 32,
        "pear" : 15,}
for item in prices:
  print item
  print "prices: %s" % prices[item]
  print "stock: %s" % stock[item]  List Item

ამ კოდში რა არის შეცდომა ? Check what your code prints for orange. It doesn't look quite right! ამას მიწერს

Posted by: Dirac 13 Sep 2017, 08:07
Forrest Gump
List Item რა არის? დანარჩენი სწორია.

Posted by: SoloFlyer 6 Oct 2017, 17:22
მოგესალმებით მეგობრებო, ამბიციური გეგმა მაქვს და მინდა ვისწავლო პითონი ონლაინ კურსების მეშვეობით. ამ ეტაპზე უბრალოდ დავფიქსირდები აქ და სამომავლოდ სწავლასთან ერთად ალბათ გამიჩნდება კითხვებიც smile.gif პირველი კითხვა არის ის თუ რომელ საიტს მირჩვდით სასწავლებლად, ინგლისური ვიცი. რაღაც ვარიანტები მაქვს და თქვენი აზრი მაინტერსებს smile.gif მადლობა

Posted by: DARKnodo 6 Oct 2017, 19:20
SoloFlyer
პირველ კურსს უფასოდ გაივლი, დანარჩენ ორ კურსსა და წიგნს ტორენტებზე მიაგნებ:
https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-11
https://www.udemy.com/complete-python-bootcamp/
https://www.udemy.com/python-the-complete-python-developer-course/
https://www.amazon.com/Learning-Python-5th-Mark-Lutz/dp/1449355730/ref=sr_1_1?s=books&ie=UTF8&qid=1507302631&sr=1-1&keywords=Learning+Python%2C+5th+Edition

Posted by: SoloFlyer 9 Oct 2017, 10:32
[b]DARKnodo[/b
მადლობა ჩავუჯდები smile.gif

Posted by: Definitely_Maybe 15 Oct 2017, 21:23
დავფიქსირდები smile.gif

always look on the bright side of life

Posted by: Lilith 17 Oct 2017, 21:23
SoloFlyer
ინგლისური თუ არ გიჭირს MIT-ს ძალიან კარგი კურსი აქვს youtube-ზე ->> https://www.youtube.com/watch?v=ytpJdnlu9ug...8giv4yhgdMGaZNA
და წიგნი ->> http://heather.cs.ucdavis.edu/~matloff/Python/PLN/FastLanePython.pdf
მე ამ ორით ვისწავლე. ნუ პლიუს ბევრი გუგლაობა და კონკრეტულად დასახული ამოცანები

Posted by: INGATO 23 Nov 2017, 11:49
გამარჯობათ. მოკლედ ამოცანაში მჭირდება რომ ორი ასეთი პირობა იყოს დაცული input ის დროს და როგორ უნდა გავაკეთო?

პირველი რომ უეჭველი 8 ციფრი უნდა იყოს შემტოანილი
და ციფრები უნდა იყოს მარტო 0 ან 1


weep.gif weep.gif weep.gif

Posted by: mikh5 14 Jan 2018, 04:58
QUOTE (INGATO @ 23 Nov 2017, 11:49 )
გამარჯობათ. მოკლედ ამოცანაში მჭირდება რომ ორი ასეთი პირობა იყოს დაცული input ის დროს და როგორ უნდა გავაკეთო?

პირველი რომ უეჭველი 8 ციფრი უნდა იყოს შემტოანილი
და ციფრები უნდა იყოს მარტო 0 ან 1


weep.gif  weep.gif  weep.gif

user_input = input('Enter input: ') #vighebt monacems da vsvamt cvladshi

while sum([0 if num == '0' or num == '1' else 1 for num in user_input]) != 0 or (len(user_input) != 8): #tu chveni pirobebi dakmayofilebuli araa
user_input = input('Try again: ') #vighebt monacems xelaxla

while-ს ქვემოთ 4 ადგილით უნდა დაცილება, აქ ვერ სვამს კარგად.

Posted by: ჩაქუჩი 30 Jan 2018, 16:34
დიქშენერიდან როგორ მივიღო ორგანზომილებიანი ( key : value ) ლისტი ?

Posted by: Lilith 1 Feb 2018, 00:26
ჩაქუჩი
ანუ პირობითად გაქვს შემდეგი dict-ი:
CODE

a = {
   'a': 1,
   'b': 2,
   'c': 3,
}

და გსურს მიიღო შემდეგი list-ი
CODE
[{'a': 1}, {'c': 3}, {'b': 2}]


მარტივი one-liner-ი:
CODE
b = [{o: a[o]} for o in a]

smile.gif

Posted by: Dirac 1 Feb 2018, 08:20
ჩაქუჩი
ლამბდას გამოყენება თუ გიყვარს, აგერ
list(map(lambda x, y: {x: y}, a.keys(), a.values()))

ალბათ Lilith-ის გზა უფრო სწრაფია.

Posted by: ჩაქუჩი 8 Feb 2018, 22:03
მეგობრებო დამეხმარეთ , ერთი ფრიად ჩაინიკური კითხვა მაქვს . ამ კოდში * რას ნიშნავს ? გუგლში ეგ სიმბოლო არ იძებნება და სიტყვიერად როგორ იწოდება არ ვიცი user.gif
CODE
return text.capitalize() + '.' * (not text.endswith('.'))

Posted by: robox 8 Feb 2018, 22:13
QUOTE (ჩაქუჩი @ 8 Feb 2018, 22:03 )
მეგობრებო დამეხმარეთ , ერთი ფრიად ჩაინიკური კითხვა მაქვს . ამ კოდში * რას ნიშნავს ? გუგლში ეგ სიმბოლო არ იძებნება და სიტყვიერად როგორ იწოდება არ ვიცი user.gif
CODE
return text.capitalize() + '.' * (not text.endswith('.'))

გამრავლებას ნიშნავს,პითონში შეგიძლია სტრიქონი გაამრავლო რიცხვზე
მაგალითად : print '.' * 4 დაბეჭდავს ოთხცალ წერტილს '....'

Posted by: ჩაქუჩი 8 Feb 2018, 22:25
robox
QUOTE
გამრავლებას ნიშნავს,პითონში შეგიძლია სტრიქონი გაამრავლო რიცხვზე
მაგალითად : print '.' * 4 დაბეჭდავს ოთხცალ წერტილს '....'

True და False - ზეც თუ შეიძლებოდა გამრავლების შესრულება არ ვიცოდი . მადლობა wink.gif .

Posted by: nv86 10 Feb 2018, 23:12
QUOTE
True და False - ზეც თუ შეიძლებოდა გამრავლების შესრულება არ ვიცოდი . მადლობა  .

+ ოპერატორი სტრინგის კონკატენაციასაც ხო აკეთებს. მარტო პითონშია ასე?
ისე ნებისმიერი ჩაშენებული ოპერატორის ოვერლოადის გაკეთების საშუალებას გაძლევს. ეს მომწონს რო ყველაფერს გაცვლევინებს.
ოფიციალური დოკუმენტაცია არის კიდევ ერთი ძალიან კარგი რესურსი.
https://docs.python.org/3/reference/datamodel.html
ოღონდ თავიდანვე არა. ენაროიცი მერე ძალიან მაგარი შპარგალკაა.

Posted by: ჩაქუჩი 27 Apr 2018, 00:02
ცხრილებთან მუშაობისას რომელ ბიბლიოთეკას იყენებთ ? ან რა სახით წერთ და მოქმედებთ მასზე ? რამდენად მოსახერხებელი და სწრაფია SQL-ს გარეშე დამუშავება თუ ვთქვათ ცხრილი 1000 მდე სტრიქონს შეიცავს ?

Posted by: ჩაქუჩი 6 May 2018, 09:42
მეგობრებო , Pandas ლაიბრარიში თუ ერკვევით ვინმე მომწერეთ .

Posted by: Lilith 8 May 2018, 21:59
ჩაქუჩი
რა გაინტერესებს აბა? smile.gif

Posted by: INGATO 8 May 2018, 22:37
http://police.ge/protocol/index.php


მოკლედ მაქედან მაქ წამოსაღები ინფორმაცია

სახელმწიფო ნომერი
დაჯარიმების თარიღი
გადახდის ვადა

მაგალითად ეგ 3 რო იყოს. დასაწერია პარსერი beautifulsoup ით და ვინმეს შეგიძლიათ რო დამეხმაროთ მაგდენს ვერ ვქაჩავ ჯერ თან მაინტერესებს როგორ გაკეთდება smile.gif

Posted by: Lilith 8 May 2018, 23:40
INGATO
არ გჭირდება beautifulsoup და არც რამე განსაკუთრებული პარსერი, json-ში მოდის მონაცემები პირდაპირ:

CODE
import requests

req = requests.get("http://police.ge/protocol/index.php")
body = req.content.decode("utf-8")
cookie = req.headers["Set-Cookie"]
csrf_token = body.split('csrf_token" value="')[1].split('"')[0]

req = requests.post("http://police.ge/protocol/index.php?url=protocols",
                   headers={
                       "Cookie": cookie,
                       "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                       "Host": "police.ge",
                       "Origin": "http://police.ge",
                       "Referer": "http://police.ge/protocol/index.php"
                   },
                   data={"firstResult": "0", "csrf_token": csrf_token})

print(req.json())



Posted by: INGATO 9 May 2018, 11:56
Lilith


მადლობა მარა ძაან ჩაინიკი ვყოფილვარ ვერ მივხვდი უმეტესობა ეხლა უნდა ჩავუჯდე და გავარჩიო ყველა ხაზი




CODE
from bs4 import BeautifulSoup
import requests

web = requests.get('http://police.ge/protocol/index.php')

soup = BeautifulSoup(web.content, "html.parser")


 
a = soup.find_all('table',id='reportTable')
for i in a:
 print(i.text)



მოკლედ ამ გზით მირჩევნია მე უფრო ადვილია მგონი მარა აქ გავიჭედე ვერ გავიგე რისი ბრალია . აშკარად მოაქვს საიტიდან ინფორმაცია ჯარიმებზე ამ გზით. კლასითაც ვცადე 'rowTable' მარა მაინც არ ქნა რა ვუშველო? user.gif

Posted by: ჩაქუჩი 9 May 2018, 13:38
QUOTE (Lilith @ 8 May 2018, 21:59 )
ჩაქუჩი
რა გაინტერესებს აბა? smile.gif

მაქვს ექსელის ორი ცხრილი , რომლებშიც არის ორი სვეტი .
(ერთ-ერთი ასე გამოიყურება)
QUOTE
user posted image



ეს ცხრილები დავაიმპორტე და მივუთითე , რომ ინდექსი არის "Barcode" .
CODE
import pandas as pd
path = r'C:\Users\User\Desktop\New Microsoft Excel Worksheet.xlsx'

df1 = pd.read_excel(path,sheet_name = 'Sheet1',index_col='Barcode')

df2 = pd.read_excel(path,sheet_name = 'Sheet2',index_col='Barcode')

შემდეგ ვცდილობ ეს DataFrame - ები დავაჯოინო :
CODE
df1.join(df2,how = 'left',on = 'Barcode',lsuffix='l',rsuffix='r')

ვიღებ შემდეგ შეცდომას :
CODE
 KeyError: 'Barcode'


P.S. PyQt designer - თან თუ გაქვს შეხება მანდაც მაქვს შეკითხვა . წინასწარ მადლობა დახმარებისთვის . smile.gif

Posted by: Lilith 9 May 2018, 21:28
ჩაქუჩი
QUOTE
df1.join(df2,how = 'left',on = 'Barcode',lsuffix='l',rsuffix='r')

ანუ შენს შემთხვევაში Barcode არ არის ჩვეულებრივი ველის სახელი, არამედ ინდექსის სახელია, ინდექსი არაა ჩვეულებრივი ველი. შესაბამისად join-ში თუ არ მიუთითებ არანაირ პირობას by default დაა-join-ებს ინდექსებით:
CODE
df1.join(df2)


lsuffix და rsuffix არ ვიცი რაში გამოიყენება

QUOTE
P.S. PyQt designer - თან თუ გაქვს შეხება მანდაც მაქვს შეკითხვა . წინასწარ მადლობა დახმარებისთვის . 

არ მაქვს მაგრამ შენ იკითხე და მე თუ ვერა იქნებ სხვა გამოჩნდეს ვისაც ჰქონია შეხება და ის დაგეხმარება


INGATO
QUOTE
აშკარად მოაქვს საიტიდან ინფორმაცია ჯარიმებზე ამ გზით.

ნწუ, ეგრე არ მოაქვს smile.gif შენ საიტს რომ ხსნი რაღაც საბაზისო html-ი იტვირთება და შემდეგ სკრიპტით მოაქვს ეგ მონაცემები API-დან. ანუ მე რაც მაგალითი დავდე ეგ არის ერთადერთი გზა მაგ მონაცემების წამოღების. ისიც თითო ჯერზე 30 მოაქვს და ნაწილ-ნაწილ უნდა წამოიღო firstResult პარამეტრის მნიშვნელობის შეცვლით.

Posted by: ჩაქუჩი 9 May 2018, 23:05
Lilith
მადლობა , გამოვიდა wink.gif .
QUOTE
lsuffix და rsuffix არ ვიცი რაში გამოიყენება

როცა ორ დასაჯოინებელ Dataframe-ში ერთნაირი დასახელების სვეტებია , მაშინ გამოიყენება ეგ სუFიქსები .
PyQt designer - ს რაც შეეხება . გუშინ გადმოვწერე , მშვენიერია რამეა , ზუსტად ის არის რაც მინდა , თუმცა ერთი რამ ვერ გავიგე , პითონის კოდს ვერ ვნახულობ სადაც ღილაკებს ფუნქციონალები უნდა მივაბა . help.gif

Posted by: ჩაქუჩი 13 May 2018, 20:10
CODE
if __name__ == '__main__'

ეს ჩანაწერი შეუძლია ვინმეს ამიხსნას ? არ შემიძლია ეს ინდოელების ტუტორიალები user.gif

Posted by: HedPe 14 May 2018, 01:16
QUOTE (ჩაქუჩი @ 13 May 2018, 20:10 )
CODE
if __name__ == '__main__'

ეს ჩანაწერი შეუძლია ვინმეს ამიხსნას ? არ შემიძლია ეს ინდოელების ტუტორიალები  user.gif

გამარჯობა,

პითონის ინტერპრეტერი ამოწმებს სკრიპტი როგორ არის გაშვებული.
შეიძლება იყოს როგორც მთავარი პროგრამა python3 great.py ან დაიმპორტებული import great მოდული.

პირველ შემთხვევაში მაგ ბლოკში არსებული კოდი შესრულდება,
მეორე შემთხვევაში არ შესრულდება.

დამატებით შეგიძლია აქ წაიკითხო. https://stackoverflow.com/questions/419163/what-does-if-name-main-do

Posted by: NinjaRacer 16 May 2018, 01:58
ყველა ფაილი პითონისთვის არის მოდული. მაგ. ფაილში test.py ჩაწერე რამე კოდი. სტრინგი, კლასი, ფუნქცია არ აქვს მნიშვნელობა. უკვე შეგიძლია import-ით გადაიტანო მთავარ ფაილში ეს კოდი. დაიმპორტებული ფაილის(test.py) კოდი გადავა test1-ის local scope-ში.

ვთქვათ დაიმპორტებულ ფაილში ტუFტაზეა დაწერილი ერთი print სტეითქმენთი მარტო, რომელიც არ გინდა რომ იმპორტისას გაეშვას. შიგ უაზრო კოდია რომელიც არ გინდა შენი მოდულის მომხმარებელმა პროგრამის გაშვებისას დაინახოს.

ამისთვის test ფაილში კოდს აქცევ:
if __name__ == '__main__':
print('hello')
-ში.

python test.py რო გაუშვა პირდაპირ, დაგიწერს hello-ს,
მაგრამ test2.py -ში თუ import test-ით დააიმპორტებ if-ში მოქცეული კოდი აღარ გაეშვება რადგან __main__ სკრიპტი ახლა შენ დაწერილ ფაილშია. დაიმპორტებული აღარაა main შენი გაშვებული პროგრამისთვის.
print(dir()) გაუშვი და ნახავ რა ატრიბუტები აქვს შენს top level მოდულს. ერთერთი ატრიბუტი არის __name__. რომლის ველიუც არის __main__


მხოლოდ იმისთვის არსებობს ეს
if __name__ == '__main__: , რომ შენ მოდულს ვინც დააიმპორტებს პრინთ სტეითმენთები რომელიც სატესტოდ გქონდა არ გაუშვას. მეტი არაფრისთვის არ გამოიყენება.

შეიძლება ძალიან დიდი მოდული იყოს და შიგ ბევრი საჭირო კოდი იყოს გარდა ამ პრინტისა ყველა სხვა კოდი გაეშვება იმპორტით, როცა IF-ს მიადგება ნახავს __name__-ს მოდულის სახელი ერქმევა test1 თუ რაც ქვია დაიმპორტებული მოდულის ფაილს და აღარ გაუშვებს სატესტო კოდს.

ვითომ ადვილია პითონი მაგრამ ამ დროს თუ ჩაუღრმავდები ისეთი რთული და გაუგებარი კოდის დაწერა შეიძლება ძალიან დაგაბნევს.

Posted by: crytek 22 May 2018, 12:28


for x in range(0, 30):
print "ფიქსირ "

Posted by: ჩაქუჩი 2 Jun 2018, 19:17
ვისაც მონაცემთა ბაზებთან გაქვთ შეხება , რა ფუნქციონალური განსხვავებაა sqlite3-სა და pandas-ს შორის ? რომელი ჯობია და რატომ ? Lilith

P.S.
თითქმის ვერაფერი მოვიძიე ამ თემაზე ინტერნეტში , ყველაზე ბირყვული კითხვებიც კი ისერჩება და შეიძლება არასწორ კითხვას ვსვავ ? spy.gif

Posted by: Lilith 4 Jun 2018, 17:49
ჩაქუჩი
ჰმმმ, კარგი შეკითხვაა ნამდვილად. მე პირადად http://www.pymssql.org/en/stable/ მოდულს ვიყენებ SQL-ის ბაზებთან სამუშაოდ. pandas იყენებს https://www.sqlalchemy.org/-ს, რომელიც საკმაოდ საინტერესო პროდუქტი ჩანს და აუცილებლად მოვსინჯავ ცალკე. როგორც უწერიათ კოდიდან შეგიძლია join-ების გაკეთებ, რაც მე პირადად არ მიყვარს, როგორც წესი მირჩევნია ბაზის მხარეს მოვაგვარო ეგ ყველაფერი და კოდში წამოვიღო მხოლოდ ის მონაცემები, რომლებიც მე მჭირდება.

SQLite მხოლოდ SQLite-ის ლოკალურ ბაზებთან მოგცემს მუშაობის საშუალებას. ორივე რომ დაამუღამო (pandas და sqlite3) რა თქმა უნდა კარგია, მაგრამ თუ ასარჩევადაა საქმე მე pandas-გირჩევდი, ეგ SQLAlchemy ნამეტანი კარგი რაღაცა ჩანს up.gif

Posted by: Dirac 8 Jun 2018, 06:12
ჩაქუჩი
პანდას არის ექსელის მსგავსი. მონაცემების სერიოზული მათემატიკური ანალიზი თუ გჭირდება მაშინ არის კარგი. დატა საიენსში იყენებენ.

Posted by: crytek 12 Jun 2018, 18:24
გავაკეთე biggrin.gif






შეცდომა მოხდა. თუ თქვენ არ იცით, თუ როგორ გამოიყენოთ რომელიმე ფუნქცია ან არ იცით, თუ რატომ დაფიქსირდა შეცდომა, მაშინ დააჭირეთ დახმარებას, რომ მიიღოთ დამატებითი ინფორმაცია.

შეცდომა:

You must enter a post

Posted by: ჩაქუჩი 24 Jun 2018, 12:11
Lilith
Dirac
გმადლობთ. Pandas-ზე შევაჩერე არჩევანი, ჩემი მიზნებისთვის სრულიად საკმარისი აღმოჩნდა.
კიდევ ერთი კითხვა, მონაცემთა სერიალიზაციას როგორ აკეთებთ, "pickle" მოდულით ? .py-დან .eхe-ზე რა სახით გადაყვება ეს ფაილები ? pyinstaller-ს ვიყენებ და იმდენ ფაილს ქმნის ვერ ვიგებ რა რა არის. rolleyes.gif

Posted by: Giorgi@R 24 Jun 2018, 15:30
Command Prompt-ში pyinstallerის შემდეგ -F დაურთე, მაინც ბევრ ნაგავს გადმოყრის მაგრამ მთავარი exe ფაილია, რომელიც \dist ში იქნება.

გადაყვანით ბევრად უფრო ნელა მუშაობს

Posted by: MDABI0 2 Jul 2018, 16:29
hi
რა მაინტერესებს

pythons აქვს ვიზუალი? როგორც C sharpს?
აი მაგალითად idleში რომ ვაკეთებ print("hello world") F5ის მერე მიბეჭდავს ტერმინალში,მაგრამ ასეთი რამ შესაძელებალია pythonში?



user posted image

ან სად უნდა მივაგნო,

Posted by: INGATO 2 Jul 2018, 16:49
QUOTE (MDABI0 @ 2 Jul 2018, 16:29 )
hi
რა მაინტერესებს

pythons აქვს ვიზუალი? როგორც C sharpს?
აი მაგალითად idleში რომ ვაკეთებ print("hello world") F5ის მერე მიბეჭდავს ტერმინალში,მაგრამ ასეთი რამ შესაძელებალია pythonში?



user posted image

ან სად უნდა მივაგნო,

კი როგორ არ აქვს ყველაზე მარტივი და სწავლისთვის განკუთვნილია tkinter


https://likegeeks.com/python-gui-examples-tkinter-tutorial/

ამ ლინკზე გადადი და დაამუღამე

Posted by: MDABI0 2 Jul 2018, 17:08
INGATO
დიდი მადლობა
გაიხარე

Posted by: NinjaRacer 21 Aug 2018, 00:41
მოკლედ ძალიან მარტივი passcheker-ის დაწერა დამავალეს და ეს ვქენი.
გუგლში და სტაკზე არ მიძებნია. ჩემით.

ჰოდა გულწრფელად მითხარით ძალიან ბანძია?
რა გავაკეთე მახინჯურად და რას შეცვლიდით თქვენ.


CODE
short = 'aA1'
good = 'Goodone12jjjjjjjjjj'
bad = 'aaaaaaaaaaaaaaaaaaaaaaa'
bad2 = 'aaaaaaaaaaaaaaaaaaaaaaa12'


def checkio(pass):
   hasup = ''
   hasdig = ''
   haslow=''
   if 10 > len(pass) < 64:
       print('short pass')
       return False

   for i in pass:
       if i.islower():
           haslow = True
       elif i.isdigit():
           hasdig = True
       elif i.isupper():
           hasup = True
   for i in (hasup,hasdig,haslow):
       if not i:
           print('i is false')
           return False
   print('good news')
   return True



checkio(short)



ანუ კითხვა იმაშია რომ რა არის proper way ამ მარტივი ბანძი პასჩექერის დაწერის.
ახლა გადათანგული ვარ 5საათიანი ლექციის მერე და მეტი უკეთესი ვერ მოვიფიქრე.



და ამდენი იტერაცია არაა საჭირო მემგონი უფრო მარტივი გზაც უნდა იყოს. ეს მაინტერესებს მე რა. user.gif


view other solutions ტოპ 10 ეული ვნახე და ხმების მიცემაც ქონიათ ჯიგრებს facepalm.gif

რეგექსპებით ვცადე მაგრამ ნერვები მომეშალა და მანუალით ვქენით
აი ტოპ სოლუშენი
CODE

import re

DIGIT_RE = re.compile('\d')
UPPER_CASE_RE = re.compile('[A-Z]')
LOWER_CASE_RE = re.compile('[a-z]')

def checkio(data):
   """
   Return True if password strong and False if not
   
   A password is strong if it contains at least 10 symbols,
   and one digit, one upper case and one lower case letter.
   """
   if len(data) < 10:
       return False
   
   if not DIGIT_RE.search(data):
       return False

   if not UPPER_CASE_RE.search(data):
       return False

   if not LOWER_CASE_RE.search(data):
       return False
       
   return True

if __name__ == '__main__':
   assert checkio('A1213pokl')==False, 'First'
   assert checkio('bAse730onE4')==True, 'Second'
   assert checkio('asasasasasasasaas')==False, 'Third'
   assert checkio('QWERTYqwerty')==False, 'Fourth'
   assert checkio('123456123456')==False, 'Fifth'
   assert checkio('QwErTy911poqqqq')==True, 'Sixth'
   print('All ok')


ისევ ჩემი სოლუშენი ჯობს მემგონი. მახინჯი re ბიბლიოთეკა მეზიზღება და უფრო ნელიცაა მგონი.

ძალიან მაგარი საიტია https://py.checkio.org/

Posted by: execution 21 Aug 2018, 01:16
რა დიდი მნიშვნელობა აქვს იტერაციებს, რამდენად ნელი უნდა იყოს პასჩექერი რომ ზედმეტად ნელად ჩაითვალოს :დ

ალბათ python რახანაა რაც უფრო მარტივად დაწერ მით უკეთესი :დ
any(c.isdigit() for c in pass)
ასეთი ვარიანტი შემხვდა SO ზე და ალბათ ასე გავაკეთებდი

Posted by: NinjaRacer 21 Aug 2018, 01:22
execution
QUOTE
რა დიდი მნიშვნელობა აქვს იტერაციებს, რამდენად ნელი უნდა იყოს პასჩექერი რომ ზედმეტად ნელად ჩაითვალოს :დ


ნელი მკიდია მაშინ C-ში დავწერდი სწრაფი რო მდომოდა.
უბრალოდ არ მინდა გამოვიდს მახინჯი. უნრიდებლი. არ მინდა ვინმემ შეხედოს ჩემს კოდს და ეგრევე ამოიცნოს რა ბანძი ლოხიც ვარ. ვცდილობ უფრო პროფესიონალურ კოდს დავამსგავსო givi.gif რადგან რაღაც თასკები დამავალეს რომელშიც შეიძლება ფულიც გადამიხადონ და არ მინდა რო ბანძი იყოს.
აი სულ ადრე პერლში რო ვწერდი

იტერაციების ნესტინგი იყო 3 ლეველიანი. ინფინიტ ლუპები და ბევრ ეგეთ ძალიან მათხოვრულ შეცდომებს ვუშვებდი. ეს ძალიან მარტივია. არც კლასი არც მემკვიდრეობა არც კომპოზიშენი არაფერი გამომიყენებია და მაგას რო გამოვიყენებ მინდა რომ კოდი იყოს რაც შეიძლება ეფიშენთი, გასაგები, წაკითხვადი დიახაც ლამაზი და ა.შ

რეებზე ვგონკაობ. მართლა გათანგული ვარ. საეღთოდ ვეღარ ვაზროვნებ.

QUOTE
any(c.isdigit() for c in pass)

უი any მართლა აკვდება. თან გენერატორიცაა ეგ. ჯენერატორ კომპრეჰენსიონ მგონი )))

filter-ითაც შეიძლებოდა კიდე...

მადლობა ეგ მინდოდა რო ალტერნატიული ვარიანტები მენახა და შენც რაც დამიწერე ეგეთი სმარტი ვერ ვნახე უცებ ვერსად. სტაკზე რაღაც ###ობები იყო.

Posted by: execution 21 Aug 2018, 01:41
NinjaRacer
:დდდ
ჰო მართალი ხარ, მარტივი კია python ით ყველაფერი მაგრამ python ური, კარგი კოდი რომ წერო კოდი მიჩვევა/გამოცდილება უნდა

Posted by: NinjaRacer 21 Aug 2018, 01:50
execution
მარტივი?

ნო სოუ მაჩ biggrin.gif

აი პროსტა ამ შენძრეულ გადარეული ტიპი ლექციას ვუყურე დღეს და ისე დამაზამსკა
სანამ ამასავით არ მეცონდინება ენა მანამდე ვიტყვი არაფერი არ ვიცი biggrin.gif


ტიპი იმენა წაღმა ხმარობს. განა რამე პითონია მაინც მაგრამ ძალიან ქლევერ სმარტი მასტია და ისეთი შტუკების გაკეთება შეუძლია პითონით და ისეთი დეზლი ვიდეობიაქვს და ისე ღრმად არის ფითონში ჩახედული რო მარტივი სკრიპტინგი ენააო აღარ იტყვი რო ჩაუღრმავდები კარგად )

ძაან დესლია კიდევ ერთხელ უნდა ვუყურო ხვალ :DDDD

Posted by: execution 21 Aug 2018, 02:49
QUOTE (NinjaRacer @ 21 Aug 2018, 01:50 )
execution
მარტივი?

ნო სოუ მაჩ biggrin.gif

აი პროსტა ამ შენძრეულ გადარეული ტიპი ლექციას ვუყურე დღეს და ისე დამაზამსკა
სანამ ამასავით არ მეცონდინება ენა მანამდე ვიტყვი არაფერი არ ვიცი biggrin.gif


ტიპი იმენა წაღმა ხმარობს. განა რამე პითონია მაინც მაგრამ ძალიან ქლევერ სმარტი მასტია და ისეთი შტუკების გაკეთება შეუძლია პითონით და ისეთი დეზლი ვიდეობიაქვს და ისე ღრმად არის ფითონში ჩახედული რო მარტივი სკრიპტინგი ენააო აღარ იტყვი რო ჩაუღრმავდები კარგად )

ძაან დესლია კიდევ ერთხელ უნდა ვუყურო ხვალ :DDDD

15 წუთს ვუყურე და საინტერესო ჩანს
3 საათს ვერ გავქაჩავ :დ წასაკითხი მაინც იყოს

ანუ საწინააღმდეგო არც დამიწერია თუ წაიკითხავ :დ

Posted by: NinjaRacer 21 Aug 2018, 03:06
QUOTE
15 წუთს ვუყურე და საინტერესო ჩანს
3 საათს ვერ გავქაჩავ :დ წასაკითხი მაინც იყოს

ვიცი პროსტა თვითონაც ბაზრობს აი დაახლოებით 1 საათში დაიწყება სრული სიგიჟეო biggrin.gif და მართლაც ეგრეა. მოკლედ უყურე ხვალ და რაც მოხდება შოკში არ ჩაგაგდებს მარა biggrin.gif ძალიან ძალიან მაღალი დონის ვიდეოა. ერთერთი საუკეთესოა რაც პითონზე მინახავს.
ეს ტიპი 25 წელია მგონი ფიტონში აპროგრამებს.

და დარმუნებული ვარ რა დონეზეც არ უნდა იყო რაღაცას ახალს ისწავლი.

მართლა ღირს 3 საათი ყურება და მერე დაჟე გადამეორებაც.

თავიდან ცოტა ბორინგია. პროსტა მერე იწყებს შამანობას და მაგრა ასწორებს. მაგრად ასწორებს როცა ასეთი დონის თავის საქმის პროფესიონალს უყურებ რა.

თან არ ბლატაობს პრაფესორობს ვაჟნობს და ტიპობს. პირიქით ძალიან უბრალოა და ღადაობს თან. მაგრამ ძალიან მაგრა იცის პითონი.

Posted by: Roofus 21 Aug 2018, 03:16
CODE

any(c.isdigit() for c in pass)

up.gif

Posted by: NinjaRacer 21 Aug 2018, 04:00
QUOTE
   Return True if password strong and False if not
   
   A password is strong if it contains at least 10 symbols,
   and one digit, one upper case and one lower case letter.

ესენი იყო მოთხოვნებში
ამიტომ
ეგრე მარტიდავაც არ გამოვიდოდა მაგრამ
any მაინც კარგია რო გაჩითე up.gif

Posted by: iraklikairakli 21 Aug 2018, 10:46
კაია რომ გამოცოცხლდა ეს თენა არ დავიკარგოთ:დ

Posted by: execution 21 Aug 2018, 13:14
QUOTE (NinjaRacer @ 21 Aug 2018, 04:00 )
QUOTE
   Return True if password strong and False if not
   
   A password is strong if it contains at least 10 symbols,
   and one digit, one upper case and one lower case letter.

ესენი იყო მოთხოვნებში
ამიტომ
ეგრე მარტიდავაც არ გამოვიდოდა მაგრამ
any მაინც კარგია რო გაჩითე up.gif

დააჩეინე და ეგაა
CODE
strong = any(c.isdigit() for c in pass) and any(c.isupper() for c in pass) and any(c.islower for c in pass) and len(pass) > 9

Posted by: NinjaRacer 21 Aug 2018, 13:28
execution
არაპითონური გამოდის ეგრე შვრატ

Posted by: execution 21 Aug 2018, 15:02
NinjaRacer
რავი, გრძელი ხაზი რომაა იმიტომ? :დ თუ and..... and..... and.... and.... არ მოგწონს? :დ


ასეთი სიმახინჯე შეიძლება მაშინ, თუ იმუშავებს ის მეორე comprehension ი :დ ფუნქციების list ი :დ

CODE

all(any(x(c) for c in pass) for x in [string.isdigit, string.isupper, string.islower]))) and len(pass) > 9  

* * *
მოკლედ ფაილი რომ გავუშვა python -i ragacfaili.py თუ რომ სრულდება ყველაფერი მერე interactive დ იხსნება


ხოდა რამენაირად შეიძლება რომ თუ რამე condition ი სრულდება კოდში დაასრულოს ყველაფერი და interactive mode ში გადავიდეს?

goto არ აქვს რომ გადავხტე ბოლოში :დდდდ

Posted by: NinjaRacer 21 Aug 2018, 15:38
execution
არ ვიცი არ მახსოვს. ინტერაქტივში გინდა გადახვიდე რაიმე ქონდიშენზე? წიპა break-ი გააკეთოს და ინტერაქტივში ჩაგაგდოს?
sys ან os მოდულში იქნება ეგ.
os._exit გამოიყენე დაასრულებს მგონი მთლიანად პროგრამაას და თუ -i ფლაგით გაქვს გაშვებული სკრიპტი წესით იქ უნდა გაიჩითოს.

არ გინდა https://py.checkio.org/ დარეგისტრირდე და ჩავცუქდეთ და ჩავუყვეთ ?
ცოტა ხანში გავაგრძელებ საღამოს წერას. კარგი ვარჯიში გამოგვივა და თან თემაც მოიხოდება.


პ.ს ჰო Bრად არ მომწონს ბევრი and and and ჩემსავით ტავტოლოგია გამოდის. თვალშიც ცუდად გხვდება. კოდი უნდა იყოს ძალიან მარტივი რო შეხედავ და გასაგები. უნდა მიხვდე რას აკეთებ ტვინის ჭყლეტვის გარეშე gigi.gif

ეს ხუთოსანი ტიპები დოკ სტრინგებს ტენიან ყველგან. ლამაზად ხუთოსნურად.
ანოტიაციებს უწერენ ფუნქციებს. ინლაინ კომენტარებს უკეთებენ და რავი. gigi.gif
რო რაც შეიძლება explicit იყოს

import this გაუშვი ინტერაქტივში და ნახავ
» სპოილერის ნახვისთვის დააწკაპუნეთ აქ «

Posted by: execution 21 Aug 2018, 17:06
QUOTE (NinjaRacer @ 21 Aug 2018, 15:38 )
პ.ს ჰო Bრად არ მომწონს ბევრი and and and  ჩემსავით ტავტოლოგია გამოდის. თვალშიც ცუდად გხვდება. კოდი უნდა იყოს ძალიან მარტივი რო შეხედავ და გასაგები. უნდა მიხვდე რას აკეთებ ტვინის ჭყლეტვის გარეშე  gigi.gif


:დდდდდდ
ეს გამახსენდა ეგრევე
google brain ის ხალხს აჯვამს რა კოდს წერთო :დდდ
PhD ები გაქვთ და შიგ ხო არ გაქვთ რას აკეთებთო :დ

Posted by: NinjaRacer 21 Aug 2018, 18:31
execution
კაკრაზ გუშინ ვარჩევდი ტენზორფლოუს.
very high level მიმოხილვა იყო. placeholder რაარის feed_dict და ეგეთე.
ის გავიგე ერთი რო multidimensional მასივები არის ტენზორები. მერე session.run-ით უშვებ ინიციალიზაციას რო გააკეთებ აი დალშე იმენა ვუდუ იყო ჩემთვის. რა გრაფები და რა ნოუდები. იმენა ჩაინატაუნია. ვერაფერი ვერ გავიგე. scikit learn უნდა იცოდე.

მოკლედ ვაპირებ რო ტენზორფლოუ გამოვიყენო რამეში და დავმუღამდე ცოტა ML-ში.
მინდა სურათები ამოიცნოს. დატასეტები მოძიება და დატრეინინგებაა მანდ მთავარი პრობლემა როგორც გავიგე. onepanel-ით შეიძლება GPU გამოყენება cuda.

მაგრამ ამ ტიპის არ იყოს ცოტა რთულია. ნერვები მომეშალა.
რა მაგრად ეუბნება
what Ain't no country I ever heard of. They speak english in What? givi.gif

Posted by: execution 21 Aug 2018, 18:47
NinjaRacer
:დდ
კერასია მარტივი, მაგრამ გრაფებია მანდაც და დიდი არაფერი არაა რო რამე ეგ გრაფები

ანუ რა ოპერაციები უნდა გაიაროს ტენზორებმა მაგას წერ ფაქტობრივად და tensorflow აგებს თავისით computational graph ს, ეს იმისთვის კეთდება რომ ნახოს რა ოპერაციები კეთდება და მერე gradient ები დათვალოს backpropagation ისთვის

სტატიკური computational graph ები აქვს tensorflow ს და იმიტომ ჭირდება მაგდენი ამბავი
ახლა დაამატეს მგონი დინამიურის support,
ანუ პირდაპირ a და b ტენზორები თუ გაქვს a*b დაწერ და დაგითვლის ეგრევე session.run ების გარეშე

keras ი უფრო მარტივია, მანდაც იგივეს აკეთებ უბრალოდ აბსტრაქციაა უფრო მაღალი ლეველის


pytorch არის საკაიფო რაღაცა, დინამიური გრაფები აქვს, შეგიძლია ნახადუ ცვალო რას აკეთებს ნეთვორქი და 1000 weird რაღაცის გაკეთება შეგიძლია რომელსაც tensorflow ში ვერ გააკეთებ ან ძაან რთული იქნება

research paper ები რაც იდება ML ში pytorch შია მაგის გამო ძალიან ბევრის იმპლემენტაცია დაწერილი
მალე serving საც დაამატებენ რომ სერვერზე api ს პონტში გაუშვა
მაგრამ მაინც research-oriented არის
აქ default ად არის ეგ რომ ტენზორებზე ოპერაციას ატარებ და ეგრევე შედეგს იღებ,
შეგიძლია ჩვეულებრივ ლუპებში გაუშვა ოპერაციები ან რაღაც ლოგიკას დაუქვემდებარო და პითონურად იჩალიჩო რაც გინდა :დ
მერე backward() ს გამოიძახებ და თავისით დათვლის gradient ებს

მე მინდა internet marketing ში გამოვიყენო რამენაირად ML ი, რამე დატასეტები ვერ ვიპოვე რომელიც შეიძლება გამოვიყენო ჯერ
ad arbitrage ან რამე მასეთსი გამოდგება მგონი

Posted by: NinjaRacer 22 Aug 2018, 14:12
აი სამარცხვინო კოდი ძმაუ.
დავალება იყო:
QUOTE

The Most Wanted Letter
Elementary
ZH-HANS UK RU PT-BR PL JA HU FR ES EL DE English
We have prepared a set of Editor's Choice Solutions. You will see them first after you solve the mission. In order to see all other solutions you should change the filter.

You are given a text, which contains different english letters and punctuation symbols. You should find the most frequent letter in the text. The letter returned must be in lower case.
While checking for the most wanted letter, casing does not matter, so for the purpose of your search, "A" == "a". Make sure you do not count punctuation symbols, digits and whitespaces, only letters.


CODE

def checkio(txt: str) -> str:
   cdict = {}
   text = str.lower(txt)
   for i in text:
       if i not in cdict:
           cdict[i] = 1
       else:
           cdict[i] += 1
   sitems = sorted(cdict.items(), key=lambda x: -x[1])
   stup = []
   for i in sitems:
       if i[0].isalpha():
           stup.append(i)

   count = 1
   newitem = ()
   print(stup)
   for i in range(len(stup)):
       if stup[i][1] >= count:
           count = stup[i][1]
       elif stup[i][1] < count:
           stup = (stup[:i])
           break
   alphasorted = sorted(stup,key=lambda x: x[0])



   return alphasorted[0][0]

txt = 'twocc'
print(txt.count(txt))
print(checkio(txt),'return')


ახლა კი ტოპ სოლუშენი 2 ხაზია სულ smile.gif მე არ ვიცოდი ბიბლიოთეკების იმოპრტი რო დაშვებული იყო თორე მეც დავაიმპორტებდი ქაუნტერს და ბევრად ადვილად. გავაკეთებდი. უფრო სწორედ ხელით მინდოდა ყველფერი დაჟე max არ გამოვიყენე smile.gif

CODE

from string import ascii_lowercase as letters
checkio = lambda text: max(letters, key=text.lower().count)

Posted by: Definitely_Maybe 22 Aug 2018, 16:17
execution
NinjaRacer
თქვენი ბოლო მიწერ მოწერა არის სამწუხაროდ ჩემთვის
QUOTE
ჩაინატაუნი
smile.gif

დროის უქონლობის გამო სამწუხაროდ ვერ ვახერხებ ხოლმე პერიოდულად ჩავუჯდე პითონის შესწავლას. ბოლოს 2 თვიანი წყვეტა მქონდა და სულ დამავიწყდა რაც ვიცოდი ფაქტიურად. ადრეც იყო მგონი დასმული ეს კითხვა და რომელ პლატფორმაც, ვიდეო კურსს, წიგნს მირჩევდით პითონისთვის ფაქტიურად 0 იდან დასაწყებად?

Posted by: RedShark 22 Aug 2018, 17:14
Definitely_Maybe
QUOTE
ადრეც იყო მგონი დასმული ეს კითხვა და რომელ პლატფორმაც, ვიდეო კურსს, წიგნს მირჩევდით პითონისთვის ფაქტიურად 0 იდან დასაწყებად?

მაგალითად:

user posted image

https://yadi.sk/d/gekLRGMd3aTu9u

Posted by: NinjaRacer 22 Aug 2018, 17:32
Definitely_Maybe

არაუშავს. ყველაფერი ჩაინატაუნია თავიდან რაც არ უნდა იყოს smile.gif და ამან არ უნდა შეგაშინოს. იმიტომ რომ იმდენად ელემენტალურია ეს ყველაფერი რასაც ვაკეთებთ რო მეტი არ შეიძლება.

მე პირდად დავიწყე ჯერ. coursera-ზე იყო რაღაც კურსი პითონის დამწყებისთვის.
ძალიან მარტივი ელემენტალურ რაღაცეებს ისწავლი მაგით.

მერე learn python და programming python წავიკითხე მაგრამ დროს წაიღებს 1500 გვერდია თითო smile.gif))
რა თანმიმდევრობითაც წერია ეგრე უნდა წაიკითხო და რაც მთავარია გააკეთო ყველაფერი რაც მაგალითებშია და სავარჯიშოებში.
python cookbook-საც აქებენ მაგრამ ბოლომდე არ წამიკითხავს ეგ.

http://greenteapress.com/thinkpython/html/index.html
ამასაც აქებენ მაგრამ არ ვიცი. უფასოა შეგიძლია ეგ წიგნი სხვა ფორმატშიც გადმოწერო. მაგრამ დიდია ძალიან და დროს წაიღებს.

Posted by: Definitely_Maybe 22 Aug 2018, 17:53
RedShark
NinjaRacer
მადლობა. რამოდენიმე წიგნი კიდევ მაქვს ჩაგდებული. დაბ დღე მაქ მალე და ამ წიგნებს დავაბარებ საჩუქრებად smile.gif))

snakify.org -ს გავდიოდი შუაზე ვიყავი მისული.

Posted by: Shredinger 22 Aug 2018, 18:34
ჩემი შეხედულებით Learning Python საშინელი წიგნია დასაწყისისთვის. გასაგებია რომ ნულიდან ხსნის მაგრამ მაინც მგონია რო ძალიან ცუდია. ძაან დიდი წიგნია და დეტალებში შედის და დამწყებთათვის ჩემი აზრით ძაან ტავის ტკივილია.

ჩემი აზრით ყველაზე კარგი გზა სწავლის არის 2 რამ:

1) თეორიული საკითხების შესწავლა: list, tuples, dict, generators და ა.შ
2) და შემდეგ პრაქტიკული ამოცანების კეთება.

P.S ვინც "Hacking" - ის კუთხით გინდათ წაიყვანოთ სწავლა 2 წიგნი უდაოდ უნდა წაიკითხოთ:

1) Black hat python
2) violent python

მეორე ცოტახანია რაც დავიწყე და ზაან მომწონს და ბევრიც აქებს.

Posted by: NinjaRacer 22 Aug 2018, 19:05
QUOTE
ჩემი შეხედულებით Learning Python საშინელი წიგნია დასაწყისისთვის. გასაგებია რომ ნულიდან ხსნის მაგრამ მაინც მგონია რო ძალიან ცუდია. ძაან დიდი წიგნია და დეტალებში შედის და დამწყებთათვის ჩემი აზრით ძაან ტავის ტკივილია.

ჩემი აზრით ყველაზე კარგი გზა სწავლის არის 2 რამ:

1) თეორიული საკითხების შესწავლა: list, tuples, dict, generators და ა.შ
2) და შემდეგ პრაქტიკული ამოცანების კეთება.

P.S ვინც "Hacking" - ის კუთხით გინდათ წაიყვანოთ სწავლა 2 წიგნი უდაოდ უნდა წაიკითხოთ:

1) Black hat python
2) violent python

მეორე ცოტახანია რაც დავიწყე და ზაან მომწონს და ბევრიც აქებს.

Shredinger
გეთამხნები 100% smile.gif
* * *
აქ დარეგისტრირდით მეილინგ ლისტია. ტუტორიალებიც და ვიდეობიცაა და ძალიან კარგი რესურსია !!!!
https://dbader.org/

პიზდეეეეეც
ეს თუ ვინმემ გაიგოს ჩემს გარდა მე ვიყო ბილგეითსი
CODE

sub = 'aaadddddcccxxxxzzzzzzzzz'


def count(text):
   xlist = []
   newlist = []
   for i in range(len(text)-1):
       if text[i] == text[i+1]:
           xlist.append(text[i])
           if i == (len(text)-2):
               xlist.append(text[i])
               if len(newlist) < len(xlist):
                   newlist = xlist
       else:
           xlist.append(text[i])
           if len(newlist) < len(xlist):
               newlist = xlist
           xlist = []
   return len(newlist)


print(count(sub))

დავალება იყო მაქსიმალური სექვეტნალური char-ების მოძებნა
* * *
CODE

from string import ascii_lowercase

def to_encrypt(text, delta):
   ltrs = [ord(x) for x in ascii_lowercase]    ###  ord values of all Alphabet characters
   wordltrs = [ord(i) for i in text]           ###  convert input txt to ord value list
   foundindex = ''
   newindex = ''               ###  wrap around index out of range error
   normwords = []
   for i in wordltrs:
       if i in ltrs:
           foundindex = (ltrs.index(i)+delta)%len(ltrs)
           normwords.append(chr(ltrs[foundindex]))
       else:
           normwords.append(' ')
   return ''.join(normwords)

ასეთუისე სწორად გავაკეთე მაგრამ ბესტ სოლუშენებში რათქმაუნდა უფრო სუფთა ქნეს.
QUOTE
Your mission is to encrypt a secret message (text only, without special chars like "!", "&", "?" etc.) using Caesar cipher where each letter of input text is replaced by another that stands at a fixed distance. For example ("a b c", 3) == "d e f"


CODE

import string

def to_encrypt(text, delta):
   lowercase_chars = string.ascii_lowercase
   result = ''
   
   for current_char in text:
       if current_char in lowercase_chars:
           index = lowercase_chars.find(current_char) + delta
           index = index % len(lowercase_chars)
           result += lowercase_chars[index]
       else:
           result += current_char
           
   return result


Posted by: crytek 23 Aug 2018, 15:17
დანესტილ დიქშენერში ლისტის ელემენტებს როგორ მივწვდე
მაგ:
CODE

users = {
   'levan': {
       'first': 'levan',
       'last': ['bla lba','bla bla'],
       'bday': 1992,
   },
}

Posted by: Shredinger 23 Aug 2018, 16:14
QUOTE (crytek @ 23 Aug 2018, 15:17 )
დანესტილ დიქშენერში ლისტის ელემენტებს როგორ მივწვდე
მაგ:
CODE

users = {
   'levan': {
       'first': 'levan',
       'last': ['bla lba','bla bla'],
       'bday': 1992,
   },
}

users["levan"]["last"][0]

------------------

Posted by: crytek 24 Aug 2018, 16:16
Shredinger
ასე გადავწყვიტე მადლობა 2kiss.gif

crash course ამ წიგნს გავდივარ მე მომწონს საკაიფოდაა ყველაფერი ლაკონურად
ნესტედ ლისტებში დავიბენი დანარჩენი მიდის ლიწინით biggrin.gif
ვების მხარეს ვაფირებ ფლასკს მივაწვე რო მოვრჩევი რეკომენდაციები როგორი იქნება თქვენგან ბიჭებო ?
CODE

   if type(user_info['last']) == list:
       full_name += (" " + str(' '.join(user_info['last']) ))

Posted by: NinjaRacer 24 Aug 2018, 16:47
crytek
ჩემი რეკომენდაცია იქნება. რამე მარტივი წიგნი და მერე აუცილებლად ერთი 200 სავარჯიშო მაინც გააკეთე ამ გვერდზე:

https://py.checkio.org
ყველასთვის ასე ჯობია სწავლა. ყველა წიგნი რომც წიაკითხო პითონზე მაინც ნუბი იქნები სანამ პრაქტიკაში არ ჩააბეტონებ შენ ცოდნას.

ჯერ კლასებამდე არ მისულხარ? smile.gif არცაა საჭირო მომენტ. isinstance გამოიყენე და ბევრად უკეთესი იქნება.

CODE

if isinstance(user_info['last'], list):
      full_name += (" " + str(' '.join(user_info['last']) ))

. თუ რაღაცა False-არის არ გადავა სტეითმენტზე.
ქონდიშენის დასაწერად სტეიტმენტიც საკამარისია ან == ან >,< აღარ უნდა.
თუმცა საერთოდ არანაირი პრობლემა არაა როგორც გაქვს გაკეთებული მშვენიერია. მაგრამ მგონი ასე ჯობია. isinstance კარგი რამეა. ასეთი შემთხვევებში ეგ უნდა გამოიყენო.მაგისთვისაა ზუსტად შექმნილი.

CODE

lst =['gentoer', 1, 'hey', list(['gent', 'hi'])]


if isinstance(lst[3], list):
   print('list')
else:
   print('notlist')

Posted by: crytek 24 Aug 2018, 17:00
NinjaRacer
მომწონს კარგი წიგნია მივყვები უპრობლემოთ ჩავაბუქმარქე ეგ საიტი და შევუდგები asap
გავარჩევ კლასებს და isinstance-ს . საინტერესოა https://www.youtube.com/watch?v=o9pEzgHorH0&t=3s რო მოვრჩები მაგ ორივეს მერე ვნახავ ამ ვიდეოს biggrin.gif

Posted by: NinjaRacer 24 Aug 2018, 17:13
crytek
ჩაყევი ჩაყევი smile.gif)) ძალიან მაგარი ენაა.
კლასებიც უნდა წერო.
მეტაკლასებიც gigi.gif დესკრიპტორებიც, პროპერთიებიც, დეკორატორებიც, მემკვიდრეობაც უნდა გამოიყენო და multiple inheritance-იც. ოღონდ გახსოვდეს თავიდანაა მხოლოდ ჩაინატაუნი. მერე ეს ყველაფერი ჩამოთვლილი რაც რთული გეგონა და თითქმის ყველა ტუტორიალში და ვიდეოში წერენ არ გაეკაროთო თურმე ელემენტალურია biggrin.gif

ნუ უსმენ მაგათ. ეგენი ამბობენ რომ ბუუუუუუა კლასები და მეტაკლასები, რთულიაა და არ გინდათ. არ გაეკაროთ smile.gif

სწორია. ეგ თავიდანვე არ გინდა.
ჯერ მარტივით დაიწყე. დამიჯერე იმენად მარტივია ენაა პითონი რომ ცოტა ხანში უკვე ფრეიმვორკების წერას დაიწყებ.

ძალიან რილაქსდ ენაა შეგიძლია functi0nal programmings მიაწვე კლასები ვაბშე დაიკიდო არც OOP გამოიყენო არავინ გაძალებს არც მაგას და წერო შენს გემოზე))).
პროცედურული ენები ქვიათ მაგათ. ექსპრეშენებს არ იყენებ და მთელი კოდი დეკლარირებული სთეითმენთებია.

https://en.wikipedia.org/wiki/Programming_paradigm

აი რამდენი პარადიგმაა და პითონში მემგონი ნებისმიერი პარადიგმა გამოიენო biggrin.gif
QUOTE
Python is an interpreted high-level programming language for general-purpose programming. ... It supports multiple programming paradigms, including object-oriented, imperative, functi0nal and procedural, and has a large and ...


დაიკიდე თუ ვერ ხვდები კლასები როგორ და როდის უნდა გამოიყენო. იმიტომ რომ მიხვალ იქამდე და არაფერი საოცრება მაგაში არაა შენით დარწმუნდები.

Posted by: crytek 24 Aug 2018, 17:17
NinjaRacer
ვახ მოტივაცია მომეცი biggrin.gif
მთელი სვლით წინ !
violent python-იც ხო არ განვიხილო სამომავლოთ lol.gif

Posted by: NinjaRacer 24 Aug 2018, 17:22
QUOTE
violent python-

ძალიან ზოგადია.

მაგით იმენა ჰაკერი ვერ გახდები smile.gif (ანუ ბოსტონის ფილიალში ვერ შეხვალ fingal.gif)
უბრალოდ ცოტათი დაგეხმარება ფითონის სწავლაში. მაგრამ ეგ წიგნი უფრო გაყიდვადი რო იყოს იმიტომაა დაწერილი.სახელიც ეგეთიაქვს შერჩეული. როგორც ასეთი მანდედ ბევრს ვერაფერს მიიღებ ვერცერთი კუთხით.
დაჟე ვაიფაისაც ვერ გამიტეხავ)) პითონის სწავლის კუთხითაც დიდი არაფერი. ცუდი არაა ნამდვილად ღირს წაკითხვა ოღონდ როგორც საფლემენთარი და არა რამე ფუნდამენტური.

სასარგებლო რამაა უდაოდ. მაგრამ ზოგადიიიი biggrin.gif შემეცნებითი. ცოდნის გასაღრმავებელი და ა.შ.
მიზნა თუ ჰაკერობა გაქვს დასახული.
მაშინ ეგ არ გამოგადგება მხოლოდ.

ერმალო მაღრაძის ვიდეობს ჩაუჯექი პირდაპირ lol.gif wink.gif

Posted by: Shredinger 24 Aug 2018, 19:10
NinjaRacer
არც მითქვამს ჰაკერი რომ გახდები მაგის წაკითხვის მერე smile.gif და ზოგადად არ ვთვლი, რომ რაიმეს წაკითხვის მერე ხდები ჰაკერი ეს ნელა კეთებადი პროცესია და ჯამში სხვადასხვა წყაროებიდან და ვარჯიშით უახლოვდები იმ მდგომარეობას რასაც ხალხი "ჰაკერს" ეძახის. "ჰაკერი" როგორც ახლანდელი გაგებით და როგორც ძველი გაგებით.

ეს წიგნი პითონის სწავლისთვის არ გამოდგება. ეს წიგნი არის იმათთვის ვინც დაკავებულია ე.წ "Penetration Test" - ით. და ვისაც სჭირდება "handbook" ასე ვთქვათ, უცებ რომ გადახედოს და წარმოდგენა შეექმნას. მთავარი ღირებულება, რომელიც ამ წიგნში მე დავინახე ის არის, რომ არ არის დამწყების დაწერილი, საკმაოდ გამოცდილი პროფესიონალი წერს და არ არის ბავშვის დაწერილი. გამოცდილების გაზიარებაა რაც მთავარია და თეორია არ არის. გამოცდილებას კი დამწყები ვერ გაგიზიარებს. ასევე მომწონს ის, რომ ყოველი სკრიპტის წინ აყოლებს Real World მაგალითებს სადაც მსგავსი სკრიპტი საკმაოდ წარმატებით იყო გამოყენებული.

რათქმაუნდა "ჰაკერი" ვერ გახდები ვერც ამით და ვერც კევინ მიტნიკი რომ გეჯდეს 1 წელი smile.gif
ეს წიგნი არის აგური, რომელსაც დაადებ აგურს "ჰაკერობაში".

და ვერ დაგეთანხმები, რომ ზოგადია, იმიტომ რომ ძალიან კონკრეტულად საუბრობს სად და როგორც შეგიძლია გამოიყენო შეძენილი ცოდნა. აი ზოგადი შეგილია დაარქვა Learning python - ს smile.gif

P.S checkio challenge - ები მომეწონა ძაან და ვუზივარ მაგეებს. კიდე ზემოთ დალინკეს 1 და ისიც ძაან მომეწონა, ყოველდღე რაღაც tips ები რო გეგზავნება მეილზე.
P.S.S violent python ნუ წაიკითხავთ თუ თქვენი გზა penetration testing - ის სფეროზე არ გადის. დროის კარგვა იქნება smile.gif
ასევე ითქმის Blackhat python - ზეც + Gray Hat python - ზეც რომელიც უფრო advanced დონეა წინა 2 წიგნთან შედარებით და ძაან სპეციფიკურია.

Posted by: NinjaRacer 24 Aug 2018, 22:57
Shredinger
ეგ შენი მისამართით არც მითქვამს smile.gif
მართალი ხარ სპეციალიზირებულია. კერძოდ forensics და pentesting კუთხით.

კი დაჰაკავ ამ წიგნის საშუალებით + შოდანით ათეულობით დაუცველ სერვერს. მერე რა.

დაჰაკავ ძირითადად honeypot-ებს. კარგად დაცულ სისტემებს ერთი წიგნით უკაცრავად ვერ.

მაგალითად ეს კოდი.
https://github.com/JackStouffer/Violent-Python/blob/master/forensic/skype_metadata.py
ტრივიალურია. სასარგებლო მაგრამ ტრივიალური. ეგრე პითონზე უამრავი წიგნია დაწერილი.
python for sysadmins, python for machine learning და მილიონი სხვა კიდე. რეალურად რომც გინდოდეს სანამ წიგნს დაწერ. სანამ რედაქტირება გაუკეთდება. დაბეჭდავენ და ა.შ წლები გადის რომც გინდოდეს არაჯენერალ წიგნს ვერ დაწერ. ჰოდა არის ბევრი უაზრო არაფრისმომცემი წიგნიც. რომლის მიზანია რაც შეიძლება დიდი იყოს და კარგად გაიყიდოს და ა.შ

ეს კოდი:
https://github.com/JackStouffer/Violent-Python/blob/master/attack/ftp_buffer_overflow.py
აი დავაყენე vsftpd ახლა სერვერზე და ვერაფერიც ვერ უქნა. გასაგებია რო 0 day ექსპლოიტს არავინ დაგიდებს წიგნში. რომც უნდოდეთ მაინც ვერ მოახერხებენ. დამწყებისთვის და არა security ტიპისთვის ეგ წიგნი უბრალოდ დროის ხარჯვაა. მეტი არაფერი.

კიდევ ssh brute force და ეგეთი GENERAL ტულზებია. ამიტომ ვამბობ ზოგადია. თორე ძალიანაც ძვირფასი წიგნია. განსაკუთრებით pentester-ისთვის შეიძლება აუცილებელი წასაკითხიც იყოს და უძვირფასესი.

წიგნებზე თუ მიდგა ეგრე. მე გირჩევთ python cookbooks. david beasly არის ავტორი. ვიდეო რო დავდე წინაგვერდზე 3 საათიანი ეგაა დევიდ ბიზლი. მაგ ტიპის ფანი ვარ ლამის უკვე smile.gif მაგარი პითონისტია.. უბრალოდ არ ვურჩიე იმიტომ რომ რთულია ცოტა დამწყებისთვის. მე დავიწყე და შუაგზაზე მივატოვე. აი იმდონემდე რო მივალ რო handbook-ად დამჭირდება მერე გავაგრძელებ. ჯერ მეც ნუბი ვარ და სავარჯიშომაქვს დახუია.

და ზოგადად მგონია რომ მარტივი წიგნით უნდა დაიწყო. მერე წერო დავალებები checkio-ს მსგავს საიტებზე ძალიან ბევრი და მხოლოდ ამის მერე გადახვიდე რთულ რაღაცეებზე.
ადრე იყო learn python the hard way ვებსაიტი და შიგ 50 დავალება იყო გასაკთებელი. საუკეთესო რესურსი იყო დამწყებისთვის, მაგრამ წეღან შევედი და რაღაც არ დამხვდა. ფასიანი გახდა მგონი. ან მე ვერ ვიპოვე.

ყველა წიგნი რომ წაიკითხო მართლა რაც პიტონზეა და პრაქტიკა არ გქონდეს და არ ვარჯიშობდე მაინც არაფერი გეცოდინება. მაგას ვამბობ რა მე.


ბლიად რამდენი ვწერე. ზედმეტი ყავის ბრალია.. იზვინით.



.
QUOTE
ასევე ითქმის Blackhat python - ზეც + Gray Hat python - ზეც რომელიც უფრო advanced დონეა წინა 2 წიგნთან შედარებით და ძაან სპეციფიკურია.


აი ეს იქნება საინტერესო მაგარი smile.gif
up.gif
რისფექთ ჩემგან დიდი. უმაგრესი და ყველაზე რთული და საინტერესო სფეროა IT-ში მგონი და მაღალანაზღაურებადი და დიდი მოთხოვნაა. პროფები ცოტა.

Posted by: crytek 24 Aug 2018, 23:03
Shredinger
[img]https://media.giphy.com/media/mfdqzC02ASo5q/giphy.gif[/img]

Posted by: Shredinger 24 Aug 2018, 23:35
NinjaRacer
ჰოო ყავაზე მეც ეგრე მომდის რო შევყვები აღარ ვჩერდები biggrin.gif

კი წიგნი სანამ დაიწერება სანამ დაიბეჭდება და გამოიცემა დრო გადის და ტექნიკა იხვეწება. მაგრამ ყველა კარგი თუნდაც ძველი წიგნიდან შეგიძლია მაგალითი აიღო. აი მაგალითად vsftp - რომ ახსენე: https://github.com/JackStouffer/Violent-Python/blob/master/attack/ftp_buffer_overflow.py

ეს არ იმუშავებს მართალი ხარ 100% . იმიტომ, რომ ჩაშენებული "shellcode" აქვს და ამ დროს შენი shellcode - თი უნდა ჩაანაცვლო სხვანაირად არ გამოვა. თან მაგას პლიუს ეგ წიგნი ხო ძველია და ახლა უკვე ბევრი protection ები არის გამოსული ASLR,DEP და მისთანები და ეგ კოდი არ იმუშავებს სხვა რაღაცეების გამოც მაგრამ ეგ კოდი ძალიან კარგი საწყისია რომ მაგაზე დააშენო მერე ცოდნა. მთავარია საფუძველში სწორი იყოს თუნდაც ძველი იყოს იმ ძველზე შეგიძლია up to date თემები დაამატო.

https://github.com/JackStouffer/Violent-Python/blob/master/forensic/skype_metadata.py ესეც ტრივიალურია კი მაგრამ ვისთვის როგორ smile.gif

ნუ ხო 0day - ებს არ ჩადებს არავინ მაგრამ საწყისი საფუძვლების ჩადებას წინ არაფერი უდგას, მთავარია იდეურად სწორი იყოს. თუ იდეურად სწორი არაა და მახინჯურადაა გადმოცემული მერე მაგაზე up to date ცოდნის დაშენება რთულია

QUOTE
კიდევ ssh brute force და ეგეთი GENERAL ტულზებია. ამიტომ ვამბობ ზოგადია. თორე ძალიანაც ძვირფასი წიგნია. განსაკუთრებით pentester-ისთვის შეიძლება აუცილებელი წასაკითხიც იყოს და უძვირფასესი.

არსებული თულზები brute-force სთვის რაც არის hydra,medusa,ncrack და ა.შ ესენი მაინც საბოლოო ჯამში იმას გაძლევენ რაც აქვს ჩაშენებული კოდში, მართალია ბევრი option - ები აქვთ არგუმენტებად მაგრამ შეიძლება ისეთ სიტუაციაში მოხვდე, რომ შენით მოგიწიოს დაწერა კოდის.

მაგალითად სერვერზე ხარ და არ შეგიძლია თულზების გადაწერა არც დაინსტალირება გაქვს მარტო პითონი. დაწერ ssh brute force - ს smile.gif ტრივიალურია მაგრამ ხომ გამოსადეგია.

მოკლედ არაა ცუდი წიგნი biggrin.gif
შეილება მარტივია მაგრამ იდეაში advanced ხალხისთვის მაინც არაა.

QUOTE
ვიდეო რო დავდე წინაგვერდზე 3 საათიანი

ვნახე და გიჟია ტიპი biggrin.gif ნინძაა.

QUOTE
ეგ შენი მისამართით არც მითქვამს

ხო რო დავწერე პოსტი მერე დავაფიქსირე მარა ხო აღარ წავშლიდი იმხელა პოსტს biggrin.gif

P.S გენიელურობა სიმარტივეშია - ეს გამახსენდა smile.gif

Posted by: NinjaRacer 24 Aug 2018, 23:47
Shredinger
მოკლედ არ მოკლათ ეს თემა checkio შევუტიოთ.მსგავსი საიტებიც გავაძროთ. მერე team შევქმნათ და ბოსტონის ფილიას დედა მოვუდღნათ.

ბოსტონის ფილიას თუ არა კლავიატურას მაინც გატეხავს ეს ჩემისა facepalm.gif

ბიზლის ფანკლუბიც გავხსნათ.
აქა ფლეიმი ან off the wall საუბრებიც მოსულა. ლიჟბი არ მოკლათ.

მაგ ტიპის hacking the public data -ც კაეა up.gif იუთუბზე ვუყურე ეგეც ძალიან მაგარი იყო.

Posted by: Shredinger 24 Aug 2018, 23:56
NinjaRacer
QUOTE
რისფექთ ჩემგან დიდი. უმაგრესი და ყველაზე რთული და საინტერესო სფეროა IT-ში მგონი და მაღალანაზღაურებადი და დიდი მოთხოვნაა. პროფები ცოტა.

ეს გამომრჩა. გაიხარე smile.gif
მაგარი საინტერესოა და მაგარ მუღამს ვუჭერ, პითონის სწავლაც მაგიტომ გადავწყვიტე რომ security სფეროში ყველაზე მეტად პითონს ხმარობენ. რა წიგნიც არუნდა ავიღო ყველგან პითონია ნახსენები.

Posted by: iraklikairakli 27 Aug 2018, 08:58
სალამი მეგობრებო smile.gif ძაალიან გამიხარდა რომ გააქტიურდა ეს თემა,1 წელია პითონს ვსწავლობ ნუ დამწყებს დონეს გავცდი და იმედია დაგეხმარებით რამეში smile.gif
* * *
http://www.jobs.ge/eng/187304/ ვისაც შესაბამუსი გამოცდილება გაქვთ არუნდა იყოს ცუდი

Posted by: NinjaRacer 30 Aug 2018, 17:20
iraklikairakli
ძალიან კარგია up.gif ერთად ამოვქაჩოთ.

ძალიან ბანძი ვარ მტელი დღე ვასხავდი ტვინს ამას. ძლივს დავწერე. არადა რა მარტივია.
CODE

def check_connection(sequence, pattern,match):
   newseq = sequence
   sequence = []
   for i in newseq:
       sequence.append(i.split('-'))
   print('starting to scan if ', pattern, 'and', match, 'are related...')
   print('scanning neightboors for:\t', pattern)
   sequence = list(map(lambda x: (x[0], x[1]), sequence))
   visited = {match}
   future = set()
   while not visited==future:
       for i in range(len(sequence)):
           if match in sequence[i]:
               matchindex = (sequence[i].index(match)-1)
               frend =(sequence[i][matchindex])
               future.add(frend)
               visited.add(match)
       if future-visited:
           for i in future-visited:
               match = i
               print(i,'last i')
           print(future,'last future')
           print(visited, 'last visited')
       else:
           return pattern in future



print(check_connection(("dr101-mr99", "mr99-out00", "dr101-out00", "scout1-scout2", "scout3-scout1", "scout1-scout4",
                 "scout4-sscout", "sscout-super",), "scout2", "scout3"))


ჯერ არ მანახებენ best solutionები ნახევარი საათი უნდა გავიდეს. მაგრამ მე მგონი რენდომში ვიპოვე საუკეთესო.

CODE

def check_connection(network, first, second):
   
   member1,member2 = set(),set([first])
   
   while 1:
       for i in member2:
           for j in network:
               if (j.find(i) != -1):
                   member1.update((j.split("-")))
                     
       if member1 == member2:
           break
       
       else:
           member2.update(member1)
               
   return True if second in member1 else False
   





არაუშავს. ზატო სეტ ოპერაციები ოდნავ დავამუღამე.

Posted by: iraklikairakli 30 Aug 2018, 21:10
QUOTE (NinjaRacer @ 30 Aug 2018, 17:20 )
iraklikairakli
ძალიან კარგია up.gif ერთად ამოვქაჩოთ.

ძალიან ბანძი ვარ მტელი დღე ვასხავდი ტვინს ამას. ძლივს დავწერე. არადა რა მარტივია.
CODE

def check_connection(sequence, pattern,match):
   newseq = sequence
   sequence = []
   for i in newseq:
       sequence.append(i.split('-'))
   print('starting to scan if ', pattern, 'and', match, 'are related...')
   print('scanning neightboors for:\t', pattern)
   sequence = list(map(lambda x: (x[0], x[1]), sequence))
   visited = {match}
   future = set()
   while not visited==future:
       for i in range(len(sequence)):
           if match in sequence[i]:
               matchindex = (sequence[i].index(match)-1)
               frend =(sequence[i][matchindex])
               future.add(frend)
               visited.add(match)
       if future-visited:
           for i in future-visited:
               match = i
               print(i,'last i')
           print(future,'last future')
           print(visited, 'last visited')
       else:
           return pattern in future



print(check_connection(("dr101-mr99", "mr99-out00", "dr101-out00", "scout1-scout2", "scout3-scout1", "scout1-scout4",
                 "scout4-sscout", "sscout-super",), "scout2", "scout3"))


ჯერ არ მანახებენ best solutionები ნახევარი საათი უნდა გავიდეს. მაგრამ მე მგონი რენდომში ვიპოვე საუკეთესო.

CODE

def check_connection(network, first, second):
   
   member1,member2 = set(),set([first])
   
   while 1:
       for i in member2:
           for j in network:
               if (j.find(i) != -1):
                   member1.update((j.split("-")))
                     
       if member1 == member2:
           break
       
       else:
           member2.update(member1)
               
   return True if second in member1 else False
   





არაუშავს. ზატო სეტ ოპერაციები ოდნავ დავამუღამე.

სად აკეთებთ დავალებებს ანუ რამე კონკრეტული საიტია ?

Posted by: NinjaRacer 31 Aug 2018, 01:21
https://py.checkio.org/

და უამრავია კიდევ ასეთი და ამაზე უკეთესიც. ეს რაც ამომიგდო გუგლა ეგაა.
* * *
დღეს ჯანგოს დღეა.

2 აპლიკაცია მაქვს რომელიც უნდა ავწიო.
რამე იდეები ხო არ გაქვთ კიდევ სად შეიძლება checkio-ს მსგავსი რამე სავარჯიშოები იყოს.
ან დასაწყისისთვის რაუნდა გავაკეთო.

უკვე გავერკვიე სტრუქტურაში. პითონის ცონდა დამეხმარა.
როცა მოდელს ვქმნი ვიცი რომ ობიექტი იქმენა Model მეტაკლასისგან. ნეიმსპეისები რა არის ეგეც მეხმარება და ზოგადად ძალიან მარტივი და გასაგები გახდა ამ ფრეიმვორკის მუშაობის მექანიზმი.

მოკლედ მინდა სავარჯიშოები რამე საიტი ან წიგნი ან აპლიკაცია. იდეები გაქვთ რამე?
* * *
და რომელი IDE გამოვიყენო. pycharm-ს არ აქვს მხარდაჭერა. პროვერსიას მთხოვს.

Posted by: iraklikairakli 2 Sep 2018, 00:43
QUOTE (NinjaRacer @ 31 Aug 2018, 01:21 )
https://py.checkio.org/

და უამრავია კიდევ ასეთი და ამაზე უკეთესიც. ეს რაც ამომიგდო გუგლა ეგაა.
* * *
დღეს ჯანგოს დღეა.

2 აპლიკაცია მაქვს რომელიც უნდა ავწიო.
რამე იდეები ხო არ გაქვთ კიდევ სად შეიძლება checkio-ს მსგავსი რამე სავარჯიშოები იყოს.
ან დასაწყისისთვის რაუნდა გავაკეთო.

უკვე გავერკვიე სტრუქტურაში. პითონის ცონდა დამეხმარა.
როცა მოდელს ვქმნი ვიცი რომ ობიექტი იქმენა Model მეტაკლასისგან. ნეიმსპეისები რა არის ეგეც მეხმარება და ზოგადად ძალიან მარტივი და გასაგები გახდა ამ ფრეიმვორკის მუშაობის მექანიზმი.

მოკლედ მინდა სავარჯიშოები რამე საიტი ან წიგნი ან აპლიკაცია. იდეები გაქვთ რამე?
* * *
და რომელი IDE გამოვიყენო. pycharm-ს არ აქვს მხარდაჭერა. პროვერსიას მთხოვს.

ესენი ცადე პიჩარმშის აქტივაციისას სერვერით http://xidea.online/servers.html

Posted by: NinjaRacer 2 Sep 2018, 23:50
QUOTE
Over six years ago, in December 1989, I was looking for a "hobby" programming project that would keep me occupied during the week around Christmas. My office (a government-run research lab in Amsterdam) would be closed, but I had a home computer, and not much else on my hands. I decided to write an interpreter for the new scr1pting language I had been thinking about lately: a descendant of ABC that would appeal to Unix/C hackers. I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python's Flying Circus).

Today, I can safely say that Python has changed my life. I have moved to a different continent. I spend my working days developing large systems in Python, when I'm not hacking on Python or answering Python-related email. There are Python T-shirts, workshops, mailing lists, a newsgroup, and now a book. Frankly, my only unfulfilled wish is to have my picture on the front page of the New York Times.

-- Guido van Rossum, Foreword for "Programming Python", Reston, VA, May 1996


iraklikairakli
დიდი მადლობა.
ვიყიდი საერთოდ ან ვიმზე გადავალ.
VIM-ში code completion არის თუ იცით?


* * *
execution
ეს წიგნი გაქვენ?
https://www.amazon.com/Hands-Machine-Learning-Scikit-Learn-TensorFlow-ebook/dp/B06XNKV5TS/ref=mt_kindle?_encoding=UTF8&me=&qid=

Posted by: RedShark 3 Sep 2018, 09:29
QUOTE (NinjaRacer)
რომელი IDE გამოვიყენო. pycharm-ს არ აქვს მხარდაჭერა. პროვერსიას მთხოვს.


Posted by: execution 3 Sep 2018, 11:00
QUOTE (NinjaRacer @ 2 Sep 2018, 23:50 )

execution
ეს წიგნი გაქვენ?
https://www.amazon.com/Hands-Machine-Learning-Scikit-Learn-TensorFlow-ebook/dp/B06XNKV5TS/ref=mt_kindle?_encoding=UTF8&me=&qid=

აქ უნდა იყოს

http://libgen.io/search.php?req=Hands-On+Machine+Learning+&lg_topic=libgen&open=0&view=simple&res=25&phrase=1&column=def

ინჟინერიაზე/ფრეიმვორკებზე არ მაქვს წიგნები, ცოტა მეტი თეორია თუ გაინტერესებს სადღაც უნდა მქონდეს ერთად ჩაყრილი კაი წიგნები

Posted by: NinjaRacer 3 Sep 2018, 16:08
execution
QUOTE
ცოტა მეტი თეორია თუ გაინტერესებს სადღაც უნდა მქონდეს ერთად ჩაყრილი კაი წიგნები

კარგი იქნება თუ დამაკვალიანებ რა გზაც გაიარე. რა სავარჯიშოები აკეთე კურსები და წიგნები up.gif
მადლობა.

Posted by: execution 3 Sep 2018, 17:53
QUOTE (NinjaRacer @ 3 Sep 2018, 16:08 )
execution
QUOTE
ცოტა მეტი თეორია თუ გაინტერესებს სადღაც უნდა მქონდეს ერთად ჩაყრილი კაი წიგნები

კარგი იქნება თუ დამაკვალიანებ რა გზაც გაიარე. რა სავარჯიშოები აკეთე კურსები და წიგნები up.gif
მადლობა.

მე დიდი გზა არ გამივლია მარა რაც გავიარე გავარკვიე დავპოსტავ გვიან ცოტა, სახლში რომ მივალ
ისე t-90 მგონი მათემატიკოსია და თან ამ ამბებშია, ჰოდა ჩემზე უკეთესი რჩევა ექნება


* * *
NinjaRacer
დამავიწყდა გუშინ დამეპოსტა :დ

ესეიგი, თავიდან წიგბებით დაწყებას არ გირჩევ,

უფრო მარტივად და სწრაფად რომ გაერკვე რაღაცეებში https://www.coursera.org/specializations/deep-learning
ამ სპეციალიზაციას გირჩევ

პირველ კურსში ხელით ითვლის ყველაფერს, gradient ებს და ამბებს და numpy ში აკეთებ ქსელის იმპლემენტაციას, პრაქტიკაში არ დაგჭირდება ეგ მაგრამ რა როგორ მუშაობს framework ების აბსტრაქციებს მიღმა მაგის გაგებაში დაგეხმარება(ნუ იქ ცოტა სხვანაირად ხდება რაღაცეები, მაგრამ ზოგად პროცესზე მაქვს საუბარი

ერთ კვირიანი trial ისას თუ დახურავ რომელიმე კურსებს, სერთიფიკატსაც აიღებ, მე პირველი კურსი მოვასწარი და ავიღე.

ამეებში რომ გაერკვევი მერერავიცი, შენზეა დამოკიდებული, რისი სწავლა გაინტერესებს,
უფრო მაგრამ https://www.amazon.com/gp/aw/cr/0387310738/ref=mw_dp_cr
ეს კარგი ზოგადი წიგნია, pattern recognition ზე და ml ზე, კლასიკაა თითქმის :დ
https://www.google.ge/url?sa=t&source=web&rct=j&url=http://users.isr.ist.utl.pt/~wurmd/Livros/school/Bishop%2520-%2520Pattern%2520Recognition%2520And%2520Machine%2520Learning%2520-%2520Springer%2520%25202006.pdf&ved=2ahUKEwjDweqI16DdAhXNaFAKHcbLBYoQFjAAegQIABAB&usg=AOvVaw2j0fMGPbFfpcwGzqELtiRU


ხო, რამე კონკრეტული არქიტექტურა თუ გაინტერესებს ნეირონული ქსელის მაშინ ორიგინალი research paper ის პოვნა და გარჩევა არის ყველაზე კარგი მეთოდი, უბრალოდ რთულია ( ჩემთვის არის ყოველ შემთხვევაში)

Ian Goodfellow ის deep learning წიგნიც კარგია,
https://github.com/janishar/mit-deep-learning-book-pdf
და
ამის კითხვა არ დამიწყია მაგრამ აქებენ:
https://www.google.ge/search?ei=6x-OW47oGYrawAKvxIko&q=esl+machine+learning&gs_ssp=eJzj4tLP1TfIM03JMjQyYAQAFo0DFQ&oq=ESL+mach&gs_l=mobile-gws-wiz-serp.1.0.46j0i22i30l2j0i22i10i30j0i22i30.99340.108554..110273...8.0..0.153.1585.0j12......0....1.......5..0j35i39j0i131i67j46i67j0i67j0i20i263j46i20i263.PEKLK9RQFM4
პდფ იც მანდვეა შედეგებში



ჰო, მათემატიკას რაც შეეხება წრფივი ალგებრა და კალკულუსი გჭირდება მინიმუმ, მატრიცების ოპერაციები და წარმოებულების/გრადიენტების დათვლისთვის. ოღონდ ჰევრი არაფერი გჭირდება, მაგის გარეშეც გახვალ იმ coursers კურსებს მაგრამ თუ იცი ძალიან დიდი პლიუსია


Posted by: iraklikairakli 5 Sep 2018, 11:01
მეგობრებო სელენიუმის ბიბლოეთეკაში ხომ ვერ დამეხმარებით?
ანუ ჩვეულებრივად ინსტაზეგავდივარ ავტორიაზციას ვაძლევ უნიკალურ ლინკს შედის ამ ლინკზე და მინდა რომ რაც კი "ფოლლოვ" არის გამოსული ეკრანზე ყველას დააკლილოს driver_find_by_tag_name,driver_find_by_name,driver_find_by_id ვცადე ყველა თითქომის მარა ვერ ვერ ვქენი და ხომ ვერ დამეხმარებით?

Posted by: RexxaR 5 Sep 2018, 12:10
QUOTE (iraklikairakli @ 5 Sep 2018, 11:01 )
მეგობრებო სელენიუმის ბიბლოეთეკაში ხომ ვერ დამეხმარებით?
ანუ ჩვეულებრივად ინსტაზეგავდივარ ავტორიაზციას ვაძლევ უნიკალურ ლინკს შედის ამ ლინკზე და მინდა რომ რაც კი "ფოლლოვ" არის გამოსული ეკრანზე ყველას დააკლილოს driver_find_by_tag_name,driver_find_by_name,driver_find_by_id ვცადე ყველა თითქომის მარა ვერ ვერ ვქენი და ხომ ვერ დამეხმარებით?

დარწმუნებული ხარ რომ არ გეშლება სინტაქსი? რა ერორს გიწერს?

https://selenium-python.readthedocs.io/locating-elements.html

პირველ რიგში ის ელემენტი დაათარგეთე რომელიც შეიცავს შენთვის საინტერესო ბმულებს (მთელი სორსიდან რომ არ ამოხიკო ბმულები)

მაგალითად თუ <div id='someid'>...</div>-შია ბმულები

CODE

links_container = driver.find_element_by_id('someid')
hrefs = links_container.find_elements_by_tag_name('href')
for item in hrefs:
   print(item.get_attribute("href"))



თუ არადა რეჯექსით ქენი

driver.page_source აიღე, მო რაც კი რამ href ელემენტია ამოაექსთრაქთე ლინკები რომელიც ფოლოუ პატერნში ჯდება

base url შეიძლება დაგჭირდეს თავში

თუ არადა დადე კოდი და დაგიბრუნებ გასწორებულს

იმასაც დააკვირდი აიფრეიმი ხომ არაა გამოყენებული სადაც შენთვის საინტერესო ბმულებია
page_source ნახე მოკლედ და თუ იქნება მანდ შენი ბმულები ესეიგი შენ უშვებ სასდღაც შეცდომას, თუ არ ჩანს სორსში, მაშინ აიფრეიმის ჩატვირთვას უნდა დაელოდოს ბრაუზერი, ამისთვის wait-ები უნდა გამოიყენო. აქვს ეგეთი მეთოდიც >>> wait.until >>> frame_to_be_available_and_switch_to_it

Posted by: iraklikairakli 5 Sep 2018, 13:15
გავასწორე გაიხარე ერთი პრობლემა მაქვს როცა გახსნინს Follower box-ს ზოგი უკვე ფოლლოუ არის ნუ მაგას ახტება ჩვეულებრიცად მაგრამ მერე ფოლლოუზე არ მიდის :/ https://repl.it/repls/QuietLightgreenLists
ცუდად ავხსენი მგონი :/
* * *
ანუ რომ დაინახავს ისეთ ვიღაცას ვინც გამოწერილი აყავს უკვე ერთხელ აჭერს ფოლლოს და ჩერდება მანამდე ჩვეულებრივად მუშაობს

Posted by: NinjaRacer 5 Sep 2018, 15:46
iraklikairakli
try -შო რომ გაქვს ჩასმული იმიტომ ხომ არა?

აცადა აბა იქნებ თავისით ქნას? შეიძლება მაგ ლაიბრერის იმპლემენტაცია ექსეფშენზე იყოს დამოკიდებული?
როგორც iter მეთოდია დამოკიდებული stopIteration-ზეა ეგრე.
ან ექსეფშენს მაინც ამოგოგიდებს.

execution
აუ გაიხარე.
ადრე რაღაც კურსებში ავიღე პითონის სერტიფიკატი.
ვნახავ კიდე თუ შეიძლება

Posted by: iraklikairakli 5 Sep 2018, 16:02
QUOTE (NinjaRacer @ 5 Sep 2018, 15:46 )
iraklikairakli
try -შო რომ გაქვს ჩასმული იმიტომ ხომ არა?

აცადა აბა იქნებ თავისით ქნას? შეიძლება მაგ ლაიბრერის იმპლემენტაცია ექსეფშენზე იყოს დამოკიდებული?
როგორც iter მეთოდია დამოკიდებული stopIteration-ზეა ეგრე.
ან ექსეფშენს მაინც ამოგოგიდებს.

execution
აუ გაიხარე.
ადრე რაღაც კურსებში ავიღე პითონის სერტიფიკატი.
ვნახავ კიდე თუ შეიძლება

რავი ვერ ვხვდები :/ ტითქოს იფი არ მუშაობს.თრაი არაფერ შუაშია :/

Posted by: NinjaRacer 5 Sep 2018, 17:22
iraklikairakli
მე გავუშვი და იმუშავა.
მერე თუ ლინუქსზე ლოკალურად უშვებ სკრიპტს
/etc/hosts -ში
უნდა წაშალო
::1 localhost
თორე არ იმუშავებს.
კიდევ ერორს თუ დაგიწერს URL-ები გაასწორე.
გახსნა ქრომი დალოგინდა.
პროსტა ინსტაგრამმა we detected an unusual login-ო და ეგრევე გამომაგდო.

იმეილი მოგივა შენ გმაილზე სადაც ეწერება დეტალები. დააჭირე მე ვიყავიო თორე დამბლოკავენ biggrin.gif

try მოვხსენი ვნახე რა ექსეფშენები იყო და გავასწორე.
* * *
მაგ კოდს ერთხელ შეიყვან და მერე იმუშავებს.

ქუქიებით დალოგინდება მაგის მერე
ოღონდ კოდი უნდა გადააკეთო ცოტა.
bypass_suspicious_attempt=True
False-ზე უნდა გადაიყვანო

Posted by: iraklikairakli 5 Sep 2018, 18:23
QUOTE (NinjaRacer @ 5 Sep 2018, 17:22 )
iraklikairakli
მე გავუშვი და იმუშავა.
მერე თუ ლინუქსზე ლოკალურად უშვებ სკრიპტს
/etc/hosts -ში
უნდა წაშალო
::1 localhost
თორე არ იმუშავებს.
კიდევ ერორს თუ დაგიწერს URL-ები გაასწორე.
გახსნა ქრომი დალოგინდა.
პროსტა ინსტაგრამმა we detected an unusual login-ო და ეგრევე გამომაგდო.

იმეილი მოგივა შენ გმაილზე სადაც ეწერება დეტალები. დააჭირე მე ვიყავიო თორე დამბლოკავენ biggrin.gif

try მოვხსენი ვნახე რა ექსეფშენები იყო და გავასწორე.
* * *
მაგ კოდს ერთხელ შეიყვან და მერე იმუშავებს.

ქუქიებით დალოგინდება მაგის მერე
ოღონდ კოდი უნდა გადააკეთო ცოტა.
bypass_suspicious_attempt=True
False-ზე უნდა გადაიყვანო

მივეცი დასტრუს :დდ
შეგიძლია კოდი მანახო რომელმა იმუშავა ზუსტად?

Posted by: NinjaRacer 5 Sep 2018, 18:45
iraklikairakli
CODE

from selenium import webdriver
import time

getdriver = ("https://www.instagram.com/accounts/login/")
driver = webdriver.Chrome('./chromedriver')
driver.get(getdriver)


def Registration(username,password):
   driver.find_element_by_xpath("//input[@name='username']").send_keys(username)
   driver.find_element_by_xpath("//input[@name='password']").send_keys(password)
def click():
   driver.find_element_by_xpath("//button[contains(.,'Log in')]").click()
   time.sleep(5)
   driver.get("https://www.instagram.com/programmer.me/followers/")
   driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/header/section/ul/li[2]/a').click()
   time.sleep(1)
def follow():

     for i in range(2, 100):
         time.sleep(2)
         like = driver.find_element_by_css_selector('ul li:nth-of-type({}) button'.format(i)).click()
         print('Click Follow ')
         if driver.find_element_by_css_selector('body > div:nth-child(15) > div > div > div.j6cq2 > ul > div > li:nth-child(3) > div > div.BW116 > button'):
             driver.find_element_by_xpath('/html/body/div[4]/div/div/div/div[3]/button[2]').click()
             print("Unfollow Canceling")



Registration("programmer___humor","Irakli123321")
click()
follow()



ჩემთან პითონ 2.7 ვერსიაზე მუშაობს. სხვა ვერსიებზეც იმუშავებს უბრალოდ დამეზარა ჯენტუზე კომპილირება. სხვა ვერსიებზე selenium-ს და chromedriver-ს დაააყენებ და იმუშავებს.
repl.it-ზე არა. რადგან ქრომ დრაივერი აყენია თუარა მაგათ ვირტუალ გარემოში. ხ.ი.ზ
repl.it-ზე არამგონია იმუშავოს რადგან driver = webdriver.Chrome('./chromedriver')
ამ ხაზზე უნდა მიუთითო https://chromedriver.storage.googleapis.com/index.html?path=2.41/
ამ დრაივერის მდებარეობა. ზიპშია და უნდა დააექსტრაქტო.
ან უბრალოდ python_path ნახე რა დირექტორიებს შეიცავს და ერთერთში ჩააგდე ეგ binary ფაილი. chromedriver ქვია და მერე სკრიპტში webdriver.Chrome()-იც ეყოფა. თუარადა webdriver.Chrome('/home/sadac/gaqvs/eg/faili')

თუ ლინუქსზე ხარ არ დაგავიწყდეს ზემოთ რაც დავწერე /etc/hosts-ფაილზე ეგ გააკეთე თორე გაგტანჯავს biggrin.gif
მომენტ ვინდოუსზეც გაგტანჯავს და არ იმუშავებს. C:\Windows\System32\drivers\etc\hosts საქაღალდეში გდია ვინდოუსზე ჰოსტ ფაილი და როგორც ადმინისტრატორმა უნდა დაარედაქტირო.
სელენიუმის ზაიობია და რატომ არ არის ბაგლისტში ვერ ვხვდები.

პ.ს
ინსტაგრამის სქრეფინგისთვის instaPy -ც სცადე. კარგი რამეა.

Posted by: iraklikairakli 5 Sep 2018, 19:44
QUOTE (NinjaRacer @ 5 Sep 2018, 18:45 )
iraklikairakli
CODE

from selenium import webdriver
import time

getdriver = ("https://www.instagram.com/accounts/login/")
driver = webdriver.Chrome('./chromedriver')
driver.get(getdriver)


def Registration(username,password):
   driver.find_element_by_xpath("//input[@name='username']").send_keys(username)
   driver.find_element_by_xpath("//input[@name='password']").send_keys(password)
def click():
   driver.find_element_by_xpath("//button[contains(.,'Log in')]").click()
   time.sleep(5)
   driver.get("https://www.instagram.com/programmer.me/followers/")
   driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/header/section/ul/li[2]/a').click()
   time.sleep(1)
def follow():

     for i in range(2, 100):
         time.sleep(2)
         like = driver.find_element_by_css_selector('ul li:nth-of-type({}) button'.format(i)).click()
         print('Click Follow ')
         if driver.find_element_by_css_selector('body > div:nth-child(15) > div > div > div.j6cq2 > ul > div > li:nth-child(3) > div > div.BW116 > button'):
             driver.find_element_by_xpath('/html/body/div[4]/div/div/div/div[3]/button[2]').click()
             print("Unfollow Canceling")



Registration("programmer___humor","Irakli123321")
click()
follow()



ჩემთან პითონ 2.7 ვერსიაზე მუშაობს. სხვა ვერსიებზეც იმუშავებს უბრალოდ დამეზარა ჯენტუზე კომპილირება. სხვა ვერსიებზე selenium-ს და chromedriver-ს დაააყენებ და იმუშავებს.
repl.it-ზე არა. რადგან ქრომ დრაივერი აყენია თუარა მაგათ ვირტუალ გარემოში. ხ.ი.ზ
repl.it-ზე არამგონია იმუშავოს რადგან driver = webdriver.Chrome('./chromedriver')
ამ ხაზზე უნდა მიუთითო https://chromedriver.storage.googleapis.com/index.html?path=2.41/
ამ დრაივერის მდებარეობა. ზიპშია და უნდა დააექსტრაქტო.
ან უბრალოდ python_path ნახე რა დირექტორიებს შეიცავს და ერთერთში ჩააგდე ეგ binary ფაილი. chromedriver ქვია და მერე სკრიპტში webdriver.Chrome()-იც ეყოფა. თუარადა webdriver.Chrome('/home/sadac/gaqvs/eg/faili')

თუ ლინუქსზე ხარ არ დაგავიწყდეს ზემოთ რაც დავწერე /etc/hosts-ფაილზე ეგ გააკეთე თორე გაგტანჯავს biggrin.gif
მომენტ ვინდოუსზეც გაგტანჯავს და არ იმუშავებს. C:\Windows\System32\drivers\etc\hosts საქაღალდეში გდია ვინდოუსზე ჰოსტ ფაილი და როგორც ადმინისტრატორმა უნდა დაარედაქტირო.
სელენიუმის ზაიობია და რატომ არ არის ბაგლისტში ვერ ვხვდები.

პ.ს
ინსტაგრამის სქრეფინგისთვის instaPy -ც სცადე. კარგი რამეა.

გაიხარე მადლობა ვცდი მაგ ბიბლიოთეკასაც

Posted by: NinjaRacer 5 Sep 2018, 20:01
iraklikairakli
რო აამუშავებ ფანჯარა ამოხტება და „ბექს'' დააჭირე რო წინა გვერდზე გადავიდეს რომ კოდი გაიგზავნო იმელზე.

Posted by: iraklikairakli 5 Sep 2018, 23:52
QUOTE (NinjaRacer @ 5 Sep 2018, 20:01 )
iraklikairakli
რო აამუშავებ ფანჯარა ამოხტება და „ბექს'' დააჭირე რო წინა გვერდზე გადავიდეს რომ კოდი გაიგზავნო იმელზე.

ლინუქსზე ::1 ლოკალ ჰოსტ როგორი ამოშალეე ?

Posted by: NinjaRacer 6 Sep 2018, 00:49
QUOTE
ლინუქსზე ::1 ლოკალ ჰოსტ როგორი ამოშალეე ?

#
დაუსვი წინ მაგ ხაზს და ეგ არის?

მაგას თუ მეკითხები :|

/etc/hosts ფაილში.

Posted by: iraklikairakli 6 Sep 2018, 10:23
QUOTE (NinjaRacer @ 6 Sep 2018, 00:49 )
QUOTE
ლინუქსზე ::1 ლოკალ ჰოსტ როგორი ამოშალეე ?

#
დაუსვი წინ მაგ ხაზს და ეგ არის?

მაგას თუ მეკითხები :|

/etc/hosts ფაილში.

ჰო ვიცი მარა ეტკ ფაილი ვაფშე ცარიელია და მიტო გამიკვირდა

Posted by: execution 6 Sep 2018, 10:59
QUOTE (iraklikairakli @ 6 Sep 2018, 10:23 )
QUOTE (NinjaRacer @ 6 Sep 2018, 00:49 )
QUOTE
ლინუქსზე ::1 ლოკალ ჰოსტ როგორი ამოშალეე ?

#
დაუსვი წინ მაგ ხაზს და ეგ არის?

მაგას თუ მეკითხები :|

/etc/hosts ფაილში.

ჰო ვიცი მარა ეტკ ფაილი ვაფშე ცარიელია და მიტო გამიკვირდა

/etc დირექტორიაა და მანდაა hosts ფაილი, არ იქნება ცარიელი

Posted by: iraklikairakli 6 Sep 2018, 21:19
პიჩარმის 1 წლიანი უფასო ვისაც უნდა შეიყვანეთ ეს levani.ubilava.1@btu.edu.ge Irakli123321
* * *
ესეიგი instapy ბიბლიოთეკა ვერ დავაყენე ვერც ლინუქსზე და ვერ ვინდოუსზე ორივეს იმპორტს ერრროს მიგდებს გადავქექე ყველაფიერ მარა ვერ ვქენი :/ ImportError: cannot import name 'InstaPy' ვინმეს ხომარ გქონიათ შეხება ?

Posted by: RexxaR 7 Sep 2018, 11:19
QUOTE (iraklikairakli @ 6 Sep 2018, 21:19 )
პიჩარმის 1 წლიანი უფასო ვისაც უნდა შეიყვანეთ ეს levani.ubilava.1@btu.edu.ge Irakli123321
* * *
ესეიგი instapy ბიბლიოთეკა ვერ დავაყენე ვერც ლინუქსზე და ვერ ვინდოუსზე ორივეს იმპორტს ერრროს მიგდებს გადავქექე ყველაფიერ მარა ვერ ვქენი :/ ImportError: cannot import name 'InstaPy' ვინმეს ხომარ გქონიათ შეხება ?

from instapy import InstaPy


instapy patara asoebit unda dawero, modulis saxeli patara asoebitaa

Posted by: iraklikairakli 7 Sep 2018, 13:33
QUOTE (RexxaR @ 7 Sep 2018, 11:19 )
QUOTE (iraklikairakli @ 6 Sep 2018, 21:19 )
პიჩარმის 1 წლიანი უფასო ვისაც უნდა შეიყვანეთ ეს levani.ubilava.1@btu.edu.ge Irakli123321
* * *
ესეიგი  instapy ბიბლიოთეკა ვერ დავაყენე ვერც ლინუქსზე და ვერ ვინდოუსზე ორივეს იმპორტს ერრროს მიგდებს გადავქექე ყველაფიერ მარა ვერ ვქენი :/ ImportError: cannot import name 'InstaPy' ვინმეს ხომარ გქონიათ შეხება ?

from instapy import InstaPy


instapy patara asoebit unda dawero, modulis saxeli patara asoebitaa

პატარა ასოებით იყო ისედაც პრობლემა ვინზე ისი იყო რომ assets ფაილსში chromedriver.### იყო და ვერ ხედავადა და chromedriver დაინახა :დდ და ლინუქსზე pillow აფდეითმა უშველა

Posted by: NinjaRacer 7 Sep 2018, 18:53
iraklikairakli
კარგია up.gif
მადლობა კოდისთვის.

CODE

def create_intervals(mylist):
   if len(mylist) == 0:
       return mylist
   elif len(mylist) == 1:
       tup = list(mylist)
       return [tuple((tup[0],tup[0]))]
   elif len(mylist) == 2:
       tup = list(mylist)
       tup = sorted(tup)
       return [tuple((tup[0],tup[1]))]

   final = []
   pairs = []
   counter = 0
   mylist = sorted(list(mylist))
   first = mylist[0]

   for i in range(1,len(mylist)):
       current = mylist[i]


       if current - first == 1:
           counter += 1

           if counter == 1:
               pairs.append(first)

           pairs.append(current)
           first = current

       else:

           if counter < 1:
               final.append(tuple((first,first)))

               pairs = []
               first = current
           else:
               counter = 0
               final.append(tuple((pairs[0],pairs[-1])))
               pairs = []
               first = current

           if current is mylist[-1]:
               final.append(tuple((current, current)))


   if len(pairs) >= 1:
       final.append((pairs[0],pairs[-1]))
   return final


print(create_intervals({1,2,7,9,4,6}))
print(create_intervals({1,2,7,9,4,5,6}))
print(create_intervals({7,9,10,11,12,13}))
print(create_intervals({1,2,3,4,5,7,8,12}))
print(create_intervals({1,3,7}))
print(create_intervals({1,2,3,6,7,8,4,5}))
print(create_intervals({6,9,1,7}))


აი ასეთი მარტივი სავარჯიშოები ბევრი უნდა აკეთო.
ძალიან დიდი ხანი მოვუნდი facepalm.gif

Posted by: NinjaRacer 20 Sep 2018, 03:39
პირველი challenging სირთულის ამოცანა ამოვხსენი.
რამოდენიმე დღის წინ და დღეს რო შევხედე იმდენად არელილია და გაუგებრად მიწერია რო ცოტახანი გამიჭირდა 100% ჩემივე დაწერილი კოდის გაგება:
CODE
from collections import OrderedDict

els = {'H':  '1',  'He': '2',  'Li': '3',  'Be': '4',  'B':  '5',  'C':  '6',  'N':  '7',  'O': '8', 'F': '9',
      'Ne': '10', 'Na': '11', 'Mg': '12', 'Al': '13', 'Si': '14', 'P':  '15', 'S':  '16', 'Cl': '17',
      'Ar': '18', 'K':  '19', 'Ca': '20', 'Sc': '21', 'Ti': '22', 'V': '23', 'Cr': '24', 'Mn': '25',
      'Fe': '26', 'Co': '27', 'Ni': '28', 'Cu': '29', 'Zn': '30', 'Ga': '31', 'Ge': '32', 'As': '33',
      'Se': '34', 'Br': '35', 'Kr': '36', 'Rb': '37', 'Sr': '38', 'Y':  '39', 'Zr': '40', 'Nb': '41',
      'Mo': '42', 'Tc': '43', 'Ru': '44', 'Rh': '45', 'Pd': '46', 'Ag': '47', 'Cd': '48', 'In': '49',
      'Sn': '50', 'Sb': '51', 'Te': '52', 'I':  '53', 'Xe': '54', 'Cs': '55', 'Ba': '56', 'La': '57',
      'Ce': '58', 'Pr': '59', 'Nd': '60', 'Pm': '61', 'Sm': '62', 'Eu': '63', 'Gd': '64', 'Tb': '65',
      'Dy': '66', 'Ho': '67', 'Er': '68', 'Tm': '69', 'Yb': '70', 'Lu': '71', 'Hf': '72', 'Ta': '73',
      'W':  '74', 'Re': '75', 'Os': '76', 'Ir': '77', 'Pt': '78', 'Au': '79', 'Hg': '80', 'Tl': '81',
      'Pb': '82', 'Bi': '83', 'Po': '84', 'At': '85', 'Rn': '86', 'Fr': '87', 'Ra': '88', 'Ac': '89',
      'Th': '90', 'Pa': '91', 'U':  '92', 'Np': '93', 'Pu': '94', 'Am': '95', 'Cm': '96', 'Bk': '97',
      'Cf': '98', 'Es': '99', 'Fm': '100', 'Md': '101', 'No': '102', 'Lr': '103', 'Rf': '104', 'Db': '105',
      'Sg': '106', 'Bh': '107', 'Hs': '108', 'Mt': '109', 'Ds': '110', 'Rg': '111', 'Cn': '112', 'Nh': '113',
      'Fl': '114', 'Mc': '115', 'Lv': '116', 'Uus': '117', 'Uuo': '118'
      }
unis ={  0: u'\u2070',
        1: u'\u00B9',
        2: u'\u00B2',
        3: u'\u00B3',
        4: u'\u2074',
        5: u'\u2075',
        6: u'\u2076',
        7: u'\u2077',
        8: u'\u2078',
        9: u'\u2079'
       }
subunis = ''.join(unis.values())
order = OrderedDict()
order = {'one':   {'1s²':2},
        'two':  {'2s²':2, '2p⁶' :6},
        'three':   {'3s²':2, '3p⁶' :6},
        'four':  {'4s²':2, '3d¹⁰':10, '4p⁶':6},
        'five':   {'5s²':2, '4d¹⁰':10, '5p⁶' :6},
        'six':    {'6s²':2, '4f¹⁴':14, '5d¹⁰':10, '6p⁶':6},
        'seven':  {'7s²':2, '5f¹⁴':14, '6d¹⁰':10, '7p⁶':6},
        }
def lastshell(shellnum, conf):
   lastitem = shellnum[-1]
   shelllist = [0 for x in range(len(lastitem))]
   i = 0
   while conf:
       # print(conf)
       try:
           shelllist[i] += 1
           i += 1
           conf -= 1
       except IndexError:
           i = 0
   shelllist = ''.join((map(str,shelllist)))
   shellnum[-1] = shelllist
   shellnum = ' '.join(shellnum)
   return shellnum

def checkio(element):
   if element.lower() == 'uuo':
       return ["118","[Rn] 5f¹⁴ 6d¹⁰ 7s² 7p⁶","2 2 222 2 222 2 22222 222 2 22222 222 2 2222222 22222 222 2 2222222 22222 222"]
   elif element.lower() == 'cr':
       return ["24","[Ar] 3d⁵ 4s¹","2 2 222 2 222 1 11111"]
   elif element.lower() == 'in':
       return ["49","[Kr] 4d¹⁰ 5s² 5p¹","2 2 222 2 222 2 22222 222 2 22222 100"]
   elif element.lower() == 'i':
       return ["53","[Kr] 4d¹⁰ 5s² 5p⁵","2 2 222 2 222 2 22222 222 2 22222 221"]
   elif element.lower() == 'ir':
       return ["77","[Xe] 4f¹⁴ 5d⁷ 6s²","2 2 222 2 222 2 22222 222 2 22222 222 2 2222222 22111"]
   elif element.lower() == 'tl':
       return ["81","[Xe] 4f¹⁴ 5d¹⁰ 6s² 6p¹","2 2 222 2 222 2 22222 222 2 22222 222 2 2222222 22222 100"]
   elif element.lower() == 'db':
       return  ["105","[Rn] 5f¹⁴ 6d³ 7s²","2 2 222 2 222 2 22222 222 2 22222 222 2 2222222 22222 222 2 2222222 11100"]
   elif element.lower() == 'v':
       return  ["23","[Ar] 3d³ 4s²","2 2 222 2 222 2 11100"]
   elif element.lower() == 'cu':
       return["29","[Ar] 3d¹⁰ 4s¹","2 2 222 2 222 1 22222"]
   out = [v for x,v in els.items() if element.lower() == x.lower()]
   conf = int(out[0]) #atomic # of element

   shells = []
   for key, val in order.items():
       for k, n in val.items():
           noble = key
           shells.append('2'*(n//2))           # for every level fillout electron shells with 2
           if (conf - n) >= 0:
               conf -= n
               if conf == 0:
                   last = k
                   nrglvl = [*val]
                   nrglvl = ' '.join(sorted(nrglvl,key=lambda x: x.replace('p','s')))
                   if noble == 'two':
                       nrglvl = '[He] ' + nrglvl
                   elif noble == 'three':
                       nrglvl = '[Ne] ' + nrglvl
                   elif noble == 'four':
                       nrglvl = '[Ar] ' + nrglvl
                   elif noble == 'five':
                       nrglvl = '[Kr] ' + nrglvl
                   elif noble == 'six':
                       nrglvl = '[Xe] ' + nrglvl
                   elif noble == 'seven':
                       nrglvl = '[Rn] ' + nrglvl
                   out.append(nrglvl)
                   out.append(' '.join(shells))
                   return (out)
           else:
               lastbf = k
               last = lastbf.rstrip(subunis)+unis[conf]
               nrglvl = [*val]
               chopoff = nrglvl.index(lastbf)+1
               nrglvl = nrglvl[:chopoff]
               nrglvl = sorted(nrglvl,key=lambda x: x.replace('p','s'))
               nrglvl = ' '.join(nrglvl)
               last = (nrglvl.replace(lastbf, last))
               if noble == 'two':
                   last = '[He] '+ last
               elif noble == 'three':
                   last = '[Ne] '+ last
               elif noble == 'four':
                   last = '[Ar] '+ last
               elif noble == 'five':
                   last = '[Kr] '+ last
               elif noble == 'six':
                   last = '[Xe] '+ last
               elif noble == 'seven':
                   last = '[Rn] '+ last
               replaceshell = (lastshell(shells,conf))
               out.append(last)
               out.append(replaceshell)
               return(out)
               

if __name__ == '__main__':
   #These "asserts" using only for self-checking and not necessary for auto-testing
   assert (checkio('H') == ["1", u"1s¹", "1"]), "First Test - 1s¹"
   assert (checkio('He') == ["2", u"1s²", "2"]), "Second Test - 1s²"
   assert (checkio('Al') == ["13", u"[Ne] 3s² 3p¹", "2 2 222 2 100"]), "Third Test - 1s² 2s² 2p⁶ 3s² 3p¹"
   assert (checkio('O') == ["8", u"[He] 2s² 2p⁴", "2 2 211"]), "Fourth Test - 1s² 2s² 2p⁴"
   assert (checkio('Li') == ["3", u"[He] 2s¹", "2 1"]), "Fifth Test - 1s² 2s¹"

   print('All done!')



ყველა ატომის პერიოდულ ტაბულაში რაცაა. ელექტრონულ კონფიგურაციას, ატომურ რიცხვს და ნოუბლ გას ნოთეიშენს წერს.

სკოლაში რო გვასწავლიდნენ ვალენტობას აი ამის თავიდან გახსენებამ სულიერად გამანადგურა. ეგ იყო ყველაზე რთული მე მგონი user.gif


ერთადერთი რაც მომეწონა იყო
nrglvl = sorted(nrglvl,key=lambda x: x.replace('p','s'))
ძაან პიზედეც რთული რაღაც ძალიან მარტივად და ელეგანტურად ამოიხსნა.
არ მეგონა თუ იმუშავებდა საერთოდ ეგ ნაწილი. იდეაში 's'-ის ნაცვლად Z უნდა ჩამეწერა რო დაესორტა სწორად მაგრამ ისე დამეხთხვა რო sorted-ის cmp-მეთოდი False-აბრუნებს. ეგ გამივარდა პროსტა, პირიქით რომ ყოფილიყო მომიწევდა Z-ის ჩასმა.
D და F შრეები წინ უსწრენებ ხოლმე S შრეს და დაჟე ზოგ ელემენტსში S შრეს ახევენ ხოლმე ელექტრონს d10 s1 და ა.შ. ამიტომ სორტმა სწორად დაალაგა d და f ყოველთვის წინაა, აი s,p არასწორად s ყოველთვის p-ს წინაა სორტმა კი ანბანის მიხედვით დაალაგა რაც არასწორია ქიმიურად smile.gif))). ჰოდა სორტმა რაიცის მაგი და lambda-ში მაგის ჩაკვეხებით p,s თანმიმდევრობაც გასორდა. მაგრად გამისწორდა რო ამოვხსენი smile.gif
ტვინი წაიღო ქიმიამ.

Posted by: RexxaR 20 Sep 2018, 15:29
NinjaRacer

what the hack?

Posted by: NinjaRacer 20 Sep 2018, 20:33
RexxaR
no hacks ბრო biggrin.gif
სხვების ამოხსნები უნდა გენახა.

რავქნა აბა ხო უნდა მივიღო პრაკტიკა რაღაცით. ჰოდა ვწვალობ ასე user.gif

Posted by: RexxaR 21 Sep 2018, 12:26
NinjaRacer

კი ბაზარი არაა

1 რჩევას მოგცემ, ყოველთვის იფიქრე როგორ შეიძლება უფრო მარტივად და ნაკლები კოდით მიაღწიო იგივე შედეგს.

პასტა ფურცელი ჯობია ყოველთვის პირდაპირ კოდის წერას

კარგად, დეტალურად გაანალიზებული პრობლემა გაცილებით იოლი გადასატანია კოდში ვიდე პირდაპირ კოდიდან ჩალიჩი.


ახლა ნაღდად არ მახსოვს ვალენტობა და ა.შ. თორემ სიამოვნებით დავწერდი მეც და კარგი იქნებოდა შენთვისაც მერე რომ განგვეხილა

Posted by: NinjaRacer 21 Sep 2018, 14:40
RexxaR
კარგი რჩევაა.

analyzing, designing, coding, debugging and testing, and implementing and maintaining application software.

სისადმინი რო ვიყავი სულ პირველ სამსახურში. პროგრამისტებთან დამსვეს) სულ სხვა ტიპები არიან.
დიდი დაფა ქონდათ) ახლა მივხვდი რატომ დადიოდნენ ოთახში წინ და უკან კილომეტრებს ღრმა ფიქრებში)

მე monkey see monkey do მაკაკა ვარ .
მადლობა რჩევებისთვის.
QUOTE
ახლა ნაღდად არ მახსოვს ვალენტობა და ა.შ. თორემ სიამოვნებით დავწერდი მეც და კარგი იქნებოდა შენთვისაც მერე რომ განგვეხილა

ვაფშე არ უნდა დიდი ცოდნა. 10 წუთში გაერკვევი.
https://py.checkio.org/en/mission/periodic-table/

https://www.youtube.com/watch?v=2AFPfg0Como
ამ ვიდეოში არის ყველაფერი რაც დაგჭირდება და პახოდუ task descr1ption-ში. ძალიან გასაგებად წერია დავალება.

საბოლოო შედეგი ვთქვათ გინდა Ar (ოქროს) კონფიგურაცია. Ar-ზე ამას მიბრუნებს ჩემი კოდი:
QUOTE
['29', '[Ar] 3d⁹ 4p⁶ 4s²', '2 2 222 2 222 2 22221']

ლისტია აუთფუთი და 3 ელემენტია ლისტში, პირველი და ბოლო გასაგებია. პირველი ტოტალ რიცხვია ელექტრონების მესამე მათი განლაგება საბორბიტალებზე. ბოლო ორბიტალია. noble gas notation-იც ძალია მარტივია. ყველგან წერია რას ნიშნავს.

ისე portage-იც და yum-იც და youtube-ის ნაწილიც პითონშია დაწერილი. ყოველთვის ვიყავი gentoo-ს ფანი. portage-ის გამო. აქედან გავიგე პითონის შესახებ ადრე.
ყველაზე დიდი რაც დამიწერია იყო mail სერვერი. dekstop, server და web მხარეც.

ახლა მივხვდი რომ კოდის წერა სკილია და ამ პატარა მარტივი ამოცანების კეთების გარეშე ამ სკილს ვერ განავითარებ. ამიტომ 200 -ვე დავალებას გავაკეთებ.
სხვათაშორის მანდ არის OOP თემებიც. კიდევ Design pattern-ები. მაგალითად Memento behavioral design pattern გამოვიყენე უკვე როცა ტექსტ ედიტორს ვწერდი. რომელსაც სტეიტები ქონდა. ანუ შეგეძლო ნებისმიერ დროს დასეივების შემდეგ წინა სტეიტის აღდგენა.

ჰო სხვისი კოდის ანალიზი და რევიუ ძალიან გეხმარება. ამიტომაც წახალისებულიაქვს Checkio-ს ეს და ყოველი ამოცანის გადაჭრის შემდეგ დამატებით ქულებს გაძლევს თუ სხვის კოდს გაარჩევ და შეაფასებ. მოკლედ practice makes perfect. ნელნელა სტეპ ბაი სტეპ ხდები სრულფასოვანი დეველოპერი. მანამდე რიგითი მაკაკა ხარ. ჰოდა ახლა ვარ მაკაკის დონეზე და ყველაფერი რაც დამეხმარება ამ დონეს გავცდე ვაკეთებ. ახლა მაგალითად კოდს ვწერ სადაც OOP-ს ვიყენებ.
ანუ პატარა თამაშია იდეაში სადაც არის warriors კლასი სხვასსხვა ტიპის მეომრებით, knight, medic,defender, vampire და ა.შ. ამ მეომრებს აქვთ სხვადასხვა პარამეტრები health defense, attack, vampirism და ა.შ თვისებები თითოეული მათგანი არის warriors-ის საბკლასი. ქმნი ჯარს რომელიც არის ამ კლასების ინსტანსების სიმრავლე. ცალკე კლასია კიდევ რომელიც აომებს ამ ჯარებს და მოკლედ არ ვიწყენ smile.gif
პროსტა მიტყდება რო ერთ დღეში ვერ გაცდები მაკაკის დონეს. თან სრული სიწყნარე მჭირდება და დრო რო გაუჩერებლივ ვწერო. ყურადღებას მიფანატავს თითქმის ყველა დისტრაქშენი.

https://www.toptal.com/python/python-design-patterns
ესეც გეხმარება. მაგრამ რთულია ყველაფერს ერთად მინდა ჩავწვდე და ამდენს ინფორმაციაში ავიზილე უკვე.

შემდეგი ორი წიგნი რასაც წავიკითხავ იქნება ეს.

Design Patterns:
Elements of Reusable Object-Oriented Software
Design Patterns cover.jpg
Author The "Gang of Four":
Erich Gamma,
Richard Helm,
Ralph Johnson,
John Vlissides
Country United States
Subject Design patterns, software engineering, object-oriented programming
Publisher Addison-Wesley
Publication date
1994
Pages 395
ISBN 0-201-63361-2
OCLC 31171684
Dewey Decimal
005.1/2 20
LC Class QA76.64 .D47 1995
Design Patterns: Elements of Reusable Object-Oriented Software is a software engineering book describing software design patterns. The book's authors are Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides with a foreword by Grady Booch. The book is divided into two parts, with the first two chapters exploring the capabilities and pitfalls of object-oriented programming, and the remaining chapters describing 23 classic software design patterns. The book includes examples in C++ and Smalltalk.


და
C
მინდა ვისწავლო.ეგ მერე ცოტა.


Posted by: Dirac 21 Sep 2018, 17:50
QUOTE (NinjaRacer @ 20 Sep 2018, 03:39 )
პირველი challenging სირთულის ამოცანა ამოვხსენი.
რამოდენიმე დღის წინ და დღეს რო შევხედე იმდენად არელილია და გაუგებრად მიწერია რო ცოტახანი გამიჭირდა 100% ჩემივე დაწერილი კოდის გაგება:
CODE
from collections import OrderedDict

els = {'H':  '1',  'He': '2',  'Li': '3',  'Be': '4',  'B':  '5',  'C':  '6',  'N':  '7',  'O': '8', 'F': '9',
      'Ne': '10', 'Na': '11', 'Mg': '12', 'Al': '13', 'Si': '14', 'P':  '15', 'S':  '16', 'Cl': '17',
      'Ar': '18', 'K':  '19', 'Ca': '20', 'Sc': '21', 'Ti': '22', 'V': '23', 'Cr': '24', 'Mn': '25',
      'Fe': '26', 'Co': '27', 'Ni': '28', 'Cu': '29', 'Zn': '30', 'Ga': '31', 'Ge': '32', 'As': '33',
      'Se': '34', 'Br': '35', 'Kr': '36', 'Rb': '37', 'Sr': '38', 'Y':  '39', 'Zr': '40', 'Nb': '41',
      'Mo': '42', 'Tc': '43', 'Ru': '44', 'Rh': '45', 'Pd': '46', 'Ag': '47', 'Cd': '48', 'In': '49',
      'Sn': '50', 'Sb': '51', 'Te': '52', 'I':  '53', 'Xe': '54', 'Cs': '55', 'Ba': '56', 'La': '57',
      'Ce': '58', 'Pr': '59', 'Nd': '60', 'Pm': '61', 'Sm': '62', 'Eu': '63', 'Gd': '64', 'Tb': '65',
      'Dy': '66', 'Ho': '67', 'Er': '68', 'Tm': '69', 'Yb': '70', 'Lu': '71', 'Hf': '72', 'Ta': '73',
      'W':  '74', 'Re': '75', 'Os': '76', 'Ir': '77', 'Pt': '78', 'Au': '79', 'Hg': '80', 'Tl': '81',
      'Pb': '82', 'Bi': '83', 'Po': '84', 'At': '85', 'Rn': '86', 'Fr': '87', 'Ra': '88', 'Ac': '89',
      'Th': '90', 'Pa': '91', 'U':  '92', 'Np': '93', 'Pu': '94', 'Am': '95', 'Cm': '96', 'Bk': '97',
      'Cf': '98', 'Es': '99', 'Fm': '100', 'Md': '101', 'No': '102', 'Lr': '103', 'Rf': '104', 'Db': '105',
      'Sg': '106', 'Bh': '107', 'Hs': '108', 'Mt': '109', 'Ds': '110', 'Rg': '111', 'Cn': '112', 'Nh': '113',
      'Fl': '114', 'Mc': '115', 'Lv': '116', 'Uus': '117', 'Uuo': '118'
      }
unis ={  0: u'\u2070',
        1: u'\u00B9',
        2: u'\u00B2',
        3: u'\u00B3',
        4: u'\u2074',
        5: u'\u2075',
        6: u'\u2076',
        7: u'\u2077',
        8: u'\u2078',
        9: u'\u2079'
       }
subunis = ''.join(unis.values())
order = OrderedDict()
order = {'one':   {'1s²':2},
        'two':  {'2s²':2, '2p⁶' :6},
        'three':   {'3s²':2, '3p⁶' :6},
        'four':  {'4s²':2, '3d¹⁰':10, '4p⁶':6},
        'five':   {'5s²':2, '4d¹⁰':10, '5p⁶' :6},
        'six':    {'6s²':2, '4f¹⁴':14, '5d¹⁰':10, '6p⁶':6},
        'seven':  {'7s²':2, '5f¹⁴':14, '6d¹⁰':10, '7p⁶':6},
        }
def lastshell(shellnum, conf):
   lastitem = shellnum[-1]
   shelllist = [0 for x in range(len(lastitem))]
   i = 0
   while conf:
       # print(conf)
       try:
           shelllist[i] += 1
           i += 1
           conf -= 1
       except IndexError:
           i = 0
   shelllist = ''.join((map(str,shelllist)))
   shellnum[-1] = shelllist
   shellnum = ' '.join(shellnum)
   return shellnum

def checkio(element):
   if element.lower() == 'uuo':
       return ["118","[Rn] 5f¹⁴ 6d¹⁰ 7s² 7p⁶","2 2 222 2 222 2 22222 222 2 22222 222 2 2222222 22222 222 2 2222222 22222 222"]
   elif element.lower() == 'cr':
       return ["24","[Ar] 3d⁵ 4s¹","2 2 222 2 222 1 11111"]
   elif element.lower() == 'in':
       return ["49","[Kr] 4d¹⁰ 5s² 5p¹","2 2 222 2 222 2 22222 222 2 22222 100"]
   elif element.lower() == 'i':
       return ["53","[Kr] 4d¹⁰ 5s² 5p⁵","2 2 222 2 222 2 22222 222 2 22222 221"]
   elif element.lower() == 'ir':
       return ["77","[Xe] 4f¹⁴ 5d⁷ 6s²","2 2 222 2 222 2 22222 222 2 22222 222 2 2222222 22111"]
   elif element.lower() == 'tl':
       return ["81","[Xe] 4f¹⁴ 5d¹⁰ 6s² 6p¹","2 2 222 2 222 2 22222 222 2 22222 222 2 2222222 22222 100"]
   elif element.lower() == 'db':
       return  ["105","[Rn] 5f¹⁴ 6d³ 7s²","2 2 222 2 222 2 22222 222 2 22222 222 2 2222222 22222 222 2 2222222 11100"]
   elif element.lower() == 'v':
       return  ["23","[Ar] 3d³ 4s²","2 2 222 2 222 2 11100"]
   elif element.lower() == 'cu':
       return["29","[Ar] 3d¹⁰ 4s¹","2 2 222 2 222 1 22222"]
   out = [v for x,v in els.items() if element.lower() == x.lower()]
   conf = int(out[0]) #atomic # of element

   shells = []
   for key, val in order.items():
       for k, n in val.items():
           noble = key
           shells.append('2'*(n//2))           # for every level fillout electron shells with 2
           if (conf - n) >= 0:
               conf -= n
               if conf == 0:
                   last = k
                   nrglvl = [*val]
                   nrglvl = ' '.join(sorted(nrglvl,key=lambda x: x.replace('p','s')))
                   if noble == 'two':
                       nrglvl = '[He] ' + nrglvl
                   elif noble == 'three':
                       nrglvl = '[Ne] ' + nrglvl
                   elif noble == 'four':
                       nrglvl = '[Ar] ' + nrglvl
                   elif noble == 'five':
                       nrglvl = '[Kr] ' + nrglvl
                   elif noble == 'six':
                       nrglvl = '[Xe] ' + nrglvl
                   elif noble == 'seven':
                       nrglvl = '[Rn] ' + nrglvl
                   out.append(nrglvl)
                   out.append(' '.join(shells))
                   return (out)
           else:
               lastbf = k
               last = lastbf.rstrip(subunis)+unis[conf]
               nrglvl = [*val]
               chopoff = nrglvl.index(lastbf)+1
               nrglvl = nrglvl[:chopoff]
               nrglvl = sorted(nrglvl,key=lambda x: x.replace('p','s'))
               nrglvl = ' '.join(nrglvl)
               last = (nrglvl.replace(lastbf, last))
               if noble == 'two':
                   last = '[He] '+ last
               elif noble == 'three':
                   last = '[Ne] '+ last
               elif noble == 'four':
                   last = '[Ar] '+ last
               elif noble == 'five':
                   last = '[Kr] '+ last
               elif noble == 'six':
                   last = '[Xe] '+ last
               elif noble == 'seven':
                   last = '[Rn] '+ last
               replaceshell = (lastshell(shells,conf))
               out.append(last)
               out.append(replaceshell)
               return(out)
               

if __name__ == '__main__':
   #These "asserts" using only for self-checking and not necessary for auto-testing
   assert (checkio('H') == ["1", u"1s¹", "1"]), "First Test - 1s¹"
   assert (checkio('He') == ["2", u"1s²", "2"]), "Second Test - 1s²"
   assert (checkio('Al') == ["13", u"[Ne] 3s² 3p¹", "2 2 222 2 100"]), "Third Test - 1s² 2s² 2p⁶ 3s² 3p¹"
   assert (checkio('O') == ["8", u"[He] 2s² 2p⁴", "2 2 211"]), "Fourth Test - 1s² 2s² 2p⁴"
   assert (checkio('Li') == ["3", u"[He] 2s¹", "2 1"]), "Fifth Test - 1s² 2s¹"

   print('All done!')



ყველა ატომის პერიოდულ ტაბულაში რაცაა. ელექტრონულ კონფიგურაციას, ატომურ რიცხვს და ნოუბლ გას ნოთეიშენს წერს.

სკოლაში რო გვასწავლიდნენ ვალენტობას აი ამის თავიდან გახსენებამ სულიერად გამანადგურა. ეგ იყო ყველაზე რთული მე მგონი user.gif


ერთადერთი რაც მომეწონა იყო
nrglvl = sorted(nrglvl,key=lambda x: x.replace('p','s'))
ძაან პიზედეც რთული რაღაც ძალიან მარტივად და ელეგანტურად ამოიხსნა.
არ მეგონა თუ იმუშავებდა საერთოდ ეგ ნაწილი. იდეაში 's'-ის ნაცვლად Z უნდა ჩამეწერა რო დაესორტა სწორად მაგრამ ისე დამეხთხვა რო sorted-ის cmp-მეთოდი False-აბრუნებს. ეგ გამივარდა პროსტა, პირიქით რომ ყოფილიყო მომიწევდა Z-ის ჩასმა.
D და F შრეები წინ უსწრენებ ხოლმე S შრეს და დაჟე ზოგ ელემენტსში S შრეს ახევენ ხოლმე ელექტრონს d10 s1 და ა.შ. ამიტომ სორტმა სწორად დაალაგა d და f ყოველთვის წინაა, აი s,p არასწორად s ყოველთვის p-ს წინაა სორტმა კი ანბანის მიხედვით დაალაგა რაც არასწორია ქიმიურად smile.gif))). ჰოდა სორტმა რაიცის მაგი და lambda-ში მაგის ჩაკვეხებით p,s თანმიმდევრობაც გასორდა. მაგრად გამისწორდა რო ამოვხსენი smile.gif
ტვინი წაიღო ქიმიამ.

გლობალურ ცვლადებს უნდა ერიდო, ეგ els და რაღაცეები კლასში შეგიძლია შეყარო. მერე ამდენი elif ძალიან ამახინჯებს კოდს.

Posted by: NinjaRacer 22 Sep 2018, 03:51
Dirac

კი. გადავწერ.
პროსტა რამოდენიმე ელემენტი გამონაკლისია ტაბულაში და ყველამ ეგრე დაწერ ეგ გამონაკლისები. ერთის გარდა იმას ძაან პიზდეცად ქონდა გაკეთებული.

იმან ძაან ტვინი #####ა თავის tip-ებით ტიპი ყოველდღე მაილს აგზავნის იყიდეთ ჩემი წიგნიო. მოიტყნა ტვინი ვიყიდდი კვირაში ერთხელ რო გამოეგზავნა მაინც.

ტუფლის მაზია ჟუვაკჩკა ფანტა კოკაკოლა სპრაიტი ბავშვები რო მეტროში დადიოდნენ აი ეგრე არეკლამებს ტიპი. უკვე რეაქცია არ მაქვს. აზრზე არაა რა. ტვინი არ უნდა #####ა შენი პროდუქტით. ცოტა ხანში ნამუსსზე ამგდებ მაილებს გამოაგზავნის. კი თიფები ასწორებს მარა ტვინს რაზე ტყნავხო?

Posted by: Svani91 22 Sep 2018, 09:18
ეცადე switch/case if/else - ები abstract factory მეთოდში გაიტანო და თითოეული case if else ბლოკი low level იმპლემენტაციაში იყოს ჩამალული

მაგ.

CODE

func checkioFactory(element: T) -> U {
  switch(element.type) {
     case .someType1:
        return SomeLowLevelImplementation1()
     case .someType2:
        return SomeLowLevelImplementation2()
     // ...
  }
}


წიგნებზეც იყო წინა პოსტი და ამასაც დავამატებდი ლისტს

https://www.amazon.com/gp/product/0132350882

Clean Code: A Handbook of Agile Software Craftsmanship

რაც დავწერე, მაქედანაა მიახლოებული ვარიანტი, წიგნში უფრო კარგად აქვს ახსნილი და გადაწყვეტილი ეგ პრობლემა

Posted by: JS@Ninja 22 Sep 2018, 19:11
პითონცი django როგორი როჟაა ღირს ასათვისებლად ? py ცოტა რაღაც გამეგება და მაგის გამო მოვკიდებდი ხელს

QUOTE
ტუფლის მაზია ჟუვაკჩკა ფანტა კოკაკოლა სპრაიტი ბავშვები რო მეტროში დადიოდნენ აი ეგრე არეკლამებს ტიპი.


lol.gif

Posted by: Shredinger 22 Sep 2018, 19:20
NinjaRacer
QUOTE
იმან ძაან ტვინი #####ა თავის tip-ებით ტიპი ყოველდღე მაილს აგზავნის იყიდეთ ჩემი წიგნიო. მოიტყნა ტვინი ვიყიდდი კვირაში ერთხელ რო გამოეგზავნა მაინც.

რატომღაც მეგონა მარტო მე მემართებოდა ეგრე, მართლა ტვინი გაღუნა თავისი მეილებით აღარ შემილია უკვე biggrin.gif ვაქანსელებ მაგას.

Posted by: NinjaRacer 23 Sep 2018, 00:21
QUOTE
პითონცი django როგორი როჟაა ღირს ასათვისებლად ? py ცოტა რაღაც გამეგება და მაგის გამო მოვკიდებდი ხელს

მე მგონი Flask უფრო ხადავოი მასტია.
Pirates use Flask, The Navy uses Django.

Shredinger
ჰო რა ია დღევანდელი lol.gif
» სპოილერის ნახვისთვის დააწკაპუნეთ აქ «


წტფ.
Svani91
მადლობა მართლა კარგი რჩევაა !
smile.gif
თუმცა პითონში არ არის switch/case. უმეტესობა კომპილირებად ენებში არის და აქ არა. კონსტანტების არ ქონის გამო და კიდევ რაღაც გაუგებარი მიზეზებია.
CODE

def f(x):
   return {
       1 : 'output for case 1',
       2 : 'output for case 2',
       3 : 'output for case 3'
   }.get(x, 'default case')

რათქმაუნდა switch ჯობია მაგრამ dict-ით ასეც შეიძლება. ანალოგია ფაქტიურად. მართლა სასარგებლორ ჩევა იყო up.gif

Posted by: iraklikairakli 24 Sep 2018, 19:14
სალამი ბიჭებო ვინმეს თუ გაგიგიათ პაითონზე აანდროიდ აპპის წერა შეისაძლებელია ? ბევრგან წერია კი შესაძლებელია ნორმ დონის აპპის შექმნა და დაახლოებითმინდა ნაბიჯის მთვლელი აპპის შექმნა ოღონდ სხვა ფუნქციებით და რას ფიქრობთ ღირს თ მაინც ჯავა ნუ ორი აზრი არაა ჯავა ჩაგრავს აქ პითონს

Posted by: Irakli2013 29 Sep 2018, 15:00
ამ დავალებას ვაკეთებ: https://py.checkio.org/en/mission/house-password/

ეს კოდი

CODE
def checkio(data: str) -> bool:
   
   digits = ["1", "2", "3", "3", "5", "6", "7", "8", "9" "0"]

   isDigit = False
   hasUpper = False
   hasLower = False
   if len(data) >= 10:
       for i in data:
           if i in digits:
               isDigit = True
           if ord(i) > 64 and  ord(i) < 91:
               hasUpper = True
           if ord(i) >96 and  ord(i) < 123:
               hasLower = True
           if isDigit and hasUpper and hasLower:
               break
               
   if isDigit and hasUpper and hasLower:
       return True
   else:
       return False

#Some hints
#Just check all conditions


if __name__ == '__main__':
   #These "asserts" using only for self-checking and not necessary for auto-testing
   assert checkio('A1213pokl') == False, "1st example"
   assert checkio('bAse730onE4') == True, "2nd example"
   assert checkio('asasasasasasasaas') == False, "3rd example"
   assert checkio('QWERTYqwerty') == False, "4th example"
   assert checkio('123456123456') == False, "5th example"
   assert checkio('QwErTy911poqqqq') == True, "6th example"
   print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")



მე-15 ტესტზე შეცდომას აგდებს

QUOTE
Fail:checkio("aaaaaaaaa9Aa")
Your result:False
a a a a a a a a a 9 A a
length ≥ 10
[a-z]: ✔ [A-Z]: ✔ [0-9]: ✔
Right result:True

Posted by: NinjaRacer 30 Sep 2018, 05:41
ჩემი პაბლიქეიშენი.
https://py.checkio.org/mission/house-password/publications/g.zakareishvili/python-3/second/

ვიცი უფრო გააი ტერესებს შენი კოდი რატო ვერ გადის მეც ეგრე ვარ სხვა ამოცანაზე.

return false მდე პრინტები ჩასვი და სამივე ცვლადი დააპრინტინე რაც გაქ ფუნქციაში აბა ცადე და დაწერე აქ მეც მაინტერესებს
მაგრამ კომპთან არ ვარ სამწუხაროდ.

სხვათაშორის ეგ კოდი რაც გიწერია საკაიფოდ გაგათვითცნობიერებს ბევრ რამეში. ანუ ბევრი რამე გაქვს გამოყენებული. Break და continue აქამდე while ში ვიყენებდი მხოლოდ

break ნაცლად return True სცადე აბა და წესით უნდა გაიაროს ყველა ტესტი


ჩემ კოდში re იმპორტი ტყუილადმქონდა. ვაპირებდი გამოყენებასდა მერე მეტქი ბუასილია.

break ის მერე ეგრევე ელსე ხტება და იმ კოდს ტობევს ვაბშე რაც ელსამდეა. ამიტომაც აბრუნებს ფალსს

Posted by: Definitely_Maybe 30 Sep 2018, 16:36
გამარჯობა. ერთი ნამდვილად ჩაინიკური კითხვა უნდა დავსვა. დავიწყე წიგნის automate the boring stuff with python გარჩევა. შემხვდა ასეთი დავალება.

უნდა დავწერო ფუნქცია რომელიც აიღებს ლისტს და დააბრუნებს სტრინგს, დასვამს ყოველი სიტყვის მერე მძიმეს და ბოლო სიტყვის წინ დასვამს and კავშირს.
მაგალითად ['apples', 'bannana', 'orange' , 'nuts'] უნდა გადაიქცეს 'apples ,bannana ,orange and nuts'

დავწერე ეს თუმცა ამ მძიმეებს ჯერ ვერაფერი მომვუხერხე.
def convertList(li):
x=''
li.insert(len(li)-1,'and')
for i in li:
x=x + str(i) +' ,'

return x

შედეგი გამომდის 'apples ,bannana ,orange ,and ,nuts ,' კარგი ბოლო მძიმეს მოვაშორებ x=x[:-1] მაგრამ and ის წინ და უკან მძმეებს ვერაფერი მოვუხერხე. რაღაც გადაწყვეტები კი მაქ თავში მაგრამ ძალიან გართულდება მგონია.
რას მირჩევთ? ზოგადად მე უფრო მაინტერესებს როგორ მივუდგე ასეთ ამოცანებს, ეგრევე რო არ ვეცე კომპს და დავიწყო წერა კოდის და ბოლო ბოლო რაღაც გამოვა მაგრამ ვატყობ ვტანჯულობ smile.gif

მადლობა წინასწარ.


Posted by: NinjaRacer 30 Sep 2018, 19:03
მობილურით არ გამომივა წერა ნამდვილად მაგრამ ჯერ ლისტში lst[-1].append('and') ','. join(lst) უნდა გამოიყენო. კაკრაზ მეც ეგეთი კითხვები მაქვს ხშირად და ეს თემაც მაგისთვისაა


უი მძიმეების პრობლემა აქაც იქნება

Posted by: RexxaR 30 Sep 2018, 20:25
QUOTE (Definitely_Maybe @ 30 Sep 2018, 16:36 )
გამარჯობა. ერთი ნამდვილად ჩაინიკური კითხვა უნდა დავსვა. დავიწყე წიგნის automate the boring stuff with python გარჩევა. შემხვდა ასეთი დავალება.

უნდა დავწერო ფუნქცია რომელიც აიღებს ლისტს და დააბრუნებს სტრინგს, დასვამს ყოველი სიტყვის მერე მძიმეს და ბოლო სიტყვის წინ დასვამს and კავშირს.
მაგალითად   ['apples', 'bannana', 'orange' , 'nuts']  უნდა გადაიქცეს 'apples ,bannana ,orange and nuts'

დავწერე ეს თუმცა ამ მძიმეებს ჯერ ვერაფერი მომვუხერხე.
def convertList(li):
    x=''
    li.insert(len(li)-1,'and')
    for i in li:
        x=x + str(i) +' ,'

    return x

შედეგი გამომდის 'apples ,bannana ,orange ,and ,nuts ,'  კარგი ბოლო მძიმეს მოვაშორებ x=x[:-1] მაგრამ and ის წინ და უკან მძმეებს ვერაფერი მოვუხერხე. რაღაც გადაწყვეტები კი მაქ თავში მაგრამ ძალიან გართულდება მგონია.
რას მირჩევთ? ზოგადად მე უფრო მაინტერესებს როგორ მივუდგე ასეთ ამოცანებს, ეგრევე რო არ ვეცე კომპს და დავიწყო წერა კოდის და ბოლო ბოლო რაღაც გამოვა მაგრამ ვატყობ ვტანჯულობ smile.gif

მადლობა წინასწარ.

python-ში string-ს ობიექტების აქვთ მეთოდი სახელად join

ჯოინ მეთოდის დანიშნულებაა რომ ინპუთად/არგუმანტად აიღოს დავუშვათ ლისტი და დააბრუნოს ყველა ელემენტის ნაერთი სტრინგის სახით ჩვენს მიერ მითითებული გამყოფის გამოყენებით


მაგალითად გვაქვს ლისტი

array = ['banana', 'tea', 'mulen']

და გვინდა რომ შევაერთოთ ლისტის ყველა წევრი მძიმეებით

თვალსაჩინოებითვის დეკლარირება გავუკეთოთ ცვლადს ჩვენთვის სასურველი გამყოფის სახით

separator = ', ' #მძიმე და გამოტოვება სტრინგის სახით

შემდეგ კი

stringified = separator.join(array)

stringified-ს ექნება შემდეგი სახე

'banana, tea, mulen'


მაგრამ თუ გვინდა რომ ბოლო სიტვის წინ სხვა გამყოფი იყოს, შეგვიძლია ასეთი გზით გავაკეთოთ


CODE


array = ['banana', 'tea', 'mulen']
separator = ', '

def stringify(array, separator):
   if len(array) > 0:
       if len(array) == 1:
           return array[0]
       else:
           stringified = separator.join(array[:-1])
           stringified += ' and {0}'.format(array[-1])
           return stringified
   return 'array is empty'

print(stringify(array, separator))



ჯოინს ვუკეთებთ ლისტს, ოღონდ ბოლო ელემენტის გამოკლებით. ანუ თუ შეიცავს 5 წევრს დავუშვათ, პირველ 4-ს ვაერთებთ. შემდეგ მიღებულ სტრინგს ვუმატებთ ლისტის ბოლო ელემენტს, უბრალოდ მანამდე ვცვლით ბოლო წევრის მნიშვნელობას და ' and ' ვუწერთ

რაღაც რეცეპტივით იკითხება ბოლო აბზაცი

ეტყობა არის ჩემში რაღაც კულინარული sad.gif

Posted by: NinjaRacer 1 Oct 2018, 01:05
აჰა ეს კოდი იმუშავებს ყველა ზომის მასივზე.
CODE
lst =  ['apples', 'bannana', 'orange' , 'nuts', 'pineapple']

def converter(lst):
   lst.insert(-1, 'and')
   joined = (', '.join(lst))
   return joined.replace('and,', 'and ')

print(converter(lst))



ეს უფრო პითონურია, ადვილი გასაგებიც და ა. შ მაგრამ პირველ ეტაპზე ბევრი ლუპფები და სპაგეტი კოდი დაგემარება ბევრი რამის სწავლაში.
თუნდაც control flow-ს დაამუღამებ. ცვლადების სკოუპებს, ლოკალურს გლობალურს და ა.შ

კარგია უნდა იტანჯო და იწვალო ზუსტად ამ ეტაპზე რადგან სწავლობ.
სწავლის ძირი მწარე არის ვიბაზრეხო? facepalm.gif
არადა ასეა მართლა user.gif

პ.ს პახოდუ ფითონს ძალიან სერიოზული არსენალი აქვს built-ინები.

ანუ თავისივე მეთოდები. string method, list, set, dict, tupple, int და ა.შ. dunder მეთოდები, duck typing (__()__) კიდევ ბევრი საყვარელი რამეაქვს.

დახუია მეთოდები აქვს. ზუსტად ასეთი ამოცნებისთვის არის შექმნილი. ძალაინ ფართო არეალი აქვს და შესაძლებლობები. თუმცა ჩვენ ჩაინიკები მაინც სკრიპტული ენასავით ვუყურებთ როგორც Shell-ს მაგალითად biggrin.gif

ტექსტის გადამამუშავებელ და web scraping ენას.

პახოდუ სტრანი რაღაცეებიც აქვს. descr1ptorebi, metaclassebi (ამან მაგრად დამაინტერესა), lambda, map, filter, reduce. setter getter. abstraction
+ ბიბლიოთეკები ძალიან მდიდარია. კიდევ აქვს რაღაც ფიჩები რაც ცოტა წაყლევებსავით ერთი შეხედვით მაგრამ მაგრად ასწორებს როცა უყურებ ტიპებს რეების გაკეთება შეუძლიათ. საკმაოდ ძლიერი ენაა და ადვილად გასაგები.

ძააან ნერვები მეშლება რო პრაფესორობენ ხოლმე ტიპები.
ერთ ღამეში და ერთ თვეშიც თუ გინდა ვერ გახდები პროგრამისტი.

არც მათემატიკა გჭირდება და არც ზოოლოგია და ტრიგონომეტრია. boolean algebra მეიბი, ელემენტალური მათემატიკა, meybi დალშე
get a pair of brain ბრო და ფაქ ოფფფ. პროგრამირება გენიოსობა რო გონიათ lol.gif #ერმალო

წატი მართლა 'Gang of four' დაგუგლე ჯერ რა და ეგ ძველია. ახლებიცაა უფრო სერიოზული და დამატებული აქვს კიდევ რაღაცეები. რა მათემატიკა დაკოსინუს ტანგენსი ბრაჰ
რო ჭირდებოდეს უკვე ნასწავლი მექნებოდა ეგეც. ცხრაჯერ.

ჩემი ნება რო იყოს სკოლაში ბავშვებს შევაზილავდი ტვინში დაწყებითი კლასებიდან იმენა პითონს და ძალიან ჭკვიანები გაიზრდებოდნენ და გონებაგახსნილები.
რაღაც ###ობების დაზუთხვას ჯობია აზროვნება ასწავლო ჯერ facepalm.gif ბევრად ჯობია თან.

აღარ იარსებებდა 'გენიოსი პროგრამისტის მითი'
https://www.youtube.com/watch?v=0SARbwvhupQ

Posted by: Definitely_Maybe 1 Oct 2018, 10:19
RexxaR
მადლობა, გავარჩევ . ჯოინ მეთოდი არ ვიცოდი არ ეწერა ამ წიგნში თავიდან და ბუნებრივია რაც იყო ახსნილი იმით უნდა გავაკეთო.
NinjaRacer
გზაში ვიფიქრე რომ მძიმეებიც „for loop ით ჩავსვა ერთის გამოტოვებით და ბოლომდე აღ მივიყვან, 3 ან 4 ის გამოკლებით დავამტავრებდი, უნდა იმუშაოს ვცდი.

გეთანხმები ყველაფერში, ვნანობ ადრე დამეწყო სწავლა. 35 ის ვარ და სულ სხვა სფეროში და ვნანობ ცოტა ადრე რომ არ დავინტერესდი. ნუ გვიან ვიდრე არასდროსო smile.gif

Posted by: Svani91 1 Oct 2018, 10:42
NinjaRacer

შენი კოდი დააბრუნებს apples, bannana, orange, nuts, and pineapple

up.gif

Posted by: Definitely_Maybe 1 Oct 2018, 11:03
აი გამოვიდა smile.gif თუმცა ვატყობ რომ არაა მთლად კარგი კოდი smile.gif

user posted image
* * *
მეოთხე ხაზში შემეშალა, ასე უნდა იყოს smile.gif for i in range (1,len(li),2)

Posted by: RexxaR 1 Oct 2018, 12:22
Definitely_Maybe

შენი კოდის სისწრაფე, ჩემი და ნინჯას კოდთან შედარებით არის დაახლოებით 700 000%-ით ნელი sad.gif

ნუ გასაგებია რომ ჯოინის გარეშე გინდა რომ დაწერო კოდი მაგრამ პერფორმანსს კლავს არაოპტიმიზირებული კოდი ყოველთვის

Posted by: Irakli2013 1 Oct 2018, 15:14
NinjaRacer


მადლობა


ძალიან დებილური შეცდომა მქონია biggrin.gif

ციფრების მასივში ცხრიანის მერე მძიმე არ მეწერა და როგორც ჩანს 9-ს ვერ პოულობდა მასივში მაგიტომ

ამითაა ცუდი პითონი biggrin.gif სხვა ენებში მძიმის არ ქონაზე ერორს ამომიგდებდა biggrin.gif

Posted by: Definitely_Maybe 1 Oct 2018, 18:04
RexxaR
აი ეს კოდი ვნახე ვნახე სხვა ფორუმზე. smile.gif თან ჯოინის გარეშე.
user posted image



მადლობა ყველას. კიდევ შეგაწუხებთ smile.gif


Posted by: NinjaRacer 1 Oct 2018, 21:15
QUOTE
ამითაა ცუდი პითონი

++

სხვა ენებს არ ვადარებ
* * *
Svani91
smile.gif

alk.gif

alk.gif

Posted by: RexxaR 3 Oct 2018, 13:00
მოკლედ დამწყებებისთვის საინტერესო იქნება მგონი ეს "ამოცანა"

ადრე მქონდა ამაზე თემა გახსნილი მაგრამ იმედია არ ისარგებლებთ შპარგალკებით biggrin.gif

მოკლედ დავუშვათ გვაქვს 2 array და გვინდა რომ დავაგენერირო n რაოდენობის უნიკალური, რენდომ კომბინაცია, ისე რომ არ დავაგენერიროთ ყველა შესაძლო ვარიანტი წინასწარ და შემდეგ რენდომზე არ ავირჩიოთ n რაოდენობის უნიკალური წევრები.

ანუ დავუშვათ მოცემულობაა:
სახელის კონტეინერი arr1 შედგება 10,000 უნიკალური წევრისგან
გვარის კონტეინერი arr2 შედგება 5,000 უნიკალური წევრისგან
n = პარამეტრი თუ რამდენი კომბინაცია უნდა დაგვიბრუნოს ფუნქციამ

წესები:
* წყობა უნდა იყოს შემდეგი: სახელი[i] + ' ' + გვარი[j]. ანუ საპირისპირო წყობის კომბინაციები არ გვაინტერესებს, შესაბამისად შესაძლო უნიკალური კომბინაციების ჯამი არის 10000 * 5000 = 50,000,000
* ფუნქციამ რაც შეიძლება ოპტიმალურად უნდა გამოიყენოს ოპერატიული მეხსიერება, ანუ ზედმეტი დატვირტვა memory-ზე არ გვაწყობს


რჩევები:
* თუ n მეტი იქნება მაქსიმალურ შესაძლო კომბინაციებზე, თავისთავად უნდა დაბრუნდეს ყველა შესაძლო ვარიაცია.
* დავუშვათ ფუნქცია ყოველ იტერაციაზე აგდებს random რიცხვს, შემდეგ რაიმე ფუნქციის/ლოგიკის/ალგორითმის საშუალებით ამ რენდომზე ამოვარდნილ რიცხვს გარკვეული კონდიციების გათვალისწინებით აკონვერტირებს პირველი და მეორე array-ს ინდექსებად. იმისთვის რომ ფუნქციის execution time შევამციროთ, როგორმე უნდა ავირიდოთ თავიდან რენდომში ისეთი რიცხვის ამოვარდნა (ან შემდგომში ამ რიცხვზე დაფუძნებით ინდექსებად კოვერტაციისას) რომელიც უკვე გამოყენებულია (ამის შანსი ყოველ დაგენერირებულ კომბინაციაზე იზრდება თავისთავად). მოკლედ გარკვეული ლოგიკა იქნება შესამუშავებელი რომელიც გაითვალისწინებს უკვე დაგენერირებული კობინაციების უნაკლურ ინდექსებს ...

მოკლედ მთელი ამ ფუნქციის დედააზრი არის ის რომ memory-ში არ გავუშვათ ხარახურა და CPU ხარჯზე on-fly შევადგინოთ უნიკალური რენდომ კომბინაციები

აბა ჩართეთ ბრეინშტორმინგი

Posted by: NinjaRacer 3 Oct 2018, 14:14
QUOTE
მოკლედ მთელი ამ ფუნქციის დედააზრი არის ის რომ memory-ში არ გავუშვათ ხარახურა და CPU ხარჯზე on-fly შევადგინოთ უნიკალური რენდომ კომბინაციები

generator-ი უნდა გამოიყენო, მემორიში არ დააკოპირებს არაფერს.
ან ანონიმური ფუნქციით. yield ან lambda

საშინლად დაბოლილმა თუ ამოვხსნი საინტერესოა.
* * *
კი ამოვხსნი რადგან წეღან ეს დავწერე
CODE



class OnlyInstance:
   class __OnlyInstance:
       def __init__(self, val):
           self.val = val
       def __str__(self):
           return repr(self) + self.val
   instance = None
   def __init__(self, arg):
       if not OnlyInstance.instance:
           OnlyInstance.instance = OnlyInstance.__OnlyInstance(arg)
       else:
           OnlyInstance.instance.val = arg
   def __getattr__(self, item):
       return getattr(self.instance, item)



x = OnlyInstance('sausage')
print('x')


დიზაინ პათერნებიდან ერთერთია: singleton

Posted by: NinjaRacer 4 Oct 2018, 21:19
ჩემით მინდა დავწერო ჩეთი.
თუ გინდათ ერთად ვქნათ.


არ ვიცი რა ტექნოლოგიები უნდა გამოივყენო.
wsgi აპლიკაცია რო დავწერო უბრალო არ გამოვა?
irc არ მინდა.

Posted by: Definitely_Maybe 4 Oct 2018, 23:00
პითონი ქართულ შრიფტს ვერ აღიქვამს თუ მე არ მაქ დაყენებული რამე სწორად?
მხოლოდ ??????? < მიჩვენებს.

Posted by: არწივი9 7 Oct 2018, 19:09
გამარჯობათ smile.gif

პითონის სწავლას შევუდექი ამ წიგნით
user posted image
და იქ წერია:
QUOTE
Теперь добавьте ярлык Python 3 на рабочий стол:
1. Кликните по рабочему столу правой кнопкой мышки и выберите из появившегося меню New ▶ Shortcut (Создать ▶ Ярлык).
2. Введите в поле с пометкой Type the location of the item (Укажите расположение объекта) следущую строку (каталог в начале этой строки должен соответствовать каталогу установки, который я просил вас запомнить):
c:\Python32\Lib\idlelib\idle.pyw –n
3. Нажмите Next (Далее), чтобы перейти к следующему диалогу.
4. Укажите имя IDLE и нажмите Finish (Готово), чтобы создать ярлык.

მე კი ასე გავაკეთე მაგრამ ამ IDLE-ის shortcut კი არ გამოჩნდა როგორსაც მიჩვეული ვიყავი ნებისმიერი პროგრამის შემთხვევაში, არამედ რატომღაც ამ შინაარსის ფოლდერი:
user posted image
ეს ასე უნდა იყოს?

Posted by: NinjaRacer 8 Oct 2018, 06:26
არწივი9
გამარჯობა.
კი ეგრეა. სტარტში idle ჩაწერე 'ენტერს' შვლიპე და გაეშვება )

python 3-ში უნიკოდის მხარდაჭერა არის. ქართულიც უნდა წაიკითხოს.

თუ ვებიდან მოგავს ტექსტი არ დაგავიყწდეს decode()

Posted by: RedShark 8 Oct 2018, 09:55
არწივი9
სტარტ მენიუდან წაიღე შორთქათი ან მაგ ფოლდერში შექმენი და დესკტოპზე გადაიტანე.

Posted by: NinjaRacer 8 Oct 2018, 15:37
ფეისბუქის სქრეიფინგთან გქონიათ გამოცდილება?

არ ვიცი html და css. ნუ class და ID რა არის წარმოდგენა მაქვს. ასეთისე ბეისიკ დონეზეც ვიცი.

მოკლედ მინდა რაღაც ვიდეოზე ყველა კომენტატორის ID წამოვიღო
BeautifulSoup4 და request მოდული მეყოფა ამ საქმისთვის?
სწორი გზა იქნებ მიმითოთ რა.

რამე შეზღუდვები ხომ არ აქვს. graph API ქონდათ ადრე და გათიშესო.
მოკლედ ვიდეოზე კომენტატორების Tag რა არის ეგ მაინტერსებს და როგორ წამოვიღო ყველა.

**UPDATE April 2018: Due to changes Facebook has made to the Graph API, the API will no longer return every post as noted in this article.

Posted by: არწივი9 9 Oct 2018, 19:56
NinjaRacer
RedShark
ეს გასაგებია, მადლობა smile.gif

მაგრამ ეს წიგნი მე რაღაც არ მომწონს mad.gif %S და % სიმბოლოები ცვლადების (ქართულად ასეა?) ჩასასმელად რომ გამოიყნება print ბრძანებაში აი ეს მომენტი კარგად არაა ახსნილი. print-ში ხან ერთია გამოყენებული, ხან მეორე და თან ან მის წინა მყოფი ტექსტი გამოდის პრინტის ბრძანების მიცემის მერე ხან მის შემდეგ, რაღაც ავირიე ან მე ვერ გავიგე კარგად. ვინმეს შეუძლია ეს მოკლედ ამიხსნას? აი გავიგე რომ რაღაც ცვლადი გვაქვს, მაგალითად num=100 და print-ში ვეუბნები რომ რაც მასშია ის გამოვიდეს, %S უნდა ჩავუწერო თუ %? ან რომელი რის მერეა? რაღაც ზოგადი წესები ხომ უნდა ჰქონდეს კოდების წერას?

Posted by: RedShark 9 Oct 2018, 20:01
არწივი9
QUOTE
მაგრამ ეს წიგნი მე რაღაც არ მომწონს   %S და % სიმბოლოები ცვლადების (ქართულად ასეა?) ჩასასმელად რომ გამოიყნება print ბრძანებაში აი ეს მომენტი კარგად არაა ახსნილი. print-ში ხან ერთია გამოყენებული, ხან მეორე და თან ან მის წინა მყოფი ტექსტი გამოდის პრინტის ბრძანების მიცემის მერე ხან მის შემდეგ, რაღაც ავირიე ან მე ვერ გავიგე კარგად. ვინმეს შეუძლია ეს მოკლედ ამიხსნას? აი გავიგე რომ რაღაც ცვლადი გვაქვს, მაგალითად num=100 და print-ში ვეუბნები რომ რაც მასშია ის გამოვიდეს, %S უნდა ჩავუწერო თუ %? ან რომელი რის მერეა? რაღაც ზოგადი წესები ხომ უნდა ჰქონდეს კოდების წერას?

დააკოპირე აბა წიგნიდან რას ვერ იგებ

Posted by: NinjaRacer 9 Oct 2018, 20:08
არწივი9
string formatting ხო ცოტა რთული თავიდან.

რამოდენიმე მეთოდი არსებობს ამის გარდა. % ყველაზე მარტივია.

%-ის მერე s ნიშნავს რომ ტექსტით ანაცვლებ.
CODE
print("hello %s" % 'world')
ან % 'world'-ის ნაცვლად შეგიძლია ცვლადის სახელი მიუთითO ბრჭყალების გარეშე. ასე:
CODE

text = 'world'
print('hello %s'% text)
d ნიშნავს რომ digit ანუ ციფრი. F-  float და ა.შ


https://www.learnpython.org/en/String_Formatting
აი კიდევ მაგალითები.

თავიდან მეც დამაბნია მაგან ასე რომ არაუშავს. გაიტანს.

ეგ წიგნი ნამეტანი გამარტივებულია. არ გჭირდება ეგეთი მარტივი. learn python the hard way წაიკითხე. მგონი კარგი წიგნია. ადრე უფასო რო იყო ვებგვერდზე მაგით ვისწავლე ელემენტალური რაღაცეები. ახლა ფასიანი გახადეს. ან ტორენტებიდან მოქაჩე. თუ მოგეწონება ამაზონიდან გამოიწერე ჰარდკოპი და ეგ იქნება.

სხვა ენებთან შედარებით მარტივია. მაგრამ პროგრამირების ენაა მაინც და იზი პიზი ვერ იქნება სწავლა მაინც.

Posted by: არწივი9 9 Oct 2018, 20:44
RedShark
მაგ წიგნის 36-ე გვერდზე, ქვეთავი "Переменные внутри строк". იქამდე და იმის მერე (ჯერჯერობით) ყველაფერი გასაგებია
NinjaRacer
QUOTE
ეგ წიგნი ნამეტანი გამარტივებულია. არ გჭირდება ეგეთი მარტივი. learn python the hard way წაიკითხე. მგონი კარგი წიგნია. ადრე უფასო რო იყო ვებგვერდზე მაგით ვისწავლე ელემენტალური რაღაცეები. ახლა ფასიანი გახადეს. ან ტორენტებიდან მოქაჩე. თუ მოგეწონება ამაზონიდან გამოიწერე ჰარდკოპი და ეგ იქნება.

ეგ learn python the hard way კი ჩამოვტვირთე უკვე და ტორენტებზე რაღა არ ვნახე საერთოდ, მაგრამ რომელი ავირჩიო? პროგრამირების აზრზე არ ვარ. თან იქნებ ვიდეოგაკვეთილები სჯობდეს-მეთქი? მაგალითად უცებ ამას მივაგენი:
https://www.youtube.com/watch?v=-R_VR_Y5g8c

QUOTE
სხვა ენებთან შედარებით მარტივია. მაგრამ პროგრამირების ენაა მაინც და იზი პიზი ვერ იქნება სწავლა მაინც.

არა, ეგ სავსებით მესმის smile.gif
მაგრამ რაკი ამ სფეროს აზრზე არ ვარ ამიტომ მარტივით მინდა დავიწყო, სულ ნოლიდან. მინიმუმ ნახევარი წელი მაინც შემიძლია ამ საქმეს დავუთმო

ან რა ვიცი, ვინმე კერძოდ ასწავლის ამ პროგრამას? შემიძლია ფული გადავუხადო და ეგაა, თუ ასეთი გზა უფრო იოლი იქნება smile.gif

Posted by: RedShark 9 Oct 2018, 20:49
QUOTE (არწივი9)
მაგ წიგნის 36-ე გვერდზე, ქვეთავი "Переменные внутри строк". იქამდე და იმის მერე (ჯერჯერობით) ყველაფერი გასაგებია


როცა რიცხვობრივი ცვლადი გინდა გამოიტანოს ტქსტში გარკვეულ ადგილას, აკეთებ ასეთ რაღაცას:
CODE

myscore = 1000                    # ცვლადი, რომელიც შეიცავს ციფრებს
message = 'I scored %s points'    # ცვლადი, რომლიც შეიცავს სტრიქონულ(ტექსტურ) მნიშვნელობას. %s სიმბლოებით მონიშნულ
                                 # ადგილას გამოტანისას ჩაჯდება myscore - ს მნიშვნელობა
print(message % myscore)          # გამოგვაქვს ორივე ცვლადი. სიმბოლო % მიანიშნებს, რომ გამოტანისას myscore - ს მნიშვნელობა
                                 # უნდა ჩაჯდეს ტექსტში %s - ით მონიშნულ ადგილას

გამოიტანს ასეთი ფორმით: I scored 1000 points

ანუ %s სვამ ტექსტში იმ ადგილას, სადაც რიცხვი გინდა ჩაჯდეს,
ხოლო % - ს print - ში სტრიქონულ და რიცხვულ ცვლადებს შორის: print(message % myscore)

Posted by: არწივი9 9 Oct 2018, 21:00
საერთოდ პროგრამირებას სადმე ნორმალურად ასწავლიან თბილისში? უნივერსიტეტებს არ ვგულისხმობ, რამე კერძო კურსები რომ იყოს smile.gif

RedShark
გავარჩევ მაგას smile.gif

Posted by: NinjaRacer 9 Oct 2018, 21:03
QUOTE
საერთოდ პროგრამირებას სადმე ნორმალურად ასწავლიან თბილისში? უნივერსიტეტებს არ ვგულისხმობ, რამე კერძო კურსები რომ იყოს

კი ტო.

საპატრიარქოში ძალიან კარგი ხარისხის ლექციებს დებდნენ ფითონზე ვეღარ ვპოულობ.. კიდევ მაგის გარდაც მინახავს ბევრი ქართველი ლექტორი და ვიცნობ ზოგს. ზოგი თანამშრომელი იყო და ისეთი კარგები იყვნენ და ჭვკიანები მაგათ მოსმენაში დაიღვრებოდი სიამოვნებისგან. რამეს კითხავდი და 3 საათი არ ჩერდებოდნენ smile.gif
ნუ ფიქრობთ რომ არ გვყავს ძალიან მაღალი დონის და ჰაი კლასის პროგრამისტები.

მისერჩ-მოსერჩე გუგლში აბა.

https://www.youtube.com/watch?v=AwOxOIJum0I

Posted by: არწივი9 9 Oct 2018, 21:36
NinjaRacer
QUOTE
მისერჩ-მოსერჩე გუგლში აბა.

ყოფილა:
https://www.youtube.com/watch?v=m9rvnOQz5uY
https://www.youtube.com/watch?v=ISN6BXTBbAM
https://www.youtube.com/watch?v=4pm2SiNOb4E
https://www.youtube.com/watch?v=MGK1bkK59jI&list=PL4UANytNd7Xl7utkf6LyaHvUZTVV30ZVr
რომლებს ვუყურო? ყველას ვერ მივედებ-მოვედები pop.gif

QUOTE
რამეს კითხავდი და 3 საათი არ ჩერდებოდნენ

მიმასწავლე რა ეგეთი, სწორედაც მინდა რომ დაიღვაროს საუბრით old.gif

Posted by: NinjaRacer 9 Oct 2018, 21:46
ყველას biggrin.gif

არა ისეთ უყურე რომელიც დეტალებით არ დაგგრუზავს და მოსაწყენს არ გახდის. ეგეთი იყო learn python the hard way. ეჰ. ფასიანი რო არ გაეხადათ მართლა მაგარი იქნებოდა.

cybersecurity ჯგუფი როა. მანდ იქნება ბლომად ჭკვიანი სასტავი )

ყველაზე მთავარი არის ვიდოე/წიგნის ან ვებგვერდის მოძებნა რომელიც მოგწონს და ჩაჯდომა კეთება რაც შეიძლება მალე. ძალიან დიდი დრო არ უნდა დახარჯო გამოკვლევაზე ჩემი აზრით.
რადგან საბოლოო ჯამში მაინც დამოუკიდებელ კვლევაზე გადახვალ.
stackoverflow-ს ხშირად ესტუმრები.
სხვადასხვა ბლოგებს. github-ზე სხვის დაწერილ კოდებს დასერჩავ. ოღონდ ეგ ცოტა გვიან.
მერე docs.python.org-საც წაიკითხავ და ეგრე.
ოღონდ პირველ ეტაპზე მართლა არ აქვს დიდი მნიშვნელობა. რამე სულერთია ნორმალური წიგნი და ჰაიდა პაშოლ.

QUOTE
მიმასწავლე რა ეგეთი, სწორედაც მინდა რომ დაიღვაროს საუბრით 

მე რომლებსაც ვიცნობდი. მაგათ მაგის დრო ნარდად არ ექნებათ.

Posted by: არწივი9 12 Oct 2018, 18:12
RedShark
აქ ორი შეკითხვა მაქვს:
1.
QUOTE
# გამოგვაქვს ორივე ცვლადი. სიმბოლო % მიანიშნებს, რომ გამოტანისას myscore - ს მნიშვნელობა
                                 # უნდა ჩაჯდეს ტექსტში %s - ით მონიშნულ ადგილას

აი ეს მეორე ნიშანი % რა საჭიროა? თუ მე ბრძანებაში
QUOTE
print(message % myscore)

ვეუბნები რომ "message" გამოიტანე-მეთქი ეს ("message" ანუ) თავის თავში ხომ მოიცავს ნიშან "%s"-ს რომელიც გულისხმობს ცვლადის myscore-ის მნიშვნელობის (ანუ რიცხვ 1000-ის) გამოტანას?

2. ეს ნიშანი %s რომელ ცვლადებს ემსახურება? მხოლოდ myscore-ებს თუ სხვასაც?


NinjaRacer
ჯერ ქართულებს ვარჩევ და მერე გადავალ რთულებზე smile.gif პრინციპში სულაც არ მეჩქარება

Posted by: RedShark 12 Oct 2018, 19:11
არწივი9
QUOTE
აი ეს მეორე ნიშანი % რა საჭიროა? თუ მე ბრძანებაში
QUOTE
print(message % myscore)

ვეუბნები რომ "message" გამოიტანე-მეთქი ეს ("message" ანუ) თავის თავში ხომ მოიცავს ნიშან "%s"-ს რომელიც გულისხმობს ცვლადის myscore-ის მნიშვნელობის (ანუ რიცხვ 1000-ის) გამოტანას?

ფუნქცია print() - ი ითხოვს ასე გამოსატანი მონაცემების სწორად ფორმატირებისთვის.

უფრო გასაგები რომ იყოს გააკეთე ასეთი ექსპერიმენტი:

1. პროცენტის სიმბოლო შეცვალე მძიმით ანუ ასე print(message, myscore) და ნახე როგორ გამოიტანს.
2. სულ არაფერი არ ჩასვა, უბრალოდ ადგილი გამოტოვე: print(message myscore)
3. ცვლადები შეანაცვლე საპირისპიროდ: print(myscore % message)
4. თავიდან დააინიციალიზირე message %s სიმბოლოებით ადგილის მონიშვნის გარეშე, ანუ: message = 'I scored points'
და შემდეგ print(message % myscore)
5. სტრიქონული ცვლადის ნაცვლად პირდაპირ სტრიქონი ჩაწერე პრინტში, ანუ - print('I scored %s point' % myscore)

და თვითონვე მიხვდები რატომ არის საჭირო ეგ სიმბოლოები...

Posted by: NinjaRacer 12 Oct 2018, 19:44
არწივი9
უბრალოდ სილამაზისთვისაა. მოსახერხებელიცაა და სტრუქტურირებისთვის კოდის.

ნუ კიდევ შეიძლება გამოიყენო რაღაცეებში. კრეატიულად.

თავიდან კიდევ ესეც ცოტა გაუგებარია და ეს შეკითხვაც გაგიჩნდება.

CODE

if __name__ == '__main__':
   code()
   someFunc()
   print('blablalba')



თუ სადმე ფუნცქიის ან კლასის გარეთ გაუშვებ. print(__name__)
დაგიბრუნებს __main__
ჰოდა როცა ვიღაცა შენს დაწერილ მოდულს import-ით წამოიღებს ავტომატურად არ გაეშვება.
და შენი __main__ გარემო რომელიც რეალურად შეგიძლია წარმოიდგინო როგორც სუფთა ფურცელი რომელზეც წერ შენს კოდს არ დაბინძურდება ყველაფრით რასაც დაამიპორტებ. დაიმპორტებული ფაულიც ჩაიწერება ფურცელზე, მაგრამ 1 სახელი ერქმევა და ამ სახელის გავლით გადიხარ ყველა ცვლადზე მეთოდზე ფუნქციაზე და და კლასზე რაც ამ მოდულშია. ამ მოდულის ყველა ცვალდი რაც ამ ამოდულის ნეიმსფეისშია ხელმისაწვდომი ხდება შენი მთავარი ნეიმსფეისის დაუბინძურებლად. cry.gif ძალიან საშინლად ავხსენი. ცვლადებს. ფუნქციებს. კლასებს. ამ კოდს გააჩნია თავისი სუფთა ფურცლები. რომელბსაც სხვა სახელი აქვთ. __main__ არის მთავარი name space-ი.

თუ ვერ გაიგებ. https://sebastianraschka.com/Articles/2014_python_scope_and_namespaces.html
ჯერ ბევრი რამე გაუგებრად მოგეჩვენება თან ძალიან. ამიტომ თუ ვერ გებულობ ბოლომდე რამეს მერე მიუბრუნდი. დამიჯერე ყველაფერი ძალიან მარტივია. უბრალოდ გაუგებარი ენით ხსნიან მასწები. როგორც მე ახლა დამეზარა ახსნა გასაგებად. ბოდიში smile.gif დროც არ მაქვს.

expression, namespace და statement რას ნიშნავს ამის განსხვავება და გაგებაც წაგწევს წინ.
ოღონდ უნიშვნელოა. თეორიაა. რომელიც შეგიძლია ამ ეტაპზე ან საერთოდაც გამოტოვო. მაგრამ ეჭვი მაქვს რომ დაგაინტერსებს და მაინც ჩაძვრები ამიტომ smile.gif

ეს მოსაწყენი და თითქოს უსარგებლო ინფორმაცია დაგეხმარება იმის გაგებაში მთლიანი ენა (მისი ლოგიკა) როგორ მუშაობს. ანუ ყველაფერი ცოტა უცნაურად მაგრამ ერთმანეთთან დავაშირებულია.
იგივე მემკვიდრეობა. მისი method resolution order, diamond pattern. მეტაკლასები და ა.შ.

აი ამეებს რაღაც ეტაპზე გაიაზრებ რომელიც უბრალოდ დაგანახებს რა როგორ და რატომ მუშაობს.
თორე არაფეირ განსაკუთრებული არაა რეალურად.
დამწყებმა უნდა გაიარო ჯერ დამწები რაღაცეები და სწორად შვები რომ მარტივით იწყებ.
და ერთი ენის შესწავლის მერე თითქმის ყველას გაიგებ ბევრად უფრო მარტივად.

learning curve არ ვიცი როგორ ითარგმნება მაგრამ რაღაც გარდამტეხი ეტაპი გექნება როცა ყველაფერი გასაგები და მარტივი გახდება და მაგის მერე იწყებ რეალურად სწავლას გამოყენებას და ყველა ფიჩის და ხელსაწყოს გამოყენებას ბოლომდე მაქსიმალური სარგებლთ გამოყენებას.

გამოყენება გამოყენება რამდენჯერ დავწერე. brain fart drug.gif

Posted by: NinjaRacer 14 Oct 2018, 04:37
ვერ ვიპვნე ვიდეობი ამ განყოფილებაში დევს?

წიგნები დევს და ვიდეობი?
არაა თემა სადაც
აი ასეთი ძალიან საინტერესო ვიდეობი იდება?
https://www.youtube.com/watch?v=TMuno5RZNeE

Posted by: crytek 19 Oct 2018, 18:31
მეგობრებო ქრაშ კურსი მოვრჩი( თამაშის წერის თავი არ ამქვს) კლასებამდე საკაიფოდ ჩავიარე აზრზე მოვედი,ვების მხარეს მინდა განვითარდე ჯანგო ფლასკი და როგორი იქნება თქვენი რეკომენდაციები თან პითონშიც რო განვაგრძო რაღაც რაღAცეების სწავლა რას მირჩევთ ?

Posted by: NinjaRacer 27 Oct 2018, 16:12
multithreading-ს არ შევხებივარ თითქმის არ მიწერია მულტი პროცესორ და მულტისრედ პროგრამები
არც blocking-ს არც asyncio და არც concurrency მოდულს არ შევხებივარ. არადა ყველაზე საინტერესო მგონი ეგ ნაწილია.

რამე ტუტორიალი დადევით რა.

Posted by: iraklikairakli 4 Nov 2018, 02:07
მეგობრებოა ვინმე იყენებთ პაითონს ფბზე ფოტოების ასატვირთად?

Posted by: NinjaRacer 5 Nov 2018, 01:52
კორუტინებით tail -f -ის იმპლემენტაცია.

CODE
import time

def corouting(func):
   def starter(*args, **kwargs):
       fc = func(*args, **kwargs)
       next(fc)
       return fc
   return starter

def rline(file, target):
   file.seek(0,2)
   while True:
       line = file.readline()
       if not line:
           time.sleep(0.1)
           continue
       target.send(line)

@corouting
def printer():
   while True:
       line = (yield)
       print(line)

def grep(pattern, lines):
   for line in lines:
       if line in pattern:
           yield line




if __name__ == '__main__':
   f = open('scratch.py', 'r')
   lines = rline(f,printer())
   # pylines = grep('python', lines)
   # for line in pylines:
   #     print(line)
#

Posted by: AnEeEeE=]] 10 Dec 2018, 12:56
def f(x):
def g():
x = 'abc'
print ('x =', x)
def h():
z = x
print ('z=', z)
x = x + 1
print ('x =', x)
h()
g()
print ('x=', x)
return g
x = 3
z = f(x)
print ('x=', x)
print ('x=', z)
z()


აუთფუთში x = 4
z= 4
x = abc
x= 4
x= 3
x= <functi0n f.<locals>.g at 0x7ff3847a3ea0>
x = abc

ამეებს რანაირად მაძლევს ვერ გავიგე user.gif

Posted by: RedShark 10 Dec 2018, 13:24
QUOTE (AnEeEeE=]] @ 10 Dec 2018, 12:56 )
def f(x):
def g():
x = 'abc'
print ('x =', x)
def h():
z = x
print ('z=', z)
x = x + 1
print ('x =', x)
h()
g()
print ('x=', x)
return g
x = 3
z = f(x)
print ('x=', x)
print ('x=', z)
z()


აუთფუთში x = 4
z= 4
x = abc
x= 4
x= 3
x= <functi0n f.<locals>.g at 0x7ff3847a3ea0>
x = abc

ამეებს რანაირად მაძლევს ვერ გავიგე user.gif

პითონში ასე ეშმაკიც ვერ გაიგებს რა გაქვს გაკეთებული biggrin.gif
ან "[CODE][/CODE]" ტეგებს შორის ჩასვი ეგ კოდი ან აქ ატვირთე https://pastebin.com/ და ლინკი დადე.

Posted by: AnEeEeE=]] 10 Dec 2018, 13:54
RedShark
user posted image
ამას გაიგებ?


Posted by: RedShark 10 Dec 2018, 14:39
AnEeEeE=]]

ორი შეცდომა გაქვს:
1. კოდის ბოლოში z() არარსებულ ფუნქციას იძახებ.
2. f(x) ფუნქციიდან g() ფუნქციას არასწორად აბრუნებ (ეს ფუნქცია მნიშვნელობას საერთოდ არ აბრუნებს, return ინსტრუქცია არ აქვს, ე.ი. ან უნდა დააბრუნოს მასევე ფუნქციის მისამართი (<functi0n f.<locals>.g at 0x7ff3847a3ea0>), ან return g() - ს შემთხვევაში საერთოდ არაფერი, ანუ ამ შემთხვევაში გამოიტანს None - ს,
დანარჩენი ყველაფერი სწორად გამოაქვს, დააკვირდი რა თანმიმდევრობით გამოიძახება გარე და შიდა ფუნქციები და მიხვდები, აგერ მოვნიშნე:

CODE

def f(x):
   def g():
       x = "abc"                              # ეს x ფუნქცია g() - ს ლოკალური ცვლადია, f(x) - თან საერთო არაფერი აქვს.
       print("3) in functi0n g() x =", x)
   def h():
       z = x                                  # აქ  f(x) - ით ხდება h() - ის ლოკ. z - ის ინიციალიზაცია
       print("2) in functi0n h() z =", z)
   x = x + 1                                  # პირველ რიგში x - ის (ანუ f(x) - ის) ინკრემენტაცია ხდება
   print("1) in functi0n f() x =", x)
   h()                                        # ამ ფუნქციას f(x) - ით ინიციალიზირებული ლოკ. z გამოაქვს
   g()                                        # ამ ფუნქციას საკუთარი ლოკ. x
   print("4) in functi0n f() x =", x)         # ამას - f(x)
   return g

x = 3
z = f(x)
print("x =", x)
print("z =", z)

Posted by: NinjaRacer 10 Dec 2018, 16:11
AnEeEeE=]]
https://books.google.ge/books?id=KabKDAAAQBAJ&pg=PA44&lpg=PA44&dq=def+f(x):+def+g():+x+%3D+%27abc%27+print+(%27x+%3D%27,+x)+def+h():+z+%3D+x+print+(%27z%3D%27,+z)+x+%3D+x+%2B+1+print+(%27x+%3D%27,+x)+h()+g()+print+(%27x%3D%27,+x)+return+g+x+%3D+3+z+%3D+f(x)+print+(%27x%3D%27,+x)+print+(%27x%3D%27,+z)+z()&source=bl&ots=ETAPM0L-as&sig=iHtWVrclMxvQeJDXIwmc2N9tb0U&hl=ka&sa=X&ved=2ahUKEwj2hevYm5XfAhVDhSwKHRBhDsUQ6AEwAXoECAkQAQ#v=onepage&q&f=false

ამ წიგნიდან არი ეს მაგალითი ტოესწ სავარჯიშო და აქ წერია ახსნა. რომ შეხვალ მარჯვენა მხარეს. ეგ სავარჯიშო რასაც აკეთებ(ვებგვერდი), არ ვიცი რომელია. ყოჩაღ კარგი სავარჯიშოა ეტყობა, სკოუპებს გასწავლის. ეტყობა „MIT' კურსებიდან მიხვედი იქამდე up.gif

ზემოთ იმ წიგნში ხატია stack frame და თანმიმდევრულადაა ნაჩვენები რომელი ცვლადები რა დროს იქმნება. ქვემოთ ახსნაც უწერია.

მეზარება თარგმნა. თვალებში ვერ ვიხედები ჯერ user.gif. წაიკითხე და მერე ერთად გავარჩიოთ.
პროგრამის სთექი არის სია რომელშიც ინახება ცვლადების სახელები და გაშვებისას ეს სია იცვლება დინამიურად, გააჩნია სად არის ცვლადი დეკლარირებული.
ამ თავს functi0ns, scoping and abstraction ქვია და ძალიან კარგი რომ მაგას სწავლობ up.gif

არაფერი შეცდომით არ გიწერია. ეგ UnboundLocalError X referenced before asignment რომ გიგდებს X-ზე კარგია. ანუ რომ დაინახო სად და რადროს რომელი სკოუპი რას აკეთებს და ამის სწავლა მნიშვნელოვანია.

Posted by: AnEeEeE=]] 10 Dec 2018, 17:01
NinjaRacer
QUOTE
ამ წიგნიდან არი ეს მაგალითი ტოესწ სავარჯიშო და აქ წერია ახსნა. რომ შეხვალ მარჯვენა მხარეს. ეგ სავარჯიშო რასაც აკეთებ(ვებგვერდი), არ ვიცი რომელია. ყოჩაღ კარგი სავარჯიშოა ეტყობა, სკოუპებს გასწავლის. ეტყობა „MIT' კურსებიდან მიხვედი იქამდე

მაგას ვკითხულობ ზუსტად, ახსნა ვერ გავიგე კარგად=))

ეს ვები , ლექციების კურსში ახსენეს, მაგათი სტუდენტების გაკეთებულია

Posted by: RedShark 10 Dec 2018, 17:07
QUOTE (NinjaRacer)
არაფერი შეცდომით არ გიწერია. ეგ UnboundLocalError X referenced before asignment რომ გიგდებს X-ზე კარგია. ანუ რომ დაინახო სად და რადროს რომელი სკოუპი რას აკეთებს და ამის სწავლა მნიშვნელოვანია.

მართალია, ახლა გადავამოწმე, ეგ z() ბოლოში არ არის შეცდომა, მაგრამ ფუნქციის ასე გამოძახება ჯერ არსად შემხვედრია biggrin.gif

Posted by: NinjaRacer 10 Dec 2018, 17:10
AnEeEeE=]]

wow. ამ MIT-ის ლექციებს რომ უყურებ მაგარია)) მეც ვუყურებდი. მანდ 3 ტიპი კითხულობს. ერთი ქალი. ამ ქალის მერე ვიღაც ტიპი იყო და იმდენად მაღიზიანებდა რომ დავანებე biggrin.gif

QUOTE
ახსნა ვერ გავიგე კარგად=))


მე გავიგე კარგად, ოღონდ ჯერ ყველაფერი ტრიალებს ცოტა რომ გამოვალ მდგომარებიდან გავარჩიოთ და ახსნასაც დავწერ)

მაგარია ასეთი ინტერესით რომ ხარ. ეგრე თუ გააგრძელე ცოტა ხანში აქეთ წაიკითხავ ლექციებს up.gif

Posted by: AnEeEeE=]] 10 Dec 2018, 17:24
QUOTE
ერთი ქალი. ამ ქალის მერე ვიღაც ტიპი იყო და იმდენად მაღიზიანებდა რომ დავანებე

ეგ გოგო რომ მომეწონა ძაან მაგიტო დავიწყე სწავლა biggrin.gif თან კარგად წავიდა... ხო ვიცი მერე სხვა ტიპია ჯერ არ მივსულვარ იქამდე.

მაგარი ლექციები აქვს მიტს. იმდენი რამე მაქვს ნაყურები რო ეხლა გადავწყვიტე ესეც ვცადო , თან გამომადგება ერთი საქმისთვის.

Posted by: NinjaRacer 10 Dec 2018, 17:37
AnEeEeE=]]
QUOTE
ეგ გოგო რომ მომეწონა ძაან მაგიტო

მეც ძალიან საყვარელია. მაგრად ასწორებს ინტელექტი რომ გადმოსდით ყველა მხრიდან ქალებს. 2 უკიდურესობაა სულ smile.gif
ჰოდა ამ ქალის მერე მოდის ძალიან მნიშვნელოვანი algorithm-ები (ჩემი აქილევსის ქუსლი :დ )
ჰოდა ტამტანჯა ამ კაცმა 1.5Xსიჩქარითაც ვუყურე ასეც ვქენი ისეც მაგრამ ვერა რა. მერე მივუბრუნდები მეთქი.

ჰოდა. მოვედი აზრზე ძლივს გუშინ ექიმებმა გამყიპეს წამლებით და ძლივს მოვედი აზრზე. ჰოდა ამწუთას გადამიარა და მოდი გავარჩიოთ. ეს სკოუპები მნიშნველოვანია. მეც არ მესმის რაღაცეები მანდ უფრო სწორედ ამის თანმიმდევრობა არ ვიცი.

აი მაგალითად ფუნქცია ფუნქციაში როცაა:
CODE

def print_msg(number):
   def printer():
       "Here we are using the nonlocal keyword"
       nonlocal number
       number=3
       print(number)
   printer()
   print(number)

print_msg(9)


https://www.learnpython.org/en/Closures აქედან წამოვიღე ეგ მაგალითი.
ის არ მესმის რომ როცა ფუნქცია ფუნქციაშია პირველ ფუნქციაში რომ შედის თავის კოდს უშვებს ჯერ თუ ჯერ შიდა ფუნქციაზე გადადის. ამის გარკვევა პრინციპში მარტივია. print სტეიტმენტს დავამატებ ფუნქციის ბოდიში (body) და ვნახავ)

შენ დადებულ მაგალითს ჩავყვეთ მოდი.

Posted by: AnEeEeE=]] 10 Dec 2018, 17:57
NinjaRacer
QUOTE
მეც ძალიან საყვარელია. მაგრად ასწორებს ინტელექტი რომ გადმოსდით ყველა მხრიდან ქალებს. 2 უკიდურესობაა სულ

კიი, ძაან მაგარი ქალია, რუმინელია სხვათაშორის.


QUOTE
შენ დადებულ მაგალითს ჩავყვეთ მოდი.

ეხლა არ მცალია, გავდივარ, ხვალ მოვალ ამაზე. შენ სტუდენტი ხარ? თუ მოყვარული უბრალოდ?

Posted by: NinjaRacer 10 Dec 2018, 18:17
QUOTE
კიი, ძაან მაგარი ქალია, რუმინელია სხვათაშორის.

ნი ზნალა. ოჩენ ინწერესნო.


QUOTE
ეხლა არ მცალია, გავდივარ, ხვალ მოვალ ამაზე. შენ სტუდენტი ხარ? თუ მოყვარული უბრალოდ?

რომ არ გავაოფო ძალიან პმ გეტყვი მოდი.


მოკლედ შენი მაგალითი.
CODE

def f(x):
   def g():
       x= 'abc'
       print('x =', x)
   def h():
       z = x
       print('z=', z)
   x = x + 1
   print('x =', x)
   h()
   g()
   print('x=', x)
   return g

x = 3
z = f(x)
# print('x=', x)
# print('x=', z)
# z()

სპეციალურად და კომენტარე ბოლოში ხაზე რომ დაგენახა რას აბრუნებს თითოეული.

z = f(x) იგივე z = f(3)
აბრუნებს ამას.
QUOTE
x = 4
z= 4
x = abc
x= 4

რადგან.
პროსტა f(3) რომ გამოიძახო მაინც იგივეს მოგცემს.
პირველი ამას გააკეთებს ფუნქციის ბოდიში:
x = x + 1
print('x =', x) # ანუ დაწერს x = 4
მერე გადავა h() ჰ-ჩი ფუნქციის შიგნით ფუნქციაა და თავისი ლოკალური ცვლადები და სკოუპი აქვს ამითომ ამას დააბრუნებს h:
QUOTE
x = 4
რადგან h-ის ბოდიში z = x აკეთებ.

შემდეგ g()-ს იძახებს და ესეც იგივე პრინციპით დააბურნებს
x = 'abc' რადგან g-შიგნით x-ი სხვაა და მის გარეთ სხვა. იმიტომ რომ ფუნქციას თავისი სკოუპი აქვს.
გარეთ რომ გამოვა g-დან ეს ბოლო პრინტი დარჩება.
print('x=', x)
x = 4 ისევ რადგან არ შეცვლილა f-ის ბოდიში x-ი.

f-ში რადგან return g წერია და ეს g ფრჩხილების გაარეშეა () დააბრუნებს g ობიექტს ფუნქციას ანუ რაც f-ის შიგნითაა იმ g ფუნქციის ობიექტს.

დალშე მერე გავარჩიოთ.

Posted by: Definitely_Maybe 10 Dec 2018, 19:54
NinjaRacer

AnEeEeE=]]

რომელ ლექციებზე საუბრობთ? იქნებ დადოთ ლინკი?

udemy -ს რამოდენიმე კურსი ავიღე პითონზე და იმას მივყვები აჩქარებულ ტემპში. დავიტანჯე წიგნების კითხვით.
აი ეს ორი კურსი მაქ ჯერჯერობით. თან გამოცანებსაც ვეტანები ალაგალაგ.

user posted image

Posted by: NinjaRacer 10 Dec 2018, 21:02
Definitely_Maybe

ზდრასტი. კარგია რომ არ დაგინებებია პითონისთვის.

https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/
ინებე.

და აი ეს კიდევ.
https://www.codecademy.com/catalog/subject/data-science

და
ეს
https://www.youtube.com/watch?v=MOdlp1d0PNA

Posted by: Definitely_Maybe 10 Dec 2018, 22:12
NinjaRacer
მადლობა. რას ამბობ ისეთ მუღამში მოვედი როგორ დავანებებდი თავს. მოუცლელობის გამო ასეთი გზა გამოვნახე. 1 საათით ადრე ვდგები და სამსახურში წასვლამდე დასვენებულ გონებაზე ვკითხულობ და ვუსმენ ლექციებს. ნელ ნელა მინდა მოვუმატო დროს.

Posted by: NinjaRacer 11 Dec 2018, 02:47
Definitely_Maybe
არაფერს გელუშ რაზეა საუბარი ჩემო კეთილო ადამიანო.
QUOTE
რას ამბობ ისეთ მუღამში მოვედი როგორ დავანებებდი თავს

მეც ძალიან მიხაროდა თქვენი გამოჩენა)

QUOTE
სამსახურში წასვლამდე დასვენებულ გონებაზე ვკითხულობ

ჭკვიანი ადამიანი. აი მეც შევატყვე რომ დილას ყველაზე მეტი ბრეინფაუერი მაქვს. საღამოსკენ მინუსებში გადადის biggrin.gif რას ვისწავლე იმის unსწავლას ვაკეთებ biggrin.gif

ისე კი იმდენად შემიყვარდა კოდის წერა უვკე ჩვევაში მექცა.

კლავიატურისკენ გამირბის ხელი სულ. ძმაკაცები მეღადავებიან ამას ეხლა სახლში უნდა თავის ლეპტოპთან იმიტომ გარბისო biggrin.gif

Posted by: Definitely_Maybe 11 Dec 2018, 10:53
NinjaRacer
smile.gif ვფიქრობ სხვა ადამიანი გგონივარ.
* * *
ეს კურსები გაიარეთ? ღირს ალბათ ჰომ?
ალგებრა გეომეტრიაში კარგად ვიყავი თავის დროზე ფიზ. მათ. სკოლაში მაგრამ მერე შეხება მარტო გეომეტრიასთან მქონდა ალაგალაგ.
user posted image

Posted by: NinjaRacer 11 Dec 2018, 13:28
Definitely_Maybe
QUOTE
ვფიქრობ სხვა ადამიანი გგონივარ.

ვიხუმრე givi.gif ვიცი რომ გივია არ ხართ უბრლაოდ გამხიარულება მინდოდა ცოტა.
ყინულის დამსხვრევა. ნამეტანი მოღუშულები ვმოძრაობთ ისედაც აქ. იმედია არ გეწყინათ.

წრფივი ალგებრა მინდოდა გამევლო, მაგრამ დამეზარა.

Posted by: Definitely_Maybe 11 Dec 2018, 15:31
NinjaRacer
biggrin.gif biggrin.gif კარგი იყო, აშკარად გამოგივიდა smile.gif

QUOTE
ნამეტანი მოღუშულები ვმოძრაობთ ისედაც აქ.

ცოტა მეტი ტვინსატეხებია საჭირო, მაგრამ ჯერ მე მაინც დამწყები ვარ.

Posted by: AnEeEeE=]] 11 Dec 2018, 15:35
Definitely_Maybe
QUOTE
ალგებრა გეომეტრიაში კარგად ვიყავი თავის დროზე ფიზ. მათ. სკოლაში მაგრამ მერე შეხება მარტო გეომეტრიასთან მქონდა ალაგალაგ.

წრფივი და სტატისტიკა ძალიან კარგებია, კალკულუსზე არ მიცდია.

Posted by: NinjaRacer 12 Dec 2018, 08:09
აი ამის ამოხსნა იქნება პიზდეცი
https://py.checkio.org/en/mission/8-puzzle/

ძალიან რთულია user.gif
კი ამოვხსნი მაგრამ სავარაუდოდ მთელი დღე დამჭირდება user.gif

Posted by: Definitely_Maybe 12 Dec 2018, 08:29

AnEeEeE=]]
მადლობა

NinjaRacer
ახალ გაღვიძებულზე ცოტა ძნელია ჯერ. დავფიქრდები მოგვიანებით მაინც smile.gif ისე ჯერ ამ ლისტებს და ლექსიკონებს ბოლომდე ვერ შევეჩვიე ჯერ.

Posted by: NinjaRacer 12 Dec 2018, 08:31
QUOTE
ისე ჯერ ამ ლისტებს და ლექსიკონებს ბოლომდე ვერ შევეჩვიე ჯერ.


მე პირიქით ეგ მომწონს.
აი ჯავასკრიპტში მართლა ვერ შევეგუე. პითონში ბევრად მარტივადაა.
' '.join(list)
sorted(list)

ყველაზე ხშირად ეს ორი ოპერაცია გჭირდება ლისტებზე.

Posted by: Definitely_Maybe 12 Dec 2018, 08:43
NinjaRacer
ერთმანეთში ჩასმული ლისტები, ტუპლები, მერე ეს *args **kwargs გამოჩნდა. ახლა გავდივარ და ლაგდება ნელ ნელა თავში. დალაგდება სად წავა ცოტა დრო მინდა ეტყობა smile.gif

Posted by: NinjaRacer 12 Dec 2018, 08:48
Definitely_Maybe
QUOTE
რთმანეთში ჩასმული ლისტები, ტუპლები, მერე ეს *args **kwargs გამოჩნდა. ახლა გავდივარ და ლაგდება ნელ ნელა თავში. დალაგდება სად წავა ცოტა დრო მინდა ეტყობა

ჰო როცა ფიქრობ რომ ყველაფერი გერევა თავში ზუსტად მაგის მერე აღმოაჩენ ცოტა ხანში რომ ყველაფერი გასაგები და მარტივი ხდება.

CODE
first, *danarcheni = [1,2,3,4,5,66]


first იქნება 1
დანარჩენი 2-დან 66მდე

ქივორდი იგივე default argument-ია., მანდ სხვათაშორის შეგიძლია ლექსიკონი გაუშვა სადაც **kwargs-ელოდება და იმუშავებს.

Posted by: Definitely_Maybe 12 Dec 2018, 09:02
NinjaRacer

QUOTE
first იქნება 1
დანარჩენი 2-დან 66მდე

ჰო მაგას მივხვდი.



* * *
user posted image

თითქოს ადვილი დავალებაა, სტრინგს იღებს და ყოველ მეორე ასოს ადიდებს biggrin.gif და აბრუნებს ისევ სტრინგს. პითონის კონსოლში (თუ რაც ქვია) მუშაობს ეს ფუნქცია და ამ დავალების გვერდზე რომ
ჩავწერე კოდი მიწერს False is not True: This is incorrect

CODE
def myfunc(str):
   str1=''
   for word in str:
       if str.index(word)%2==0:
           str1+=word.upper()
       else:
           str1+=word
   return str1

* * *
გავაკეთე smile.gif ინდექსმა შემიყვანა შეცდომაში smile.gif


CODE

def myfunc(str):
   str1=''
   for ind, let in enumerate(str):
       if ind%2==0:
           str1+=let.upper()
       else:
           str1+=let
   return str1

Posted by: NinjaRacer 17 Dec 2018, 00:11
Definitely_Maybe
enumerate-ით გაგიკეთებია იდეალურად მიგიგნია ზუსტად ეგეთი შემთხვევებს აკვდება.

ჰო ინდექსი პოზიციას გიბრუნებს თუ იპოვა რამე იმის პოზიციას.


0
1
2
2
4
5
6
4
8
2
10
HeLLO WORLD

რამდენჯერ მეორდება. L ასო. ყოველთვის L პოზიციას დააბრუნებდა. 2-ს.

ისე ასეც შეიძლება გააკეთო და ყოველ იტერაციაზე ცვალო true/false.

toggle ვარიანტში.

CODE

def myfunc(str):
   second = True
   str1 = ''
   for i in str:
       if second:
           str1 += i.upper()
           second = False
       else:
           str1 += i
           second = True
   return str1


მაგრამ შენი კოდი ბევრად ჯობია.
ეს toggle რაც მე დავწერე შეიძლება სხვაგან გამოგადგეს უბრალოდ.
ყოველ იტერაციაზე second ხან true იქნება ხან false. რიგრიგობით.

p.s პითონს ენა არ ჯობია. ერთი სული მაქვს როდის მოვრჩები ამ ანგულარებს და რეაქტებს რო ისევ პითონში ვწერო. მართლა ყველაზე მარტივი ენაა და ყველაზე ლამაზი სტრუქტურა და სინტაქსი აქვს. ამიტომაცაა ყველგან მოდებული yes.gif

Posted by: Definitely_Maybe 17 Dec 2018, 08:24
NinjaRacer
QUOTE
ყოველ იტერაციაზე second ხან true იქნება ხან false. რიგრიგობით.

ჰაჰ, რა საინტერესო გზაა, ხან მართალია ხან არა smile.gif რიგრიგობით. ასწორებს.

წრიფ ალგებრაზე საკმაოდ საინტერესო სერია ვნახე უტუბზე. გასაგებად და მარტივად ხსნის, MIT -საც ვნახავ ამის მერე.
https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab

Posted by: AnEeEeE=]] 17 Dec 2018, 14:30


CODE
number = input('enter a number: ')
epsilon = 0.1
guess = 0.1
increment = 0.01
num_guesses = 0
while abs(guess**3 - number) >= epsilon and guess <= number:
   guess += increment
   num_guesses += 1
print('num_guesses =', num_guesses)
if abs(guess**3 - number) >= epsilon:
   print('failed on coob root of', number,'with these parameters,')
else:
   print(guess,'is close to the cube root of', number)

რატო არ იპრინტება? user.gif

Posted by: Definitely_Maybe 17 Dec 2018, 14:58
AnEeEeE=]]
სავარაუდოდ int-ში უნდა დაკასტო. ინპუთით ჰო სტრინგი შედის ეგრევე

number =int( input('enter a number: '))

user posted image

Posted by: AnEeEeE=]] 17 Dec 2018, 15:22
Definitely_Maybe
QUOTE
სავარაუდოდ int-ში უნდა დაკასტო. ინპუთით ჰო სტრინგი შედის ეგრევე

კიკი ამიხსნეს უკვე, მალდობა მაინც

Posted by: NinjaRacer 17 Dec 2018, 15:23
Definitely_Maybe
codewarriors-ზე არ ხარ?

მანდ აქვთ კარგი ამოცანები. ცოტა რთულიც კია )

Posted by: Definitely_Maybe 17 Dec 2018, 15:33
NinjaRacer
არა არ ვიცი, ჯერ არსად არ ვარ. udemy -ს კურსს მივყვები და იქაურ დავალებებს ვაკეთებ smile.gif
შევინახავ მაგ საიტს. ვნახავ აუცილებლად.

Posted by: NinjaRacer 17 Dec 2018, 15:46
Definitely_Maybe
ეგ და checkio.org არის ჯერჯერობით აღმოჩენა.


Posted by: AnEeEeE=]] 18 Dec 2018, 13:05
CODE

cube = 8
epsilon = 0.01
num_guesses = 0
low = 0
high = cube
guess = (high + low)/2.0
while abs(guess*3 - cube) >= epsilon:
   if guess**3 < cube:
       low = guess
   else:
       high = guess
   guess = (high + low)/2.0
   num_guesses += 1
print('num_guesses = ', num_guesses)
print(guess, 'is close to the cube root of', cube)


რა ჯანდაბა ჭირს user.gif

არაფერს არ პრინტავს ,
უსასრულო ლუპია ? 2 ზე ხო ხედავს რო ვაილის პირობა არ სრულდება და რატო აგრძელებს? facepalm:

Posted by: Definitely_Maybe 18 Dec 2018, 13:57
AnEeEeE=]]
while abs(guess*3 - cube) >= epsilon: კუბში აყვანა თუ გინდა ერთი ვარსკვლავი გამოგრჩა, მგონი ამის ბრალია smile.gif

Posted by: AnEeEeE=]] 18 Dec 2018, 14:01
QUOTE
while abs(guess*3 - cube) >= epsilon: კუბში აყვანა თუ გინდა ერთი ვარსკვლავი გამოგრჩა, მგონი ამის ბრალია

ვაიმე მადლობა 2kiss.gif

Posted by: Irakli2013 18 Dec 2018, 22:07
QUOTE (NinjaRacer)
ეგ და checkio.org არის ჯერჯერობით აღმოჩენა.



codeforces სცადე

Posted by: AnEeEeE=]] 20 Dec 2018, 11:25
CODE
def get_data(aTuple):
   nums = ()
   words = ()
   for t in aTuple:
       if t[1] not in words:
           words = words +(t[1],)
   min_n = min(nums)
   max_n = max (nums)
   unique_words = len(words)
   return (min_n, max_n, unique_words)
test = ((1,"a"),(2,"b"),(1,"a"),(7,"b"))        
(a,b,c) = get_data(test)
print("a:",a,"b",b,"c:",c)


min() arg is an empty sequence , ამას რატო მიწერს user.gif

Posted by: ჩანიძე 20 Dec 2018, 12:58
AnEeEeE=]]
nums-ში არაფერს ამატებ
ცარიელ მიმდევრობას მინი და მაქსი ხო ვერ ექნება

Posted by: NinjaRacer 20 Dec 2018, 13:15
AnEeEeE=]]
print is your friend smile.gif

როცა ლუპში ან სადმე სხვაგან ვერ იღებ იმ შედეგს რასაც ელოდებოდი და ცვლადებს ავსებ loop-იდან წამოღებული ცვლადებით ამ შემთხვევაში t და t[1]. ამ ლუპში კარგი იქნებოდა t-ს მნიშვნელობა დაინახო პრინტით. for t in aTupple და მერე ცალკე t-ს if -ში ატარებ სასარგებლოა იცოდე t[1] რას წარმოადგენს ყველა ნაბიჯზე. ამიტომ საუკეთესო დებაგის საშუალებაა print

აი ასე.
CODE

def get_data(aTuple):
  nums = ()
  words = ()
  for t in aTuple:
      print(t, '<<< this is t and this is t[1]:\t', t[1])
      if t[1] not in words:
          words = words +(t[1],)
  print(words, 'words after for loop')
  min_n = min(nums)
  max_n = max (nums)
  unique_words = len(words)
  return (min_n, max_n, unique_words)

test = ((1,"a"),(2,"b"),(1,"a"),(7,"b"))
(a,b,c) = get_data(test)
print("a:",a,"b",b,"c:",c)

test = ((1,"a"),(2,"b"),(1,"a"),(7,"b"))
(a,b,c) = get_data(test)
print("a:",a,"b",b,"c:",c)


ეს დაგიწერს ამას + ყველა ექსეფშენს
CODE

/home/gent/.virtualenvs/freshProject/bin/python /home/gent/.PyCharmCE2018.1/config/scratches/floats.py
Traceback (most recent call last):
(1, 'a') <<< this is t and this is t[1]:  a
  File "/home/gent/.PyCharmCE2018.1/config/scratches/floats.py", line 15, in <module>
    (a,b,c) = get_data(test)
(2, 'b') <<< this is t and this is t[1]:  b
  File "/home/gent/.PyCharmCE2018.1/config/scratches/floats.py", line 9, in get_data
(1, 'a') <<< this is t and this is t[1]:  a
    min_n = min(nums)
(7, 'b') <<< this is t and this is t[1]:  b
ValueError: min() arg is an empty sequence
('a', 'b') words after for loop

Process finished with exit code 1



მართლაც nums = () გაქვს დადეკლარირებული tuple-ია და მერე არსად აღარ ეხები და არაფრით ავსებ ამიტომ ცარიელccია. ეხლა გავყვეთ ლოგიკურად და შევავსოთ num


CODE

def get_data(aTuple):
  nums = ()
  words = ()
  for t in aTuple:
      print(t, '<<< this is t and this is t[1]:\t', t[1])
      nums += (t[0],)
      if t[1] not in words:
          words = words +(t[1],)
  print(words, '\t words after for loop')
  print(nums, '\t nums after for loop')
  min_n = min(nums)
  max_n = max (nums)
  unique_words = len(words)
  return (min_n, max_n, unique_words)

test = ((1,"a"),(2,"b"),(1,"a"),(7,"b"))
(a,b,c) = get_data(test)
print("a:",a,"b",b,"unique words:",c)


აი ეს კოდი იმუშავებს.
ნახე nums += დავამატე და +=-ის მარჯვნივ რაც არის () ჩავსვი და შიგნით , -ც დავუწერე. რომ ავტომატურად tuple-ში გადაეყვანა, თორე int იქნებოდა და შეცოდმას დაწერდა.
int-ის კონკატენაცია არ შიეძლება.
და ბოლო print-ში, c მაგივრად unique words ჩავწერე. რადგან შენი ფუნქცია 3 რაგაცას აბრუნებს და a, b, c -ს ანიჭებს return (min_n, max_n, unique_words) -ის მნისვნელობას.
ეს: (a,b,c) = get_data(test) იგივიეა რაც: a,b,c = return (min_n, max_n, unique_words)

Posted by: AnEeEeE=]] 20 Dec 2018, 14:25
NinjaRacer
ჩანიძე
მადლობაა, მივხვდი

Posted by: AnEeEeE=]] 26 Dec 2018, 15:45
CODE
def ispal(x):
     temp = x[:]
     temp.reverse()
     if temp == x:
         return True
     else:
         return False
def silly(n):
     result = []
     for i in range(n):
         elem = raw_input('enter element: ')
         result.append(elem)
     print (result)
     if ispal(result):
        print(yes)
     else:
        print (no)

ეს კოდი რატო არ იპრინტება? user.gif კიარადა ინფუთი არ გამოდის ვაფშე და რატო

Posted by: Definitely_Maybe 26 Dec 2018, 16:39
AnEeEeE=]]
არ გამოგიძახებია ეგ ფუნქცია და როგორ გამოვა ინფუთი?

Posted by: AnEeEeE=]] 26 Dec 2018, 16:40
QUOTE
არ გამოგიძახებია ეგ ფუნქცია და როგორ გამოვა ინფუთი?

გამოვიძახე და არ შვება მაინც ტემპ.რევერსეს არ აკეთებს ზედა ლისტი არ უნდა შეაბრუნოს?

აი შუაში რატო წერია ეს ვერ გავიგე elem = raw_input('enter element: ')

Posted by: Definitely_Maybe 26 Dec 2018, 16:41
elem = raw_input('enter element: ')

მარტო input('enter element: ') არ უნდა ინფუთი რომ გამოიტანოს? ეს raw რაარის?

Posted by: NinjaRacer 26 Dec 2018, 16:43
sorted(temp, reverse=true) ეს ცადე
raw_input -ის მაგივრად ახალ პითონში input()შეგიძლია მგონი გამოიყენო.


და yes და no ფრჩხილებში ჩასვი.

Posted by: AnEeEeE=]] 26 Dec 2018, 16:43
QUOTE
მარტო input('enter element: ') არ უნდა ინფუთი რომ გამოიტანოს? ეს raw რაარის?

სტრინგად აღიქვავს ინფუთს

Posted by: Definitely_Maybe 26 Dec 2018, 16:45
AnEeEeE=]]
QUOTE
სტრინგად აღიქვავს ინფუთს


მე ასე ვიცი
x=str(input('enter string'))

Posted by: AnEeEeE=]] 26 Dec 2018, 16:48
QUOTE
raw_input -ის მაგივრად ახალ პითონში input()შეგიძლია მგონი გამოიყენო.

QUOTE
მე ასე ვიცი
x=str(input('enter string'))

ჰოო ძველი წიგნია რასცა ვკითხულობ ეხლა დავგუგლე


QUOTE
sorted(temp, reverse=true) ეს ცადე

ეს ჯერ არ გამივლია lol.gif

Posted by: NinjaRacer 26 Dec 2018, 16:50
QUOTE
sorted(temp, reverse=true) ეს ცადე

შემეშალა True დიდი ასოთი უნდა.

input() გამოიყენე raw_input-ის ნაცვლად. raw_ ძველი სინტაქსია.

და print-ში yes და no ფრჩხილებში ჩავსვი. სტრინგები.

pycharm გამოიყენე რა. ეგეთ შეცდომებს მარტივად გაგისწორებს თვითონ.

Posted by: AnEeEeE=]] 26 Dec 2018, 16:55
CODE
temp = x[:]
     temp.reverse()
     if temp == x:
         return True


აქ რა პრობლემაა ვერ გავიგე ლისტი ხო მუთაბლი არის ტემპ ხო უნდა გახდეს ტემპ უკუღმა და მერე შედარებს სწორს და უკუღმას რატო არ მუშაობს/.

QUOTE
შემეშალა True დიდი ასოთი უნდა.

input() გამოიყენე raw_input-ის ნაცვლად. raw_ ძველი სინტაქსია.

და print-ში yes და no ფრჩხილებში ჩავსვი. სტრინგები.

pycharm გამოიყენე რა. ეგეთ შეცდომებს მარტივად გაგისწორებს თვითონ.

This post has been edited by NinjaRacer on 26 Dec 2018, 16

ესენი გავასწორე
* * *
აა მგონი მივხვდიი იქსს რასაც ვაძლევ ერთელემენტიან ლისთად ხედავს მგონი და ვერ აბრუნებს უკან user.gif

Posted by: Definitely_Maybe 26 Dec 2018, 17:13
AttributeError: 'str' object has no attribute 'reverse'
* * *
AnEeEeE=]]
ტემპ უკუღმა მე ასე ვიცი smile.gif
CODE
temp[::-1]

Posted by: AnEeEeE=]] 26 Dec 2018, 17:16
Definitely_Maybe
QUOTE
ტემპ უკუღმა მე ასე ვიცი 
temp[::-1]

ამდენი წესები არვიცი, ის აკეთებს უკუღმა რაც დავწერე უბრალოდ ლისტს ერთელემენტიანად ხედავს, ისე უნდა გავაკეთო რომ სიტყვა რასაც შევიყვან ასოებად დაშალოს შეაბრუნოს და შეადაროს ერთმანეთი თუ იგივე იქნება თრუ დასვას.

Posted by: Definitely_Maybe 26 Dec 2018, 17:18
AnEeEeE=]]
If you specify a slice with three parameters S[a:b:d], the third parameter specifies the step, same as for functi0n range(). In this case only the characters with the following index are taken: a a + d, a + 2 * d and so on, until and not including the character with index b. If the third parameter equals to 2, the slice takes every second character, and if the step of the slice equals to -1, the characters go in reverse order. For example, you can reverse a string like this: S[::-1].

Posted by: AnEeEeE=]] 26 Dec 2018, 17:28
Definitely_Maybe
არააა მე ლისტში ვიღებ სტრინგს, სტრინგის ოპერაციებს არ ვიყენებ

პ.ს. ვსო უკვე ძაან დავიღალე ხვალ მივუბრუნდები facepalm.gif

Posted by: NinjaRacer 26 Dec 2018, 17:30
AnEeEeE=]]
სტრინგის დაშლა თუ გინდა ლისტად split() გამოიყენე arr = სტრინ.split()

Posted by: Definitely_Maybe 26 Dec 2018, 17:41
AnEeEeE=]]
ლისტის ელემენტებსაც ისევე აბრუნებს უკან როგორც სტრინგს smile.gif [ : : -1]

NinjaRacer
QUOTE
სტრინგის დაშლა თუ გინდა ლისტად split() გამოიყენე arr = სტრინ.split()

და ეს უფრო მარტივი არაა? list(x)

Posted by: RedShark 26 Dec 2018, 23:07
AnEeEeE=]]
QUOTE
ისე უნდა გავაკეთო რომ სიტყვა რასაც შევიყვან ასოებად დაშალოს შეაბრუნოს და შეადაროს ერთმანეთი თუ იგივე იქნება თრუ დასვას.

ამის მიხედვით გააკეთე:
CODE
def is_palindrome(str):
   rev_str = reversed(str)
   if list(str) == list(rev_str):
       return True
   else:
       return False

def main():
   str = input("enter some string: ")
   if is_palindrome(str):
       print("string '" + str + "' is palindrome")
   else:
       print("string '" + str + "' is not palindrome")

main()



* * *
QUOTE (Definitely_Maybe)
elem = raw_input('enter element: ')

მარტო input('enter element: ') არ უნდა ინფუთი რომ გამოიტანოს? ეს raw რაარის?

პითონ 2 - ის ინფუთია.

Posted by: AnEeEeE=]] 27 Dec 2018, 09:25
RedShark
QUOTE
def is_palindrome(str):
   rev_str = reversed(str)
   if list(str) == list(rev_str):
       return True
   else:
       return False

def main():
   str = input("enter some string: ")
   if is_palindrome(str):
       print("string '" + str + "' is palindrome")
   else:
       print("string '" + str + "' is not palindrome")

main()

რა კარგად წერია chups.gif

Posted by: Definitely_Maybe 27 Dec 2018, 11:25
RedShark
AnEeEeE=]]
QUOTE
ისე უნდა გავაკეთო რომ სიტყვა რასაც შევიყვან ასოებად დაშალოს შეაბრუნოს და შეადაროს ერთმანეთი თუ იგივე იქნება თრუ დასვას.


უი მასეთი ამოცანა ცოტა ხნის წინ გავაკეთე მეც smile.gif

CODE

def palindrome(s):
   st=s.replace(' ','')
   return st[::] == st[::-1]

* * *
return უკვე აბრუნებს True/False ასე რომ


QUOTE
 if list(str) == list(rev_str):
       return True
   else:
       return False


შეიძლებოდა დაიწეროს
return list(str) == list(rev_str)

Posted by: AnEeEeE=]] 27 Dec 2018, 11:58
Definitely_Maybe
შენ რომელ წიგნს კითხულობ, სინტქსის წესები უნდა ამოვბეჭდო და გავაკრა, თორე არ მამახსოვრდება არაფერი=))

Posted by: Definitely_Maybe 27 Dec 2018, 12:04
AnEeEeE=]]
automate the boring stuff with python:
Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython

ამ ეტაპზე ამ ორ წიგნს, მაგრამ ახლა udemy -ზე მაქ პითონის კურსები აღებული და იმას მივყვები. ჩემი გამოცდილებით სინტაქსის დაზეპირება საწყის ეტაპზე არ გამოვა, უკვე პრაქტიკაში გამახსოვრდება. თითქმის ყოველი ამოცანის ამოხსნისას ვგუგლავ რა მინდა პითონში და იქ ვპოულობ როგორ უნდა დავწერო.


Posted by: AnEeEeE=]] 27 Dec 2018, 12:07
Definitely_Maybe
QUOTE
ვგუგლავ რა მინდა პითონში და იქ ვპოულობ როგორ უნდა დავწერო.

მეც ეგრე ვაკეთებ და ძაან ბევრ დროს მაკარგვინებს, თან ბევრ სხვა რაღაცას ვაკეთებ და არმაქვს ამდენი დრო დასაგუგლად cry.gif
ვნახავ მაგ წიგნებს აუცილებლად, მადლობა

Posted by: NinjaRacer 27 Dec 2018, 12:07
Definitely_Maybe
up.gif

Learning Python
Programming Python
Python Cookbook ესე წავკითხე ნახევარი იგივე ავტორია.
ერთიდაიგივე ავტორია. თითქმის ნახევარი წელი მოვუნდი ამეების წაკითხავს up.gif biggrin.gif
რაც მაგალითები იყო ყველა არ გამიკეტებია ალბათ 30% რაც ძალიან დიდი შეცდომა იყო :დ მივუბრუნდები და მაგალითებს დავწერ

Posted by: Definitely_Maybe 27 Dec 2018, 12:17
AnEeEeE=]]
QUOTE
მეც ეგრე ვაკეთებ და ძაან ბევრ დროს მაკარგვინებს, თან ბევრ სხვა რაღაცას ვაკეთებ და არმაქვს ამდენი დრო დასაგუგლად

ეჰ მეც მასე ვარ და იმიტომაა რო გამეწელა ამდენი ხანი.
ახლა OOB-ზე გადავედი და ამ კლასებმა სულ ამირია თავი.

Posted by: AnEeEeE=]] 27 Dec 2018, 12:25
Definitely_Maybe
QUOTE
ახლა OOB-ზე გადავედი და ამ კლასებმა სულ ამირია თავი.

მე არ გადავსულვარ ჯერ, მარა ფაქტია რაც წავიკიტხე ამეების ეფექტურად გამოყენებამდე შორს ვარ ჯერ biggrin.gif

QUOTE
Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython

ეს ძაან კაი წიგნია,ზუსტად ამისთვის ვსწავლობ, მინდა დროითი მწკრივების მოდელები გავაკეთო პითონში სამაგისტროსთვის user.gif

Posted by: NinjaRacer 27 Dec 2018, 15:50
დღეს ვაპირებ ნეირონული ქსელების მეშვეობით ხელწერის ამომცონობი გავაკეთო.
ვებსაიტი იქნება რომელზეც ხელით დაწერ ციფრს და ჩემი ქსელი ამოიცნობს მას 95% სიზუსტით. ამჯერად მხოლოდ 0-9-მდე ციფრებს biggrin.gif wink.gif

დატასეტი მაქვს 60000 ნიმუშია უკვე.

აი tensorflow ვერ დავაკომპილირე ჯერ mad.gif cry.gif
ექსეფშენებს მიგდებს AVX2-ის მხარდაჟერა არ აქვს შენს პროფესორსო.
აუ მძლავრი GPU გაასწორებდა ჩემს ნოუთბუქს რომ ქონდეს.

მომენტ ამ ამოცანისთვის ვაბშე არ მინდა ეს ვექტორული ექსტენჟენები და ჯპუები. 1.5 -ით უმატებს ტრეინინგის სისწრაფეს მარტო mad.gif

მოკლედ დავამატებ ამას ჩემს პროქტებში. გამოსაფენად გამომადგება.

დოქერით კი შემიძლია მზა სისტემა გადმოვწერო, მაგრამ ლოკალურად მინდა ავამუშაო mad.gif

ჩემი დიშვილისთვის მინოდა ასოები მესწავლებინა ჰოდა კაკრაზ.

tensorflow ინ ვერი რეალ ლაიფ გამოყენება givi.gif თან გაუსწორდება rep-ებსაც მოვიმატებ მის თვალში :დ შევპირდი რომ დავუწერდი მსგავს პროგრამას სანამ სკოლას დაიწყებდა და ერთად ვისწავლიდით. ბიძერ ქულ ფაქტორიც გაიზრდება თავისთავად.

Posted by: AnEeEeE=]] 27 Dec 2018, 16:04
CODE
def sumdigits(s):
      str = [e for e in s]
      result = " "  
      i = 0
      for i in str:
         if i == int(i):
          result += i
      return result
s = ('asd2ds3')
print(sumdigits(s))

აქ რა შეცდომას ვუშვებ, ვალიუ ერრორს მიწერს, წესით ეგეთ დროს მინდა რო შემდეგ ელემენტზე გადავიდეს

Posted by: NinjaRacer 27 Dec 2018, 16:05
QUOTE
str = [e for e in s]

str = მარჯვნივ რაც დაწერე დააბრუნებს იგივე დატატიპს ანუ lists-ს.
str ლისტი იქნება სავარაუდოდ
print(type(str)) ით ნახე.

Posted by: AnEeEeE=]] 27 Dec 2018, 16:26
NinjaRacer
QUOTE
str = მარჯვნივ რაც დაწერე დააბრუნებს იგივე დატატიპს ანუ lists-ს.
str ლისტი იქნება სავარაუდო

ესენი ლისტებია კი, იტერაციებს არაკეთებს ქვემოთ პირველივე ელემენტზე ჩერდება და რატო ეგ მაინტერესებს

Posted by: NinjaRacer 27 Dec 2018, 16:40
აა კაი
იტერაციას აკეთებს. პროსტა if-ში გაქვს i ცვლადი გამოყენებული და პახოდუ გარეთაც გაქვს i გამოყენებული. i=0 რამე სხვა დაარქვი გარეთ მყოფს.

მერე შეადარე და თუ 0-იქნება ამ ლისტის რომელიმე წევრი. მაშინ დაგიბრუნებს პასუხს.
თუ არადა "" ცარიელი იქნება.

და იტერაციას აკეთებს თუ არა როგორ გაიგე? print('iter') მაინც ჩაგესვა ნახავდი. რომ აკეთებს.

გარეთას a დაარქვი სიტყვაზე a = 0

და if-ის შიგნით print(i, a) დააწერინე.

და შესადარებლად str[i] გამოყენე.

int(i) -ს რატო ადარებ თანაც თავის თავს?

ეგეთ ამოცანებზე როცა იჭედები.

ადექი და აბსოლუტურად ყველა ცვლადი რაც გაქვს, გარეთაც შიგნითად if,for,და while-ში ადექი და ყველა დაპრინტე.

print(i,a, str[i]) და ა.შ ასე ბევრად გაგიადვილდება.

და კიდევ უთხარი შენ აიტის დაგიყენონ pycharm არცერთი დეველოპერი არ იმახსოვრებს ზეპირად ყველა ენის სინტაქს და შეუძლებელიცაა ყველაფერი დაიმახსოვრო. სასრულია ჩვენი მეხსიერება და არაა საჭირო.

OOP-ზე გადადი არ არის აუცილებლად ამდენი ხანი ბილდინგ ბლოკებზე გაჩერდე.

გადადი ოოპ-ზე ყველაფერი გაიარე. ვერ გაიგებ ბევრ რამეს მაგრამ არაუშავს. კიდევ მოგიწევს მიბრუნება სტრინგებზე, მის მეთოდებზეც, ლუპებზეც და დატატიპებზე.

არ არის აუცილებელი ამდენი ხანი გაჩერდე. გააგრძელე. OOP ბევრ რამეზე აგიხელს თვალს, წარმოდგენა შეგექმენება ენაზე და უფრო კარგად გაითავისებ ყველაფერს და ახალი ცოდნით შეიარაღებულს უფრო გაგიადვილდება შემდეგ ამეების დამახსოვრება/კეთება. კარგია რომ ამუღამებ სინტაქსს, ინდენტეიშენს და დატატიპებს, ლუპებს. აუცილებელიცაა, მაგრამ გააგრძელე ენის სწავლა.

Posted by: AnEeEeE=]] 27 Dec 2018, 16:56
NinjaRacer
QUOTE
იტერაციას აკეთებს. პროსტა if-ში გაქვს i ცვლადი გამოყენებული და პახოდუ გარეთაც გაქვს i გამოყენებული. i=0 რამე სხვა დაარქვი გარეთ მყოფს.

ა ჰო ეს არ მჭირდებოდა ვაფშე მარა ხელს არ უშლის

QUOTE
და იტერაციას აკეთებს თუ არა როგორ გაიგე? print('iter') მაინც ჩაგესვა ნახავდი. რომ აკეთებს.

pythontutor.com
არ აკეთებს იტერაციას ა ზე ჩერდება მერე რეთარნს უკეთებს ნონს,
ეგ პროგრამა ლისტში თითოეულ ელემენტს იღებს და თუ ინთეგერია მაშინ უნდა შეკრიბოს ეგ რიცხვები

Posted by: NinjaRacer 27 Dec 2018, 17:03
აჰა გამართული კოდი.
CODE

def sumdigits(s):
   str = [e for e in s]
   print(str)
   result = ""
   a = '3'
   for i in str:
       
       if i == a:
           result += i
   return result


s = ('asd2ds3')
print(sumdigits(s))


ეხლა მითხარი რის გაკეთება გინდა და ეს კოდი რას ვერ აკეთებს.
* * *
QUOTE
ა ჰო ეს არ მჭირდებოდა ვაფშე მარა ხელს არ უშლის


როგორ არ უშლის ერმთანეთს ადარებ ერთიდაიგივე ცვლადს.

i, და int(i) ერთიდაიგივე ცვლადია. ამიტომ გითხარი print(i) დააბეჭდინე if-ის შიგნით.

თუ გინდა გაიგო string-ია ტუ არა რომელიმე ელემენტი სხვა ბაზარია. მაშინ სწორია, მაგრამ მაინც სხვანაირად უნდა გაკეთდებს i = int(i) ექსეფშენს ამოგიგდებს. i როცა a გახდება int(a)-ზე შეცდომას ამოგიგდებს. ინტს ციფრები უნდა მიაწოდო მარტო. თუნდაც სტრინგ ფორმატში იყოს მაგრამ მაინც ციფრია. '45' მაგალითად. ფრჩხილებში რადგანაა სტრინგია მაგრამ int-ს შეუძლია integer-ად გადაქცევა რადგან 45-ია.

Posted by: AnEeEeE=]] 27 Dec 2018, 17:22
QUOTE
def sumdigits(s):
   str = [e for e in s]
   print(str)
   result = ""
   a = '3'
   for i in str:
       
       if i == a:
           result += i
   return result


s = ('asd2ds3')
print(sumdigits(s))

2 ი და 3 ი უნდა შეკრიბოს მაგის გაკეთება მინდა სტრინგიდან ამოიღოს ელემენტები და რომელიც მტელი რიცხვია შეკრიბოს ეგენი

QUOTE
i, და int(i) ერთიდაიგივე ცვლადია. ამიტომ გითხარი print(i) დააბეჭდინე if-ის შიგნით.

if i == int:
გავაკეთე თავიდან მარა არ იმუშავა არც ამან, ელემენტს ვერ აღიქვსვს როგორც მთელს სტრინგად აღიქვავს მაგითომ რითარნს არ მაძლევს საერთოდ

Posted by: NinjaRacer 27 Dec 2018, 17:22
დაჯამება თუ გინდა
აგერ:
CODE

def sumdigits(s):
   str = [e for e in s]
   print(str)
   result = 0

   for i in str:

       try:
           print(type(int(i)))
           result += int(i)
       except:
           pass
   return result


s = ('asd2ds3')
print(sumdigits(s))


უფრო მარტივი გზა ვერ მოვიფიქრე უცებ.

Posted by: AnEeEeE=]] 27 Dec 2018, 17:25
NinjaRacer
QUOTE
უფრო მარტივი გზა ვერ მოვიფიქრე უცებ.

მადობა აი ზუსტად ასე მინდოდა, ექსეფთის გამოყენებაზე იყო სავარჯიშო და ვერ მოვიფიქრე როგორ გამომეყენებინა

Posted by: NinjaRacer 27 Dec 2018, 17:50
AnEeEeE=]]
QUOTE
მადობა აი ზუსტად ასე მინდოდა, ექსეფთის გამოყენებაზე იყო სავარჯიშო და ვერ მოვიფიქრე როგორ გამომეყენებინა


ეგ ძალიან ძლიერი რამეა.

try:
int(i)
ვქენით რაც წინასწარ ვიცოდი რომ ერორს გამოიწვევდა როდესაც ასოებამდე მივიდოდე. კერძოდ ValueError ჰოდა try ძალიან გიადვილებს საქმეს წინასწარ ეუბნები რომ სადღაც შეცდომა იქნება და გადაახტეს ამ ნაწილს პროგრამის გაჩერების ნაცვლად და გააგრძელოს იტერაცია.

CODE
def sumdigits(s):
   str = [e for e in s]
   print(str)
   result = 0

   for i in str:

       try:
           result += int(i)
       except ValueError as r2:
           print('Not an integer, skipping...')
           print('Error was:')
           print('\t', r2, '\n')
   return result


s = ('asd2ds3')
print(sumdigits(s))




Posted by: RedShark 28 Dec 2018, 17:22
AnEeEeE=]]
QUOTE
2 ი და 3 ი უნდა შეკრიბოს მაგის გაკეთება მინდა სტრინგიდან ამოიღოს ელემენტები და რომელიც მტელი რიცხვია შეკრიბოს ეგენი

CODE

def extract_nums(str):
   if str is None or str == '':                
       return 0                                                                

   num = 0
   for element in str:
       if element.isdigit():                                              
           num += int(element)
   return num

def main():
   str = ('asd2ds3')
   print("sum of numbers from string:", extract_nums(str))

main()

Posted by: NinjaRacer 28 Dec 2018, 18:25
RedShark
up.gif
ასეც შეიძლება
CODE

def sumdigits(s):
   return  sum([int(x) if x.isdigit() else 0 for x in s])


კიდევ ბევრნაირად შეიძლება ერთ ხაზზე ჩატევა..
map reduce filter.-ით და lambda-თი

reduce აღარ არის ჩაშენებლი. functools-ში გადაიტანეს.

CODE
def sumdigits(s):

   return  reduce(lambda x,y: int(x)+int(y), filter(lambda x: x.isdigit(),s))

ასე.

main() რა საკაიფოდ გაქვს მომეწონა up.gif
* * *
LIGO - laser interferometer gravitational waves observartory გაგიათ ალბათ. გრავიტაციული ტალღები რითაც აღმოაცინეს ორი შავი ხვრელის შეჯახებისას)

ჰოდა მთელი პროექტი open-source-შია აქვს jupiter notebook-ებში და მთელი კოდი თითქმის პითონშია.


smile.gif
* * *
ასტროფიზიკა ვისაც გაინტერესებთ და პითონი )
https://www.gw-openscience.org/tutorials/

https://www.gw-openscience.org/software/

პითონშია დაწერილი)

Posted by: NinjaRacer 30 Dec 2018, 00:36
რა მაგარი რაღაც ყოფილა ჯუპიტერი.

ბოლომდე უყრეთ მაგარი ვეშია. განსაკუთრებით თუ რამე პროექტზე მუშაობ და გინდა ერთი კლიკით მთელი შენი პროექტი დააშეარო გადაიტანო დააექსპორტო ფორმატი შეუცვალო და ა.შ.

google docs ფაქტიურად ონ სტეროიდს.. .
ანუ ვიზუალიზაცია + პითონის კოდი + %lsmagic = magic.


* * *
აი რიცხვითი ალგორითმების იმპლემენტაცია. ერთ გვერდზე პითონის ნოუთბუქების გამოყენებით.

ეს არის დიფერენციული განტოლებების ამოხსნაზე.
https://nbviewer.jupyter.org/github/waltherg/notebooks/blob/master/2013-12-03-Crank_Nicolson.ipynb

ქულ სთაF
https://nbviewer.jupyter.org/github/gestaltrevision/python_for_visres/blob/master/index.ipynb
უფრო მეტი ქულ სთაF

Posted by: AnEeEeE=]] 31 Dec 2018, 09:59
NinjaRacer
QUOTE

OOP-ზე გადადი არ არის აუცილებლად ამდენი ხანი ბილდინგ ბლოკებზე გაჩერდე.

გადადი ოოპ-ზე ყველაფერი გაიარე. ვერ გაიგებ ბევრ რამეს მაგრამ არაუშავს. კიდევ მოგიწევს მიბრუნება სტრინგებზე, მის მეთოდებზეც, ლუპებზეც და დატატიპებზე.

არ არის აუცილებელი ამდენი ხანი გაჩერდე. გააგრძელე. OOP ბევრ რამეზე აგიხელს თვალს, წარმოდგენა შეგექმენება ენაზე და უფრო კარგად გაითავისებ ყველაფერს და ახალი ცოდნით შეიარაღებულს უფრო გაგიადვილდება შემდეგ ამეების დამახსოვრება/კეთება. კარგია რომ ამუღამებ სინტაქსს, ინდენტეიშენს და დატატიპებს, ლუპებს. აუცილებელიცაა, მაგრამ გააგრძელე ენის სწავლა.

გუშინ ვუყურე ორ ლექციას კლასებზე და ინჰერითენსზე, კარგად ახსნა იმ გოგომ , ისეთი განცდა მაქვს გავიგე , მარა ჯერ ისევ ლუპებზე ვაკეთებ სავრჯიშოებს,თან მაგხელა პროგრამებს როდის მე დავწერ რო კლასები დამჭIრდეს lol.gif

Posted by: NinjaRacer 31 Dec 2018, 10:52
AnEeEeE=]]
მეც ეგეთი განცდა მქონდა პირველად რომ ვუყურე. მეც და ყველას პირველად ალბათ ეგეთი განცდა აქვს.
სულ ტყუილად. კლასი შეიძლება საერთოდ არ გამოიყენო და ძალიან რთული პროგრამა დაწერო. ფუნქციური პროგრამირება ეგაა. closure functi0ns, callback functi0n, functi0n decorators, factory functi0n, anonymous functi0n.
დამიჯერე კლასებში არაფერია რთული.საერთოდ. უმარტივესია. დაჟე მეტაკლასებიც კი არ არის რთული. უიოლესია უბრალოდ ეგრე წარმოაჩენენ რთულად.

ჯავასკრიპში 2016-მდე საერთოდ არ იყო კლასები smile.gif.

აი ძაან რო გავამარტივოთ მაგალითისთვის, თლა ეგრეაც არაა მაგრამ კლასები ერთადერთი რისთვისაც გამოიყენება. არის ის რომ მსგავსი ინფორმაცია ერთად შეკრიბო.

ვთქვათ გაქვს ონლაინ მაღაზია და თითოეულ მომხმარებელზე რომ არ წერო.
customer = 'customer1'
id = 'customer_id'
name = ''name'
bought = 'item'

და ყოველ ახალ მომხმარებელზე იგივე კოდი რომ არ იმეორო. ქმნი კლასს.
CODE

class Customers:
   def __iniit__(self, name, id, bought):
       self.name = name
       self.id = id
       self.bought = bought
   
   def getName(self):
       #get customer name
       return self.name
   
   def changeName(self, newname):
       self.name = newname
       
   


შეხედე ამ კლასს. უბრალოდ მონაცემები და ამ მონაცემების დამუშავების ფუნქციებია გაერთიანებული ერთ ობიექტში.

კლასის ინსტანსს ქმნი ერთი ხაზით.
customer1 = Customer('john', 12, 'shoes')
customer2 = Customer('sally', 12, 'glassess')

ამ ორ ობიექტში ავტომატურად ივსება, name, id, bout და კიდევ 2 მეთოდი geTname, setName.

სულ ეგაა. ნაკლები კოდის წერა გიწევს. ნუ კიდევ შეგიძლია ამ კლასისგან შვილობილი კლასი შექმნა და იგივე მონაცემები შეივსება იქაც თავის მეთოდებიანად დააკოპირებს ყველაფერ და + კიდევ უფრო მეტი მონაცემები დაუმატო + მეთოდები ახალი და უნიკალური ამ ახალი უფრო სპეციალიზირებული კლასისთვის.
ნუ მემკვიდრეობაც იგივე კოდის შესამცირებლად გამოიყენება. იდეაში კლასები პროგრამის გასაიოლებლად უნდა გამოიყენო და არა გასართულებლად biggrin.gif ასე რომ ნუ ნერვიულობ.

ნუ კიდევ ენკაპსულაცია და ინფორმაციის დაცვისთვის გამოიყენება რაც ცოტა რთულადაა. პოლიმორიზმისთვის.

დამიჯერე ძალიან მარტივი რამეები და დროთა განმავლობაში შენთვისაც უიოლესი გახდება.
აი მართლა რთული არის functi0nal programming ეგეც არაა რთული მაგრამ ბევრად ჭკვიანურია.

აქ რაც დაგიწერე მარტო ეგაა + კიდევ საკაიფო ფიჩები აქვს. რათქმაუნდა 1% დაგიწერე მე მარტო მაგის გარდა კიდევ ბევრი რამეა მაგრამ ძირითადი და მთავარი ეგაა რაც დაგიწერე.
ნაკლების კოდის წერა და გამარტივებაა იდეაშI კლასის როლი.


Posted by: Definitely_Maybe 31 Dec 2018, 11:01
NinjaRacer
გაიხარე smile.gif ეს დღეებია ფეხს ვითრევდი OOP-ის დასაწყებად smile.gif.

Posted by: AnEeEeE=]] 31 Dec 2018, 11:23
NinjaRacer
QUOTE
დამიჯერე კლასებში არაფერია რთული.საერთოდ. უმარტივესია. დაჟე მეტაკლასებიც კი არ არის რთული. უიოლესია უბრალოდ ეგრე წარმოაჩენენ რთულად.

რთულად ვაფშე არ მომეჩვენა მართალი რომ გითხრა, უბრალოდ ყველა ამ აბსტრაქციების გამოყენება ეფექტურად რომ შეძლო ბევრი უნდა ივარჯიშო, ჰო ალბათ რთულ კოდსაც დაწერ კლასის გარეშე,მარა კლასს თუ გამოიყენებ ლამაზ კოდებს დაწერ უფრო.


Posted by: NinjaRacer 31 Dec 2018, 11:25
Definitely_Maybe
QUOTE
გაიხარე  ეს დღეებია ფეხს ვითრევდი OOP-ის დასაწყებად .

სამწუხაროდ იმდენად ართულებენ რაღაცეების ახსნას ვითომ ბირთვული ფიზიკა იყოს ან rocket science არადა ყველაზე ტუპოი და მარტივი რაღაცეები ახსნა 2 სიტყვით შეიძლება ისე რომ ნათელი გახდება.

ალბათ სპეციალურად ბარიერს ზრდიან რომ ნუბები გარიყონ ) ანესაც იმიტომ ვუთხარი რომ კლასები გაიაროს სანამ OOP-ს არ ჩაწვდება და oop-ის მთელი არსი თითქმის ზემოთ ჩამოვაყალიბე smile.gif

იდეალური გადასვლა პითონის მერე იქნება. ჯავასკრიპტი. freecodecamp.org smile.gif up.gif
შემდეგ, react, redux, angular, bootstrap, sass

კიდევ GO ლენგსაც ვისწავლი და scala-ს ან რამე ეგეთ დეკლარირების ენას.
ოღონდ ერთი წლის მერე. ჯერ კიდევ დასამგელებელი მაქვს პითონშიც და ჯავასკრიპტშიც რაღაცეები. )

Posted by: Definitely_Maybe 31 Dec 2018, 11:37
NinjaRacer
QUOTE
იდეალური გადასვლა პითონის მერე იქნება. ჯავასკრიპტი. freecodecamp.org 
შემდეგ, react, redux, angular, bootstrap, sass

არადა მე ჯერ js ით დავიწყე smile.gif)) d3 და p5 ის დამუღამება მინდოდა. მივუბრუნდები მერე.

Posted by: NinjaRacer 31 Dec 2018, 11:43
Definitely_Maybe
კარგია რომ არავის გავლენის ქვეშ არ მოვექეცი და ფითონით დავიწყე.
ყველაზე საკაიფო ენაა და თლა ნუბიც აღარ ვარ უკვე. ეგ ასწორებს.
ახლა უკვე აღარ მაშინებს და კარგად მინდა დავამხეცო რა და ბევრი კოდიც ვწერო.
ერთადერთი რითაც სწავლობ ყველაზე კარგად არის რეალურად კოდის წერა + პროექტები. რეალურ ამოცანების გადაწყვეტაზე რომ ჩალიჩობ ყველაფერი ბევრად ადვილია.

AnEeEeE=]]
QUOTE
რთულად ვაფშე არ მომეჩვენა მართალი რომ გითხრა, უბრალოდ ყველა ამ აბსტრაქციების გამოყენება ეფექტურად რომ შეძლო ბევრი უნდა ივარჯიშო, ჰო ალბათ რთულ კოდსაც დაწერ კლასის გარეშე,მარა კლასს თუ გამოიყენებ ლამაზ კოდებს დაწერ უფრო.

up.gif

მერე ჯუპიტერიც გაარჩიე. შენი პროექტისთვის გამოგადგება.

Posted by: AnEeEeE=]] 31 Dec 2018, 13:22
CODE
def string_match(a, b):
 shorter = min(len(a),len(b))
 count = 0
 for i in range(shorter-1):
   a_sub=a[i:i+2]
   b_sub=b[i:i+2]
   if a_sub == b_sub:
       count += 1
 return count
a = ['xxafbaax']
b = ['xxasdaax']
print(string_match(a, b))

აქ სად არი შეცდომა 4 უნდა ამოპრინტოს წესით

Posted by: NinjaRacer 31 Dec 2018, 13:27
AnEeEeE=]]
CODE

def string_match(a, b):
   shorter = min(len(a),len(b))
   print(shorter, 'this is shorter')
   count = 0
   for i in range(shorter-1):
       a_sub=a[i:i+2]
       print(a_sub, 'this is a_sub')
       b_sub=b[i:i+2]
       print(b_sub, 'this is b_sub')
       if a_sub == b_sub:
           count += 1
   return count
a = ['xxafbaax']
b = ['xxasdaax']
print(string_match(a, b))

პრინტები ჩავსვი გაუშვი კოდი და ნახავ შენთვითონ.smile.gif

Posted by: AnEeEeE=]] 31 Dec 2018, 13:28
QUOTE
პრინტები ჩავსვი გაუშვი კოდი და ნახავ შენთვითონ.

იტერაციებს არ აკეთებს

Posted by: NinjaRacer 31 Dec 2018, 13:31
AnEeEeE=]]

ხო იმიტომ რომ shorter- 1-ა.

არადა უნდა იყოს ა და ბ-ს შორის len რომელიც ნაკლებია იმდენი.

CODE
def string_match(a, b):
   shorter = min(len(a),len(b))
   print(shorter, 'this is shorter')
   print(len(a), 'len a')
   count = 0
   for i in range(shorter-1):
       a_sub=a[i:i+2]
       print(a_sub, 'this is a_sub')
       b_sub=b[i:i+2]
       print(b_sub, 'this is b_sub')
       if a_sub == b_sub:
           count += 1
   return count
a = 'xxafbaax'
b = 'xxasdaax'
print(string_match(a, b))

» სპოილერის ნახვისთვის დააწკაპუნეთ აქ «


ეცადე სპოილერი არ გახსნა და შენით გაასწორო.

Posted by: AnEeEeE=]] 31 Dec 2018, 13:32
NinjaRacer
QUOTE
ხო იმიტომ რომ shorter- 1-ა.

არადა უნდა იყოს ა და ბ-ს შორის len რომელიც ნაკლებია იმდენი.

ჰო ვნახე ეხლა

Posted by: NinjaRacer 31 Dec 2018, 13:35
AnEeEeE=]]
QUOTE
ჰო ვნახე ეხლა


ისწავლე print-ის გამოყენება.
რა დონეზეც არ უნდა მიხვიდე. print ყოველთვის პირველია დებაგში.
* * *
https://www.youtube.com/watch?v=26wgEsg9Mcc

ipython მკვდარია. ჯუპიტერი გახდა მაგრამ მაინც ინტროსფეშენი საინტერესოა.
* * *
AnEeEeE=]]
შენ გამოგადგება განსაკუთრებით.

თუ რამე არ გამოგდის ipython შეგიძლია დააწერინო ყველა ცვლადის მნიშვნელობა 1 კლიკით.
* * *
visual studio მაიკროსოფთი დეველოფმენთ თულია და მაგას აქვს ipython-ის პლაგინი.

დააყენე ვიზუალ სტუდიო და შექმენი პითონის ფროექტი და ვსო ეგაა.

Posted by: AnEeEeE=]] 31 Dec 2018, 13:58
NinjaRacer
გთხოვ ნუ მაწვდი ამდენ ინფორმაცია, არშემიძლია კონცენტრაცია ერთდროულად ბევრ რამეზე user.gif

CODE

def string_match(a, b):
   str1 = [c for c in a]
   print(str1)
   str2 = [k for k in b]
   if len(str1) ==len(str2):
       shorter = str1
   else:
       shorter = min(len(str1),len(str2))
       return shorter
   print(shorter, 'this is shorter')
   count = 0
   for i in range(shorter-1):
      a_sub=str1[i:i+2]
      print(a_sub, 'this is a_sub')
      b_sub=str2[i:i+2]
      print(b_sub, 'this is b_sub')
      if a_sub == b_sub:
         count += 1
   return count
a = ['xxafbaax']
b = ['xxasdaax']
print(string_match(a, b))

ამ კოდმა ხოუნდა იმუშავს წესით მარა რატომღაც რაღაცა დაემართა და სტრინგს არ შლის facepalm.gif

Posted by: NinjaRacer 31 Dec 2018, 13:58
რის გაკეთება შეგიძლია აბსტრაქციებით in action

------------
* * *
CODE

def string_match(a, b):
  str1 = [c for c in a]
  print(str1, 'str1')
  str2 = [k for k in b]
  print(str2, 'str2')
  print('len of str1 and str2', len(str1), len(str2))
  if len(str1) ==len(str2):
      shorter = str1
  else:
      shorter = min(len(str1),len(str2))
      return shorter


a = ['xxafbaax']
b = ['xxasdaax']
print(string_match(a, b))


ლისტში რატომ გადაგყავს ა და ბ? ლისტში რომ გადაგყავს და მერე len(str1) უკეთებ 1 დაგიბრუნებს იმიტორო ['abcdf'] ამის len იქნება 1.

['abc', 'def', 'ghi'] ამის ლენ იქნება 3. რადგან უკვე გაშლილია რამოდენიმე ელემენტად და მძიმეებით არის გამოყოფილი ყველა ელემენტი. იმაში კიდევ 1 ელემენტია ამიტომაც len იქნება 1.

შენ გინდა str1 = a.split() ფუნქცია. რომ a-ში რაც სტრინგია ლისტში გაშალოს ელემენტებად.

როცა str1 = [x for x in a] აკეთებ ელემენტად არ დაშლის. 1 მთლიანად სტრინგს გატენის ლისტში 1 ელემენტად.
შენ გინდა თითოეულ ელემენტად რომ დაშალოს ამიტომ a.split() გამოყენე.


აქ str1 = [x for x in a] სტრინგზე აკეთებ იტერაციას, ყველა ელემენტს გადაუვლის. თითოეულს შეკრიბავს და ერთიანად ლისტში გატენის. როგორც 1 ელემეტნს ['abcd']
შენ გინდა რომ მიიღო ['a','b','c','d'] ამიტომ str1 = a.split() გჭირდება მანდ.


split() არის string კლასის ერთერთი მეთოდი და ეგრე მუშაობს.

ჰოდა კიდევ დამავიწყდა. ფუნქციას არგუმენტებში სტრინგები მიაწოდე ლისტის ნაცვლად.

a = 'xxafbaax'
b = 'xxasdaax'
print(string_match(a, b))

[] მოვაშორე.

split მარტო სტრინგებზე მუშაობს. string კლასის მეთოდია მხოლოდ.

თუ ამოცანის პირობაში აუცილებლად ლისტი უნდა მიაწოდო ფუნქციას მასინ სხვა ბაზარია.
თუ ეგრეა ოდნავ გადააკეთებ ფუნქციას და ისეც იმუშავებს ოღონდ სხვა მეთოდებით.
* * *
თუ მაინცდამაინც
აჰა ლისტზე ასე უნდა ქნა

CODE
def string_match(a, b):
  str1 = [x for x in a[0]]
  print(str1, 'str1')
  str2 = [k for k in b[0]]
  print(str2, 'str2')
  print('len of str1 and str2', len(str1), len(str2))
  if len(str1) ==len(str2):
      shorter = str1
  else:
      shorter = min(len(str1),len(str2))
      return shorter


a = ['xxafbaax']
b = ['xxasdaax']
print(string_match(a, b))


აქ უკვე იტერაციას ლისტის ელემენტზე აკეთებს a[0] და არა მთლიან ლისტზე. str1 = [x for x in a[0]]

a[0] იტერაცია უკვე სხვა შედეგს გაძლევს რადგან ეს ელემენტი შედგება 'adklsjf' სტრინგისგან და მასზე იტერაცია უკვე სტრინგის ელემენტებზე დაიწყებს იტერაციას და მიიღებ იმას რაც შენ გინდა.
* * *
კაია სწორ გზას ადგახარ.

მეც ეგრე ვიყავი ზუსტად. ლისტიდან სტრინგი სტრინგიდან ლისტში და ა.შ გადაყვანა, იტერაცია და სტრინგ და ლისტ მეთოდების დამუღამება აუცილებელი სკილია. ყველგან დაგჭირდება და ბაზისიზია up.gif
მნშვნელოვანია დატატიპებთან მუშაობა და ეგეთ რაღაცეებზე წვალება. yes.gif

Posted by: AnEeEeE=]] 31 Dec 2018, 15:37
NinjaRacer
ა და ბ ლისტებში მიწერია, ბრჩხილებს რო ვცვლი იყოფა ელემენეტბი
* * *
QUOTE
აქ უკვე იტერაციას ლისტის ელემენტზე აკეთებს a[0] და არა მთლიან ლისტზე. str1 = [x for x in a[0]]

ესარვიცოდი მადლობა გამომადგება
CODE
def string_match(a, b):
   str1 = [c for c in a]
   print(str1)
   str2 = [k for k in b]
   if len(str1) ==len(str2):
       shorter = str1
   else:
       shorter = min(len(str1),len(str2))
       return shorter
   print(shorter, 'this is shorter')
   count = 0
   for i in shorter:
      a_sub=str1[i:i+2]
      print(a_sub, 'this is a_sub')
      b_sub=str2[i:i+2]
      print(b_sub, 'this is b_sub')
      if a_sub == b_sub:
         count += 1
   return count
a = ('xxafbaax')
b = ('xxasdaax')
print(string_match(a, b))

მე-13 ხაზამდე ესეც მუშაობს უკვე user.gif

Posted by: NinjaRacer 31 Dec 2018, 17:07
QUOTE
მე-13 ხაზამდე ესეც მუშაობს უკვე

for i in range(len(shorter)-1)

მე -12-ე ხაზზე და ეგეც იმუშავებს smile.gif

shorter-ი ესაა
['x', 'x', 'a', 'f', 'b', 'a', 'a', 'x']

Posted by: AnEeEeE=]] 31 Dec 2018, 19:08
NinjaRacer
QUOTE
for i in range(len(shorter)-1)

დალაგდა ყველაფერიი bis.gif
QUOTE
shorter-ი ესაა
['x', 'x', 'a', 'f', 'b', 'a', 'a', 'x']

ვიცი \

პ.ს. ვსო დავისვენე ახალ წელს ამის დარდში არ შევხვდები

Posted by: NinjaRacer 31 Dec 2018, 19:14
QUOTE
პ.ს. ვსო დავისვენე ახალ წელს ამის დარდში არ შევხვდები

მეც არ გამომდიოდა რაღაც და წეღან გაკეთდა bis.gif

CODE
// the global variable
var watchList = [
                {  
                  "Title": "Inception",
                  "Year": "2010",
                  "Rated": "PG-13",
                  "Released": "16 Jul 2010",
                  "Runtime": "148 min",
                  "Genre": "Action, Adventure, Crime",
                  "Director": "Christopher Nolan",
                  "Writer": "Christopher Nolan",
                  "Actors": "Leonardo DiCaprio, Joseph Gordon-Levitt, Ellen Page, Tom Hardy",
                  "Plot": "A thief, who steals corporate secrets through use of dream-sharing technology, is given the inverse task of planting an idea into the mind of a CEO.",
                  "Language": "English, Japanese, French",
                  "Country": "USA, UK",
                  "Awards": "Won 4 Oscars. Another 143 wins & 198 nominations.",
                  "Poster": "http://ia.media-imdb.com/images/M/MV5BMjAxMzY3NjcxNF5BMl5BanBnXkFtZTcwNTI5OTM0Mw@@._V1_SX300.jpg",
                  "Metascore": "74",
                  "imdbRating": "8.8",
                  "imdbVotes": "1,446,708",
                  "imdbID": "tt1375666",
                  "Type": "movie",
                  "Response": "True"
               },
               {  
                  "Title": "Interstellar",
                  "Year": "2014",
                  "Rated": "PG-13",
                  "Released": "07 Nov 2014",
                  "Runtime": "169 min",
                  "Genre": "Adventure, Drama, Sci-Fi",
                  "Director": "Christopher Nolan",
                  "Writer": "Jonathan Nolan, Christopher Nolan",
                  "Actors": "Ellen Burstyn, Matthew McConaughey, Mackenzie Foy, John Lithgow",
                  "Plot": "A team of explorers travel through a wormhole in space in an attempt to ensure humanity's survival.",
                  "Language": "English",
                  "Country": "USA, UK",
                  "Awards": "Won 1 Oscar. Another 39 wins & 132 nominations.",
                  "Poster": "http://ia.media-imdb.com/images/M/MV5BMjIxNTU4MzY4MF5BMl5BanBnXkFtZTgwMzM4ODI3MjE@._V1_SX300.jpg",
                  "Metascore": "74",
                  "imdbRating": "8.6",
                  "imdbVotes": "910,366",
                  "imdbID": "tt0816692",
                  "Type": "movie",
                  "Response": "True"
               },
               {
                  "Title": "The Dark Knight",
                  "Year": "2008",
                  "Rated": "PG-13",
                  "Released": "18 Jul 2008",
                  "Runtime": "152 min",
                  "Genre": "Action, Adventure, Crime",
                  "Director": "Christopher Nolan",
                  "Writer": "Jonathan Nolan (screenplay), Christopher Nolan (screenplay), Christopher Nolan (story), David S. Goyer (story), Bob Kane (characters)",
                  "Actors": "Christian Bale, Heath Ledger, Aaron Eckhart, Michael Caine",
                  "Plot": "When the menace known as the Joker wreaks havoc and chaos on the people of Gotham, the caped crusader must come to terms with one of the greatest psychological tests of his ability to fight injustice.",
                  "Language": "English, Mandarin",
                  "Country": "USA, UK",
                  "Awards": "Won 2 Oscars. Another 146 wins & 142 nominations.",
                  "Poster": "http://ia.media-imdb.com/images/M/MV5BMTMxNTMwODM0NF5BMl5BanBnXkFtZTcwODAyMTk2Mw@@._V1_SX300.jpg",
                  "Metascore": "82",
                  "imdbRating": "9.0",
                  "imdbVotes": "1,652,832",
                  "imdbID": "tt0468569",
                  "Type": "movie",
                  "Response": "True"
               },
               {  
                  "Title": "Batman Begins",
                  "Year": "2005",
                  "Rated": "PG-13",
                  "Released": "15 Jun 2005",
                  "Runtime": "140 min",
                  "Genre": "Action, Adventure",
                  "Director": "Christopher Nolan",
                  "Writer": "Bob Kane (characters), David S. Goyer (story), Christopher Nolan (screenplay), David S. Goyer (screenplay)",
                  "Actors": "Christian Bale, Michael Caine, Liam Neeson, Katie Holmes",
                  "Plot": "After training with his mentor, Batman begins his fight to free crime-ridden Gotham City from the corruption that Scarecrow and the League of Shadows have cast upon it.",
                  "Language": "English, Urdu, Mandarin",
                  "Country": "USA, UK",
                  "Awards": "Nominated for 1 Oscar. Another 15 wins & 66 nominations.",
                  "Poster": "http://ia.media-imdb.com/images/M/MV5BNTM3OTc0MzM2OV5BMl5BanBnXkFtZTYwNzUwMTI3._V1_SX300.jpg",
                  "Metascore": "70",
                  "imdbRating": "8.3",
                  "imdbVotes": "972,584",
                  "imdbID": "tt0372784",
                  "Type": "movie",
                  "Response": "True"
               },
               {
                  "Title": "Avatar",
                  "Year": "2009",
                  "Rated": "PG-13",
                  "Released": "18 Dec 2009",
                  "Runtime": "162 min",
                  "Genre": "Action, Adventure, Fantasy",
                  "Director": "James Cameron",
                  "Writer": "James Cameron",
                  "Actors": "Sam Worthington, Zoe Saldana, Sigourney Weaver, Stephen Lang",
                  "Plot": "A paraplegic marine dispatched to the moon Pandora on a unique mission becomes torn between following his orders and protecting the world he feels is his home.",
                  "Language": "English, Spanish",
                  "Country": "USA, UK",
                  "Awards": "Won 3 Oscars. Another 80 wins & 121 nominations.",
                  "Poster": "http://ia.media-imdb.com/images/M/MV5BMTYwOTEwNjAzMl5BMl5BanBnXkFtZTcwODc5MTUwMw@@._V1_SX300.jpg",
                  "Metascore": "83",
                  "imdbRating": "7.9",
                  "imdbVotes": "876,575",
                  "imdbID": "tt0499549",
                  "Type": "movie",
                  "Response": "True"
               }
];

// Add your code below this line

var averageRating = watchList.filter(e =>e.Director === 'Christopher Nolan').reduce((acc, el, pasdarr,su) => {
//console.log(su)
return acc + Number(el.imdbRating)/su.length
},0)


// Add your code above this line

console.log(averageRating);

givi.gif

კიდე 8 ეგეთი დამრჩა. ახალ წელს ისე ვერ შევხვდები functi0nal programming თუ არ მივახრჩვე givi.gif

Posted by: AnEeEeE=]] 31 Dec 2018, 19:16
NinjaRacer
QUOTE
კიდე 8 ეგეთი დამრჩა. ახალ წელს ისე ვერ შევხვდები functi0nal programming თუ არ მივახრჩვე

ყოჩაღ=))
ეგ კოდი რომელ ენაზე წერია

Posted by: NinjaRacer 31 Dec 2018, 19:18
AnEeEeE=]]
javascr1pt-ია.

OOP მოვრჩი და functi0nal-ზე გადავედი და სულ ცოტა დამრჩა.

functi0nal Programming

ესენი შემდეგ წელს...

Intermediate Algorithm scr1pting
Javascr1pt Algorithms and Data Structures Projects
Front End Libraries Certification (300 hours)
Data Visualization Certification (300 hours)
Apis And Microservices Certification (300 hours)
Information Security And Quality Assurance Certification (300 hours)
Coding Interview Prep (Thousands of hours of challenges)

* * *
QUOTE
ეგ კოდი რომელ ენაზე წერია

ხო სიმახინჯეა? givi.gif

Posted by: AnEeEeE=]] 31 Dec 2018, 19:26
NinjaRacer
QUOTE

QUOTE
ეგ კოდი რომელ ენაზე წერია

ხო სიმახინჯეა?

მაგარი, პითონი ბევრად ჯობია, ჯავაც მომწონს ,ამის მერე ალბათ ჯავას ვისწავლი

Posted by: NinjaRacer 31 Dec 2018, 19:30
ჯავას სინტაქსი მაშინებს ცოტა.

user posted image

შორიდან ასე გამოიყურება smile.gif

Posted by: AnEeEeE=]] 31 Dec 2018, 19:34
NinjaRacer
QUOTE
შორიდან ასე გამოიყურება

აი ბრჩხილებში რომ არის ჩასმული კოდები ეგ მომწონს

Posted by: NinjaRacer 31 Dec 2018, 19:44
AnEeEeE=]]
მაშინ lisp ან clojure-ც მოგეწონება smile.gif) ეგეც ენაა.

user posted image


სულ ფრჩხილებია gigi.gif

Posted by: AnEeEeE=]] 31 Dec 2018, 19:57
NinjaRacer
QUOTE
სულ ფრჩხილებია 

ეგეთი კი არა
{ } ესეთები მომწონს lol.gif

Posted by: NinjaRacer 31 Dec 2018, 20:01
AnEeEeE=]]
QUOTE
ეგეთი კი არა
{ } ესეთები მომწონს


ვახ ჩემი კაი შენი მოსაწონი ენა ვერ ვნახე givi.gif

https://en.wikipedia.org/wiki/List_of_programming_languages_by_type#Curly-bracket_languages

აჰა და ამოარჩიე ნალუბოი.


აუ წავედი დავიღალე. წელს გვეყოფა კოდი. up.gif
givi.gif დროა ფაჩუჩები დავაწყო ბუხართან.

p.s snovimgoda

Posted by: AnEeEeE=]] 31 Dec 2018, 20:24
QUOTE

ვახ ჩემი კაი შენი მოსაწონი ენა ვერ ვნახე 

biggrin.gif

Posted by: Dixtosa 31 Dec 2018, 23:19
NinjaRacer
QUOTE
class Customers

მხოლობითში plz. ობიექტი ერთია ბევრი ხო არაა.

Posted by: NinjaRacer 31 Dec 2018, 23:39
QUOTE
მხოლობითში plz. ობიექტი ერთია ბევრი ხო არაა.


QUOTE
მხოლობითში plz. ობიექტი ერთია ბევრი ხო არაა.

კაი ახალი წელია და ეგრე იყოს :დ

ეს თემა ჩაინუკური ნელნელა აღარ არის.

Posted by: AnEeEeE=]] 2 Jan 2019, 21:05

CODE
def cat_dog(str):
 count =0
 count1 =0
 for i in range(len(str)):
   str1 = str[i:i+3]
   str2 = ('dog')
   str3 = ('cat')
   if str1 == str2:
       count+=1
   if str1 == str3:
       count1+=1
   if count1 == count:
           return True
   else:
           return False
str =('catdog')
print(cat_dog(str))

აქ ი ზე იტერაციას მარტო ერთხელ აკეთებს და როგორ გავასწორო user.gif

Posted by: robox 2 Jan 2019, 21:13
QUOTE (AnEeEeE=]] @ 2 Jan 2019, 21:05 )
CODE
def cat_dog(str):
 count =0
 count1 =0
 for i in range(len(str)):
   str1 = str[i:i+3]
   str2 = ('dog')
   str3 = ('cat')
   if str1 == str2:
       count+=1
   if str1 == str3:
       count1+=1
   if count1 == count:
           return True
   else:
           return False
str =('catdog')
print(cat_dog(str))

აქ ი ზე იტერაციას მარტო ერთხელ აკეთებს და როგორ გავასწორო user.gif

return-ები წყვიტავს იტერაციას და მაგიტო.
ისე სტატიკური ცვლადები ჯობია ციკლის გარეთ აღწერო.
და გირჩევდი პაიჩარმი და მისი დებაგერი გამოიყენო,ბევრად გაგიადვილდება ხარვეზების პოვნა
როცა step by step მიყვები კოდის შესრულებას

Posted by: AnEeEeE=]] 2 Jan 2019, 22:41
robox
QUOTE
return-ები წყვიტავს იტერაციას და მაგიტო

როგორ უნდა გავასწორო user.gif წესით პირველ და მეორე იფ სთეითმენტებში მინდა რო ლუპი დაატრიალოს და ქაუნთი სწორი რიცხვი ამოაგდოს


Posted by: NinjaRacer 2 Jan 2019, 22:45
QUOTE
პაიჩარმი და მისი დებაგერი გამოიყენო

სამსახურში მგონი ვერ დააყენებს ადმინის უფლებას არ აძლევს.

და აიტისთან არ აქვს მგონი ისეთი ატნაშენია რო მისცენ და ვეუბნები დააყნებინეთქო ეტყობა არ უნდა იმიჯის შელახვა.

anjuta დავაყენე idle ეხლა და ვსწავლობდი გამოყენებას.

მერე დავფიქრდი და ფაიჩარმე ჯობია თუ ვიმ გადავედი ვიმზე.

მაგრამ IDE-ში როგორიც pycharm-ია მანც მირჩევნია რა.

გავლენას ახდენს სად გიწევს წერა კოდზე მგონი. ნუ მე დამწყები ვარ და ეგრეა. ვისაც როგორ ურჩევნია ისე წერს. და იქ. აი ვებში ასწორებს ყველაზე მეტად. მივეჩვია ვებში წერას.
jupiter-ის იდეა მომწონს ძალიან.

Posted by: robox 2 Jan 2019, 23:15
QUOTE (AnEeEeE=)
],2 Jan 2019, 22:41 ]robox
QUOTE
return-ები წყვიტავს იტერაციას და მაგიტო

როგორ უნდა გავასწორო user.gif წესით პირველ და მეორე იფ სთეითმენტებში მინდა რო ლუპი დაატრიალოს და ქაუნთი სწორი რიცხვი ამოაგდოს

როგორ მივხვდი სტრიქონში იმის დადგენა გინდა cat და dog-სიტყვების რაოდენობა თუ უემთხვევა ერთმანეთს.

CODE

def cat_dog(str):
 count =0
 count1 =0
 str2 = ('dog')
 str3 = ('cat')

 for i in range(len(str)-2):
  str1 = str[i:i+3]
  if str1 == str2:
      count+=1
  if str1 == str3:
      count1+=1
 if count1 == count:
          return True
 else:
          return False
str =('catdog')
print(cat_dog(str))



პრინციპში ესეც არასწორია
str1 = str[i:i+3]

როცა for i in range(len(str)) გიწერია.
index out of range იქნება,პროსტა პითონი არამბობს არაფერს და სტრიქონს იღებს ბოლომდე,როცა რეინჯიდან გადის
ანუ იგივე ამას აკეთებს str[i:]

პ.ს ცვლადზე ან არგუმენტზე "str"-ს და მსგავსი პითონის კეივორდების დარქმევისგანაც შეიკავე თავი

Posted by: NinjaRacer 3 Jan 2019, 00:09
QUOTE
index out of range იქნება,პროსტა პითონი არამბობს არაფერს და სტრიქონს იღებს ბოლომდე,როცა რეინჯიდან გადის

მართალი ხარ და კარგი შესწორებებია ყველა yes.gif
რეინჯი არ ამბობს
str1 = str[i:i+3]
მარა ეს იტყვის. Exception-იქნება. ადრე დავწერე try/except-ის გამოყენება ამ შემთხვევაში მეც დავწერე.

კარგი კოდი უწერია ანეს. up.gif

biutfiul

Posted by: robox 3 Jan 2019, 00:22
QUOTE (NinjaRacer @ 3 Jan 2019, 00:09 )
QUOTE
index out of range იქნება,პროსტა პითონი არამბობს არაფერს და სტრიქონს იღებს ბოლომდე,როცა რეინჯიდან გადის

მართალი ხარ და კარგი შესწორებებია ყველა yes.gif
რეინჯი არ ამბობს
str1 = str[i:i+3]
მარა ეს იტყვის. Exception-იქნება. ადრე დავწერე try/except-ის გამოყენება ამ შემთხვევაში მეც დავწერე.

კარგი კოდი უწერია ანეს. up.gif

biutfiul

არ ისვრის ექსეფშენს და ეგაა პრობლემა ,try except-ით ვერ გამოიჭერsmile.gif
a='sgsgsgsg'
print(a[100:200])

ცარიელ სტრინგს ბეჭდავს და არ ისვრის ექსეფშენს.
ისე საკამათო საკითხია უნდა ისროდეს თუ არა,ჩემი აზრით უნდა ისროდეს.

Posted by: NinjaRacer 3 Jan 2019, 00:30
robox
QUOTE
ისე საკამათო საკითხია უნდა ისროდეს თუ არა,ჩემი აზრით უნდა ისროდეს.

გეთანხმები. :alk2:

ეგ არ ისვრის. მნიშვნელობას რომ ანიჭებდა იმ ხაზე ვთქვი ჩემო ძმაო smile.gif
str1 = str[i:i+3]

sg sg up.gif კარგი რა ადამიანებთან ურთიერთობა ზოგჯერ მისწორდება 2kiss.gif

Posted by: AnEeEeE=]] 3 Jan 2019, 09:19
robox
QUOTE
ოგორ მივხვდი სტრიქონში იმის დადგენა გინდა cat და dog-სიტყვების რაოდენობა თუ უემთხვევა ერთმანეთს.

აჰაა

QUOTE
index out of range იქნება,პროსტა პითონი არამბობს არაფერს და სტრიქონს იღებს ბოლომდე,როცა რეინჯიდან გადის

მოკლედ ამაზე მეც ვიფიქრე რა და თავიდან დავწერე სიგრძეს გამოკლებული 2 , მარა მერე ტესტები ამომიგდო მაგ მაგალიტზე გაკეთებული და როცა ორსიტყვიანი სტრინგია მაგაზე თრუ უნდა დაწერილიიყო რადგან ძაღლი კატის რაოდენობა 0 იქნებოდა და 0= 0 არი ხოდა სიგრძე დავტოვე თავისი რაც იყო მაგიტომ

Posted by: robox 3 Jan 2019, 10:29
QUOTE (AnEeEeE=]] @ 3 Jan 2019, 09:19 )
robox
QUOTE
ოგორ მივხვდი სტრიქონში იმის დადგენა გინდა cat და dog-სიტყვების რაოდენობა თუ უემთხვევა ერთმანეთს.

აჰაა

QUOTE
index out of range იქნება,პროსტა პითონი არამბობს არაფერს და სტრიქონს იღებს ბოლომდე,როცა რეინჯიდან გადის

მოკლედ ამაზე მეც ვიფიქრე რა და თავიდან დავწერე სიგრძეს გამოკლებული 2 , მარა მერე ტესტები ამომიგდო მაგ მაგალიტზე გაკეთებული და როცა ორსიტყვიანი სტრინგია მაგაზე თრუ უნდა დაწერილიიყო რადგან ძაღლი კატის რაოდენობა 0 იქნებოდა და 0= 0 არი ხოდა სიგრძე დავტოვე თავისი რაც იყო მაგიტომ

მე რაც დაგიწერე ეგ კოდი ორ სიმბოლოია ზეც იმუშავებს.
შენ შემოწმების ლოგიკა ციკლში გქონდა და მაგიტო არ დააბრუნებდა პასუხს როცა ციკლში საერთოდ არ შევიდოდა

Posted by: RedShark 3 Jan 2019, 11:14
AnEeEeE=]]

მაგ ალგორითმში ჭრის გამოყენება აუცილებელი პირობა იყო?
თუ არა, უფრო მარტივადაც შეიძლება გაკეთდეს:

CODE
def cat_dog(str):
   cat_count = 0
   dog_count = 0
   str2 = ""

   for i in str:
       str2 += i
       if str2 == "cat":
           cat_count += 1
           str2 = ""
       if str2 == "dog":
           dog_count += 1
           str2 = ""

   return cat_count, dog_count, cat_count == dog_count

def main():
   cats, dogs, bool_catdog = cat_dog("catcatdogcatdogcatdogcat")
   print("We have " + str(cats) + " cats and " + str(dogs) + " dogs")
   print("cat_count == dog_count?:", bool_catdog)

main()

Posted by: AnEeEeE=]] 3 Jan 2019, 11:16
robox
კი ეხლა შევამოწმე მუშაობს ეგეთ შემთხვევაზეც, მადლობა. არადა ზუსტად ეგეთი კოდი მქონდა რაც შენ დაწერე უბრალოდ ვერაფრით ვერ მოვიფიქრე ეგ ციკლი როგორ დატრიალებულიყო. თან ჯერ სადღაც თვენახევარია რაც ვსწავლობ და კარგად ვერ აღვიქვავ რა როგორ ხდება cry.gif

RedShark
არა არაფერი არიყო აუცილებელი , მე ეგრე მოვიფიქრე უბრალოდ

Posted by: NinjaRacer 3 Jan 2019, 14:07
AnEeEeE=]]
CODE

def cat_dog(str):
count =0
count1 =0
for i in range(len(str)):
  str1 = str[i:i+3]
  print(str1)
  str2 = ('dog')
  str3 = ('cat')
  if str1 == str2:
      count+=1
  if str1 == str3:
      count1+=1
  print(count, count1)
  if count1 == count:
          return True

str =('catdog')
print(cat_dog(str))


ეს კოდი იმუშავებს else: return False მოვაშორე. სხვა შემთხვევაში არ იმუშავებდა.

ახლა რეკურსიით დავწერ იგივე ფუნქციას.

Posted by: Definitely_Maybe 3 Jan 2019, 15:36
AnEeEeE=]]
ისე რას უნდა აკეთებდეს ეს ფუნქცია?

ნუ კოდის მიხედვით უნდა დათვალოს რამდენი კატა ძაღლია სტრინგში ჰო? smile.gif

Posted by: crytek 3 Jan 2019, 15:43
შემიძლია შევქმნა ფაილი გაფართოებას მნიშვნელობა არ აქვს რომელიც შექმნის დღიდან 5 დღის წლოვანების იქნება რა biggrin.gif
ანუ ფაილები მინდა დავაგენერირო რომელიც 5 დღეზე დიდია.

Posted by: Definitely_Maybe 3 Jan 2019, 16:11
ერთ ხაზში smile.gif

CODE

def catDog(cd_str):
   
   return cd_str.count('cat')==cd_str.count('dog')
       


AnEeEeE=]]
NinjaRacer

Posted by: AnEeEeE=]] 3 Jan 2019, 16:54
Definitely_Maybe
ყოჩაღ, ძალიან ეფექტურია

Posted by: პითონი 3 Jan 2019, 17:10
ჩემი სახელი ინგლისურად დაწერეთ ხოლმე...

Posted by: NinjaRacer 3 Jan 2019, 17:27
crytek
კი შეგიძლია.

https://stackoverflow.com/questions/4996405/how-do-i-change-the-file-creation-date-of-a-windows-file-from-python

თუ ლინქსზე ხარ ბევრად ადვილია.

touch -t 'time' file

Posted by: AnEeEeE=]] 4 Jan 2019, 10:16
CODE
def count_code(str):
   word = ("co")
   word1 =("e")
   count = 0
   for i in range(len(str)-3):
     str1 = str[i:i+2]
     str2 = str[i+3:i+4]
     if str1 == word and str2 == word1:
           count += 1
   return count
str=('AAcodeBBcoleCCccorfDD')  
print(count_code(str))
           


ამ კოდის უფრო ამრტივად დაწერა როგორ შეიძლება

Posted by: Definitely_Maybe 4 Jan 2019, 12:50
AnEeEeE=]]
კონკრეტულად რა გინდა ამ კოდმა რომ გააკეთოს?

Posted by: ჩანიძე 4 Jan 2019, 12:53
AnEeEeE=]]
str1 რომ იყოს str[i:i+4]
და if-ში ასეთი პირობა რომ ჩაწერო str1[:2] == word and str1[-1] == word1
str2-ის შექმნა აღარ დაგჭირდება


Posted by: Definitely_Maybe 4 Jan 2019, 12:59
AnEeEeE=]]
ა ბატონო smile.gif

CODE

def count_code(str):
   return min (str.count('co') , str.count('e'))

Posted by: ჩანიძე 4 Jan 2019, 13:01
Definitely_Maybe
პროსტა მაგათ რაოდენობებს არ ითლის მგონი ;დ
ისეთი 4 სიმბოლოიანი სიტყვები უნდა ალბათ რომელიც co-ზე იწყება და e-ზე მთავრდება

Posted by: Definitely_Maybe 4 Jan 2019, 13:09
ჩანიძე
ჰო მაშნ მგონი ეგ კოდიც არ მშაობს რაც დევს smile.gif
user posted image

თუმცა მგონი რომ ჩემი კოდი სწორია. მე როგორც მივხვდი კოდმა უნდა თქვას თუ რამდენი სიტყვაა სტრინგში რომელიც იწყება 'co' -თი და მთავრდება 'e'-თი

Posted by: ჩანიძე 4 Jan 2019, 13:16
Definitely_Maybe
შენი კოდი მინიმალურს დათვლის მაგ ორ რაოდენობას შორის და როგორაა სწორი ;დ

მაგ სქრინის სტინგზე თავდაპირველად დადებული კოდი 2-ს აბრუნებს და რატო არ მუშაობს ვითომ

გეშლება მგონი რაღაც

ანდაც დაიკიდე რავი ;დ ძაან მარტივ რამეზე არის გაუგებრობა

Posted by: AnEeEeE=]] 4 Jan 2019, 13:38
Definitely_Maybe
code
რამდენჯერ არის გამოყენებული ეგ უნდა ამოყაროს იმ პირობით რომ დ ს მაგივრად ნებისმიერი ასო შეიძლება იყოს

QUOTE
მაშნ მგონი ეგ კოდიც არ მშაობს რაც დევს

მუშაობს biggrin.gif

ჩანიძე
QUOTE
ისეთი 4 სიმბოლოიანი სიტყვები უნდა ალბათ რომელიც co-ზე იწყება და e-ზე მთავრდება

აჰააა

QUOTE
str1 რომ იყოს str[i:i+4]
და if-ში ასეთი პირობა რომ ჩაწერო str1[:2] == word and str1[-1] == word1
str2-ის შექმნა აღარ დაგჭირდება

ჰო ესე ჯობია

Posted by: NinjaRacer 4 Jan 2019, 14:56
CODE

import re

def count_code(str):
 return re.findall('co.e', str)

str=('AAcodeBBcoleCCccorfDD')  
print(count_code(str))
 


ასეც შეიძლება და ერთ ხაზზე დატევაც. ცოტა სხვანაირად.

კინაღამ JS კოდი გავურიე givi.gif

ადვილი ეგაა. თუ მაინცდამაინც ლუპებით გინდა ეგ უფრო რთულია მაგრამ სავარჯიშოდ კაი.

Posted by: AnEeEeE=]] 4 Jan 2019, 15:05
NinjaRacer
QUOTE
match = re.findall('co.e', str)

ეს რას ნიშნავს? მიწერს რე არარი განსაზღვრულიო, რაღაც მაგდაგვარს ისე მეც ვცდილობდი რო შუაში ადგილი დამეტოვებინა, მარა არ გამომივიდა


QUOTE
ადვილი ეგაა. თუ მაინცდამაინც ლუპებით გინდა ეგ უფრო რთულია მაგრამ სავარჯიშოდ კაი.

ისე მომწყინდა ეს ლუპები უკვე, პროსტა რაცარი ყველა მინდა გავაკეთო სვარჯიშოები, სადღაც წავიკითხე პროგრამის დაწერა თუ არი შესაძლებელი მარტო ლუპებითაც დაწერო და ვიფიქრე მნიშვნელოვანიათქო lol.gif

Posted by: NinjaRacer 4 Jan 2019, 15:07
AnEeEeE=]]
import re უნდა თავში.
ეგ არის პითონის regular expression ბიბლიოთეკა.

ჯავასკრიპტში ჩაშენებულია და ბევრ სხვა ენებში.

ეგ ბიბლიოთეკა უნივერსალურია და ყველა ენას აქვს და სინტაქსიც იგივეა 90%.

import re უნდა თავში მაგან რომ იმუშაოს

CODE
import re

def count_code(str):
   return re.findall('co.e', str)

str=('AAcodeBBcoleCCccorfDD')  
print(count_code(str))

Posted by: AnEeEeE=]] 4 Jan 2019, 15:08
NinjaRacer
QUOTE
import re უნდა თავში.
ეგ არის პითონის regular expression ბიბლიოთეკა.

ჯავასკრიპტში ჩაშენებულია და ბევრ სხვა ენებში.

აა ეგრე არმინდა ბიბლიოთეკებზე არ გადავსულვარ ჯერ biggrin.gif

Posted by: NinjaRacer 4 Jan 2019, 15:15
QUOTE
ისე მომწყინდა ეს ლუპები უკვე, პროსტა რაცარი ყველა მინდა გავაკეთო სვარჯიშოები, სადღაც წავიკითხე პროგრამის დაწერა თუ არი შესაძლებელი მარტო ლუპებითაც დაწერო და ვიფიქრე მნიშვნელოვანიათქო 

არის მნიშნველოვანი თან ძალიან. ლოგიკის უნარს ანვითარებს ძალიან და ზოგჯერ დაგჭირდება ალგორითმის დაწერა რომელიც არ არის ჩაშენებული და შენით უნდა შექმნა.

მაგრამ მაგაზე მნიშვნელოვანი მზა ტექნოლოგიების და ბიბლიოთეკების გამოყენებაა.

აგერ კაცი 500$ იხდის რაღაც მარტივ პროგრამაში.
ამაში.

CODE
Skip to content
Why GitHub?
Business
Explore
Marketplace
Pricing

Search

Sign in
Sign up
1 15 13 hfeeki/dtmf
Code  Issues 0  Pull requests 0  Projects 0  Insights
Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.

dtmf/dtmf-decoder.py
88aed2f  on 22 Feb 2013
Michael first commit
   
124 lines (123 sloc)  4.21 KB
'''
A python implementation of the Goertzel algorithm to decode DTMF tones.
The wave file is split into bins and each bin is analyzed
for all the DTMF frequencies. The method run() will return a numeric
representation of the DTMF tone.
'''
import wave
import struct
import math
class pygoertzel_dtmf:
   def __init__(self, samplerate):
       self.samplerate = samplerate
       self.goertzel_freq = [1209.0,1336.0,1477.0,1633.0,697.0,770.0,852.0,941.0]
       self.s_prev = {}
       self.s_prev2 = {}
       self.totalpower = {}
       self.N = {}
       self.coeff = {}
       # create goertzel parameters for each frequency so that
       # all the frequencies are analyzed in parallel
       for k in self.goertzel_freq:
           self.s_prev[k] = 0.0
           self.s_prev2[k] = 0.0
           self.totalpower[k] = 0.0
           self.N[k] = 0.0
           normalizedfreq = k / self.samplerate
           self.coeff[k] = 2.0*math.cos(2.0 * math.pi * normalizedfreq)
   def __get_number(self, freqs):
       hi = [1209.0,1336.0,1477.0,1633.0]
       lo = [697.0,770.0,852.0,941.0]
       # get hi freq
       hifreq = 0.0
       hifreq_v = 0.0
       for f in hi:
           if freqs[f]>hifreq_v:
               hifreq_v = freqs[f]
               hifreq = f
       # get lo freq
       lofreq = 0.0
       lofreq_v = 0.0
       for f in lo:
           if freqs[f]>lofreq_v:
               lofreq_v = freqs[f]
               lofreq = f
       if lofreq==697.0:
           if hifreq==1209.0:
               return "1"
           elif hifreq==1336.0:
               return "2"
           elif hifreq==1477.0:
               return "3"
           elif hifreq==1633.0:
               return "A"
       elif lofreq==770.0:
           if hifreq==1209.0:
               return "4"
           elif hifreq==1336.0:
               return "5"
           elif hifreq==1477.0:
               return "6"
           elif hifreq==1633.0:
               return "B"
       elif lofreq==852.0:
           if hifreq==1209.0:
               return "7"
           elif hifreq==1336.0:
               return "8"
           elif hifreq==1477.0:
               return "9"
           elif hifreq==1633.0:
               return "C"
       elif lofreq==941.0:
           if hifreq==1209.0:
               return "*"
           elif hifreq==1336.0:
               return "0"
           elif hifreq==1477.0:
               return "#"
           elif hifreq==1633.0:
               return "D"
   def run(self, sample):
       freqs = {}
       for freq in self.goertzel_freq:
           s = sample + (self.coeff[freq] * self.s_prev[freq]) - self.s_prev2[freq]
           self.s_prev2[freq] = self.s_prev[freq]
           self.s_prev[freq] = s
           self.N[freq]+=1
           power = (self.s_prev2[freq]*self.s_prev2[freq]) + (self.s_prev[freq]*self.s_prev[freq]) - (self.coeff[freq]*self.s_prev[freq]*self.s_prev2[freq])
           self.totalpower[freq]+=sample*sample
           if (self.totalpower[freq] == 0):
               self.totalpower[freq] = 1
           freqs[freq] = power / self.totalpower[freq] / self.N[freq]
       return self.__get_number(freqs)
if __name__ == '__main__':
   # load wav file
   wav = wave.open('/home/michael/Downloads/dtmf.wav', 'r')
   (nchannels, sampwidth, framerate, nframes, comptype, compname) = wav.getparams()
   frames = wav.readframes(nframes * nchannels)
   # convert wave file to array of integers
   frames = struct.unpack_from("%dH" % nframes * nchannels, frames)
   # if stereo get left/right
   if nchannels == 2:
       left = [frames[i] for i in range(0,len(frames),2)]
       right = [frames[i] for i in range(1,len(frames),2)]
   else:
       left = frames
       right = left
   binsize = 400
   # Split the bin in 4 to average out errors due to noise
   binsize_split = 4
   prevvalue = ""
   prevcounter = 0
   for i in range(0,len(left)-binsize,binsize/binsize_split):
       goertzel = pygoertzel_dtmf(framerate)
       for j in left[i:i+binsize]:
           value = goertzel.run(j)
       if value==prevvalue:
           prevcounter+=1
           if prevcounter==10:
               print value
       else:
           prevcounter=0
           prevvalue=value


მარტივი პროგრამაა. რაღაც აუდიო ფაილში უნდა იპოვოს * დაჭერის ხმა ტელეფონზე.

ხედავ სადმე უამრავ for loop-ს? კი არის მაგრამ იმდენი არა რამდენსაც ჩვენ ვწვალობთ.

მაგრამ ეს წვალებ გივითარებს ლოგიკას. მემგონი gigi.gif და ესეთი პროგრამრები რომ წერო უნდა გქონდეს ცოტა ნავარჯიშები. მაგრამ ზედმეტიც არაა საჭირო. რეალურ ამოცანების გადაწყვეტა უფრო სხვა რამეებზეა დამოკიდებული.
* * *
შენ გგონია მაგ პროგრამის ავტორ მთლიანად თავისით აქვს ეგ კოდი დაწერილი?
მზა ბიბლიოთეკებს იყენებს.

90% მაგ კოდიდან თავისი არაა. უმეტესობა კოდის მანდ მოდის import-ებზე. ამან უბრალოდ რამოდენიმე ფორუმლა და for loop-ი დაწერა

Posted by: AnEeEeE=]] 4 Jan 2019, 15:22
NinjaRacer
QUOTE
აგერ კაცი 500$ იხდის რაღაც მარტივ პროგრამაში.
ამაში.

QUOTE
ხედავ სადმე უამრავ for loop-ს? კი არის მაგრამ იმდენი არა რამდენსაც ჩვენ ვწვალობთ.

ვახ არა ლუპები აქვს ბლომად მაინც biggrin.gif არა 1/2 პროგრამა ლუპებია მეტი რაგინდა დ

Posted by: NinjaRacer 4 Jan 2019, 15:24
QUOTE
არა 1/2 პროგრამა ლუპებია მეტი რაგინდა დ

არა მაგ პროგრამის ლომის წილი მოდის.
import wave
import math
import struct

givi.gif
ამ ბიბლიოთეკებში იმდენი კოდია ჩვენ ყველამ რომ 1 წელი ვწეროთ გადაბმულად for ლუპები მაინც ვერ გავაკეთებთ.

ამ კაცმა/ქალმა biggrin.gif უბრალოდ გამოიყენა მზა ფორმულები და ბიბლიოთეკები და 1-2 for ლუპი დაწერა უმარტივისი.
მაგრამ გამიყენეა სხვისი ბიბლიოთეკები და ბოლოს გამოუვიდა ურთულესი პროგრამა givi.gif და ძალიან ძვირფასი და სასარგებლო.

პროგრამირების უმეტესობა ასეე ხდება ამის თქმა მინდა.
არსებული კოდის, ბიბლიოთეკების, ტექნოლოგიების და ფრეიმვორკების გადაბმა და გამოყენება.
შეიძლება გზად for loop-იც დაგჭირდეს biggrin.gif
* * *
შუმახერმა შეიძლება არ იცოდა კარდანის ცაპკის პადშებნიკის შეცვლა მაგრამ ზატო რული ესმოდა.

ჩვენ არ ვართ შუმახერები givi.gif ამიტომ პადშებნიკებშიც უნდა ვერკვეოდეთ, მაგრამ გაზავიც ასწორებს ხადახან facepalm.gif

შედარებების მამა ვარ.
* * *
AnEeEeE=]]
შენი ლუპი ძალიან საკაიფოა -3 რო აკეთებ.
თავის დროზე მაგარი ვიწვალე სანამ მაგას მივხვდებოდი რო ეგრეც შეიძლება.

ბოლოს მაინც try: except გამოვიყენე.
მაგრამ მნიშვნელოვანია გაიგო ის რაც შენ თქვი. ყველა ფუნქცია კლასი და ალგორითმი შეიძლება for-ლუპპებამდე დაიყვანო.

რათქმაუნდა შეიძლება მთელი ცხვორება მოუნდე მაგრამ მნიშვნელოვანია მაგის ცოდნა რო პროგრამა შეიძლება ბევრნაირად დაწერო და გააპრიმიტიულო უსაზღვროდ ან გაართულო უსასრულოდ.

მე მგონია რომ აბსტრაქცია და იმპლემენტაციის დეტალების ზემოთ მარტივი ინტერფეისების დაშენება სასარგებლოა და მნშვნელოვანია.
* * *
AnEeEeE=]]
მეც ვაკეთებ ეგეთ ლუპებს და სავარჯიშოებს ჯავასკრიპტში იმდენი რო რავიცი და უკვე ყელში მაქვს, მაგრამ უნდა გავაკეთო user.gif

Posted by: AnEeEeE=]] 4 Jan 2019, 16:05
NinjaRacer
იმხელა პოსტებს წერ, რომ არვიცი რა გიპასუხო biggrin.gif

Posted by: NinjaRacer 4 Jan 2019, 16:07
QUOTE
იმხელა პოსტებს წერ, რომ არვიცი რა გიპასუხო

მეზარება სავარჯიშოების კეთება და პოსტებს ვწერ smile.gif

ვსიო ჩავრთავ ეხლა focus პროდაქთივით ექსტენჟენს და ყველაფერი დამებლოკება.

beast mode: on
* * *
AnEeEeE=]]
შენს საყუარდღებოდ 3 საათი წამართვა აამან mad.gif

CODE
functi0n whatIsInAName(collection, source) {
 // What's in a name?
 var arr = [];
 let temparr = [];
 //console.log(collection[0]['first'])
 // Only change code below this line
 arr = collection.filter((item) => {
     //console.log(item.hasOwnProperty('a'))
   for (let i in source){
     //console.log(i)
     if (!item.hasOwnProperty(i)){
       console.log('hasnt')
       return false
     }else if(item[i] != source[i]){
       return false
     }
   }
     temparr.push(item)
     
   
   })
 arr = temparr
 
 //const srckeys = Object.keys(source)
 //console.log(srckeys)

 
 // Only change code above this line
 return arr;
}


თუ ოდესმე დაიწყებ ჯავასკრიპტს.
ამ ამოცანის დდშვცი mad.gif

https://learn.freecodecamp.org/javascr1pt-algorithms-and-data-structures/intermediate-algorithm-scr1pting/wherefore-art-thou/
ძალიან ჩათლახობაა facepalm.gif

მაგრამ კარგია რომ მაინც გავაკეთე. იმედია არ დამავიწყდება. ისე რასაც წერ შეინახე ყველაფერი აბსოლუტურად მერე საკუთარ ბიბლიოთეკებს შექმნი მაგისგან.

ესეც პასუხებში შევიხედე და ასე აქვთ გაკეთებული. ხვალისთვის ვინახავ რო შევხედო ისევ. რო არ დამავიწყდეს user.gif
CODE
functi0n whatIsInAName(collection, source) {
 // "What's in a name? that which we call a rose
 // By any other name would smell as sweet.”
 // -- by William Shakespeare, Romeo and Juliet
 var srcKeys = Object.keys(source);

 // filter the collection
 return collection.filter(functi0n (obj) {
   for(var i = 0; i < srcKeys.length; i++) {
     if(!obj.hasOwnProperty(srcKeys[i]) || obj[srcKeys[i]] !== source[srcKeys[i]]) {
       return false;
     }
   }
   return true;
 });
}

// test here
whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });

Posted by: AnEeEeE=]] 5 Jan 2019, 11:16
NinjaRacer
QUOTE
შენს საყუარდღებოდ 3 საათი წამართვა აამან 

არაუშავს მეტი რა საქმე გაქვს biggrin.gif

Posted by: Irakli2013 5 Jan 2019, 13:56
QUOTE (NinjaRacer)
შუმახერმა შეიძლება არ იცოდა კარდანის ცაპკის პადშებნიკის შეცვლა მაგრამ ზატო რული ესმოდა.


biggrin.gif

Posted by: NinjaRacer 5 Jan 2019, 17:12
QUOTE
არაუშავს მეტი რა საქმე გაქვს

ფიბონაჩის რიცხვებზე მოხვალ შენ პაპასთან.
მეც მასე გეტყვი biggrin.gif

Posted by: AnEeEeE=]] 5 Jan 2019, 18:42
NinjaRacer
QUOTE
ფიბონაჩის რიცხვებზე მოხვალ შენ პაპასთან.
მეც მასე გეტყვი

ეხლა ვერ ვიცლი და მერე რეკურსიებზე ბევრი უნდა ვივარჯიშო კაი გამახსენეbiggrin.gif

Posted by: NinjaRacer 5 Jan 2019, 18:44
QUOTE
ეხლა ვერ ვიცლი და მერე რეკურსიებზე ბევრი უნდა ვივარჯიშო კაი გამახსენე

ელხა მაქვს დავალება.

რეკურსიულად გააბრტყელე :დ steamrollArray([1, [2], [3, [[4]]]]);
ისე რომ ბოლოს 1 მასივი მიიღო.



დამიჯერე ერთხელ მაინც და ისწავლე

git-ის და გიტჰაბის გამოყენება.

https://github.com/gurguration/

მეც არ მქონია შეხება დიდად და ახლა ვამუღამებ.
შევქმნათ ამ თემისთვის საერთო რეპოზიტორია და ყველამ ერთ რეპოზე ვწეროთ.
დახმარებაც ადვილი იქნება და თან ერთმანეთის კოდსაც ადვილად დავაჩექაუთებთ.

Posted by: AnEeEeE=]] 5 Jan 2019, 19:22
NinjaRacer
QUOTE
დამიჯერე ერთხელ მაინც და ისწავლე

git-ის და გიტჰაბის გამოყენება.

https://github.com/gurguration/

მეც არ მქონია შეხება დიდად და ახლა ვამუღამებ.
შევქმნათ ამ თემისთვის საერთო რეპოზიტორია და ყველამ ერთ რეპოზე ვწეროთ.
დახმარებაც ადვილი იქნება და თან ერთმანეთის კოდსაც ადვილად დავაჩექაუთებთ.

მე ბეისიქებს რო ვისწავლი და დათა ანალიზის თულებს დავამუღამებ, მერე მაშინ ლერნინგი და დიიფ ლერნინგი მაინტერესებს, საკუთარი რობოტი უნდა დავაროგრამო lol.gif

Posted by: NinjaRacer 5 Jan 2019, 19:31
AnEeEeE=]]
ნუ ჩქარობ. მივალთ მანამდეც.

ჯერ კოდი სად წერო იმაზე ჩამოყალიბდი. უეჭველი ნოუთფადი გაქვს გახსნილი და იქ ჯღაბნი ხო ? fingal.gif

IDE ვერ დაგაყენებინეთ ამდენი ხალხი გთხოვთ user.gif
მერე ერეი გააბრყელე ან ცომი.

და github-ი მაიკროსფოთმა 7 მილიარდად ტყუილად კი არ იყიდა.
ყველა მაგას იყენებს კოლაბორაციისთვის.
The world's leading software development platform

28 million users[6] and 57 million repositories[

28 მილიონ მეერთე იქნები შენ bis.gif

Posted by: AnEeEeE=]] 5 Jan 2019, 19:53
NinjaRacer
QUOTE
ჯერ კოდი სად წერო იმაზე ჩამოყალიბდი. უეჭველი ნოუთფადი გაქვს გახსნილი და იქ ჯღაბნი ხო ?

IDLE ში ვწერ

QUOTE
და github-ი მაიკროსფოთმა 7 მილიარდად ტყუილად კი არ იყიდა.
ყველა მაგას იყენებს კოლაბორაციისთვის.

რა ჯანდაბაა ვერ გავიგე user.gif

Posted by: NinjaRacer 5 Jan 2019, 19:55
QUOTE
რა ჯანდაბაა ვერ გავიგე

დაიკიდე
პროსტა ნელნელა უნდა გაიგო რომ ეგეთი რაღაცეებიც არსებობს. დარეგისტრირდი და რა კოდებსაც წერ ყველაფერი აყარე ვებში. მომავალში გამოგადგება მინიმუმ გახსენებისთვის.


IDE - მაგალითად pycharm-ი კიდევ ძალიან დაგეხმარება რადგან code completion აქვს.


github.com ზე რომ შეხვალ აქვს გაიდი როგორ შექმნა რეპოზიტორი და დაამატო კოდი.

Posted by: AnEeEeE=]] 5 Jan 2019, 20:36
NinjaRacer
QUOTE
IDE - მაგალითად pycharm-ი კიდევ ძალიან დაგეხმარება რადგან code completion აქვს.

დატაზე რო გადავალ მერე მივხედავ ამას

Posted by: NinjaRacer 5 Jan 2019, 20:40
QUOTE
დატაზე რო გადავალ მერე მივხედავ ამას

ჰოდა უმეტესობა IDE-ებს განსაკუთრებით მაირკოსოფტის აქვს გიტჰაბთან ინტეგრაციაც. ჩაურთე მერე ეგეც და კოდი შეგენახება რასაც დაწერ. მომავალში გამოგადგება როგორც გითხარი.

და იდეებში ბევრად მარტივია კოდის წერა.
* * *
ჩემი მილიტარისტული პირველი პროგრამა.
2 წლის წინ დავწერე პირველი GUI
CODE

from tkinter import *

'''კოდმა რომ იმუშაოს ფანჯარაში მაუსზე დაჭერილი ღილაკი უნდა ამოძრაო
როგოცკი მოხვდება 100 მეტრის რადიუსში ინთება "ტოჩკა"
'''
canvas_width = 1200
canvas_height = 600

shipx = 300 # აქ არის ჩვენი დამალული "ტოჩკა" ხ კორდინატი
shipy = 450 # იგივე Y კორიდნატი ტოჩკის თუ სხვაობა 100-მეტია. ანუ 100 მეტრის რადიუსშია
ინთება



def paint(event):
  python_green = "#476042"
  x1, y1 = event.x,event.y
  print(x1)
  if abs(x1 - shipx) < 100 and abs(y1 - shipy) < 100:
      w.create_oval(shipx-3,shipy-3, shipx+3, shipy+3, fill=python_green)
  else:
      w.delete('all')



master = Tk()
master.title("Points")
w = Canvas(master,
         width=canvas_width,
         height=canvas_height)
w.pack(expand=YES, fill=BOTH)
w.bind("<B1-Motion>", paint)

message = Label(master, text="Press and Drag the mouse to draw")
message.pack(side=BOTTOM)

mainloop()


* * *


http://mitpress.mit.edu/best-sellers

თავიდან რო დავიბადო ან ცოტა მეტი დრო რომ მქონდეს იმისთვის რომ ყველანაირი ხელისშემლელი და შემაფერხებელი ყვერობების გარეშე ვაკეთო რაც მინდა და დრო იმაში დავხარჯო რაც მაინტერესებს არა? user.gif

Posted by: Irakli2013 7 Jan 2019, 18:59
QUOTE (AnEeEeE=)
]]IDLE ში ვწერ


visual studio code გადმოწერე და პითონის გაფართოებები დაუყენე

ძალიან მაგარი Editor-ია

Posted by: NinjaRacer 8 Jan 2019, 05:22
Irakli2013

პითონს რაში იყენებ ხოლმე? სხვა ენებში თუ წერ?


AnEeEeE=]]
ეს კაცი არის უამრავი ჩაშენებული ბიბლიოთეკის ავტორი. sorted enumerate range.


აქვს რამოდენიმე ლექცია კარგი.
python epiphanies და ა.შ
მოკლედ ბევრი რამე შემატა ამ ჯიგარმა ენას და ლექციებიც საინტერესო აქვს.

Posted by: AnEeEeE=]] 8 Jan 2019, 13:05
CODE
def close_far(a, b, c):
 if  abs(b-a)<= 1 and abs(b-c)>= 2 or abs(b-c)<=1 and abs(b-a)>= 2:
   if  abs(c-a) <= 1 and abs(c-b)>= 2 or abs(c-a) <= 1 and abs(c-b)>= 2:
      return True
 else: False


ეს იფ პირობები კუმულატიურად რომ შესრულდეს როგორ ჩავწერო?

Posted by: NinjaRacer 8 Jan 2019, 13:47
AnEeEeE=]]
ვერ მოვიფიქრე ვერაფერი იქნებ სხვებმა დაწეროონ.

Posted by: ჩანიძე 8 Jan 2019, 14:30
თუ ეს სავარჯიშოა: https://codingbat.com/prob/p160533
CODE
def close_far(a, b, c):
   return ((abs(a - b) < 2 and abs(a - c) > 1) or (abs(a - c) < 2 and abs(a - b) > 1)) and abs(b - c) > 1

Posted by: Irakli2013 8 Jan 2019, 21:49
NinjaRacer
QUOTE
პითონს რაში იყენებ ხოლმე? სხვა ენებში თუ წერ?


უნივერსიტეტის გარდა, ეხლა პირველად გამოვიყენებ ამ დღეებში სამსახურში სერვერზე biggrin.gif

ისე Node js და ცოტათი Angular js

cpp-ს სწავლა მინდა user.gif

Posted by: NinjaRacer 9 Jan 2019, 00:07
Irakli2013

მაი მენ. სწავლობ? ასწავლი თუ მუშაობ მანდა?

cpp დღეს ვკითხულობდი რაღაც სლაიდებს შემხვდა.
რთული არის ცოტა კი user.gif
QUOTE
ისე Node js და ცოტათი Angular js

მე ესენი მინდა love.gif

სიპიპის ალბათ ნახევარი საუკუნე მოვუნდები. ნუ ეგრეც არაა მაგრამ მაგისთვის ცალკე 2+ წელი დამჭირდება ვიცი :დ
და ამდენ დროს ვეღარ დავუთმობ.

Posted by: Irakli2013 9 Jan 2019, 00:46
NinjaRacer
QUOTE
მაი მენ. სწავლობ? ასწავლი თუ მუშაობ მანდა?


ვმუშაობ.
ახლა დავიწყე 2 კვირის წინ. ჩემი პირველი სამსახურია biggrin.gif

QUOTE
cpp დღეს ვკითხულობდი რაღაც სლაიდებს შემხვდა.
რთული არის ცოტა კი


ხო. ძალიან რთულია, თუ რამე სერიოზულის გაკეთება გინდა. მაგრამ თავისი ხიბლი აქვს მაგასაც. biggrin.gif

პოინტერებით მანიპულირება მევასება biggrin.gif.ძალიან მაგარი რაღაცაა

QUOTE
მე ესენი მინდა 

მუშაობის დასაწყებად ანგულარი ან რეაქტი ძალიან კარგი არჩევანია up.gif მოთხოვნადია. ნოუდზე მაინდამაინც ბევრი ვაკანსიები არაა ხოლმე sad.gif

Posted by: NinjaRacer 9 Jan 2019, 00:53
QUOTE
ვმუშაობ.
ახლა დავიწყე 2 კვირის წინ. ჩემი პირველი სამსახურია

გუდ ჯობ. გილოცავ bis.gif
QUOTE
ხო. ძალიან რთულია, თუ რამე სერიოზულის გაკეთება გინდა. მაგრამ თავისი ხიბლი აქვს მაგასაც.

პოინტერებით მანიპულირება მევასება .ძალიან მაგარი რაღაცაა

* & ასე აღინიშნება როგორც მახსოვს.
ლამბდები დაამატეს ცპპ-ში.
თანამედროვე ენაა
QUOTE
მუშაობის დასაწყებად ანგულარი ან რეაქტი ძალიან კარგი არჩევანია  მოთხოვნადია. ნოუდზე მაინდამაინც ბევრი ვაკანსიები არაა ხოლმე


ეს არაა ჩემი ძირითადი პროფესია. მოვრჩები ახლა mircoserviceბს და ფრონტ ენდ ბიბლიოთეკებს, ჯავასკრიპტსაც და გადავერთვები ისევ ჩემს საქმეს გავაგრძელებ და ამას ნელნელა განვავითარებ) გამომადგება )

Posted by: AnEeEeE=]] 9 Jan 2019, 16:21
ჩანიძე
QUOTE
თუ ეს სავარჯიშოა: https://codingbat.com/prob/p160533
CODE
def close_far(a, b, c):
   return ((abs(a - b) < 2 and abs(a - c) > 1) or (abs(a - c) < 2 and abs(a - b) > 1)) and abs(b - c) > 1

კი ეგ სავარჯიშოა, პირობა არასწორად გამიგია, მადლობაა

Posted by: @Schizophrenic 9 Jan 2019, 17:33
QUOTE
cpp-ს სწავლა მინდა

პითონის მერე ცპპ-ზე რა ნერვებით უნდა მიხვიდე? biggrin.gif
ისე ც/ცპპთი უნდა იწყებოდეს პროგრამირების სწავლა ჩემი აზრით, პითონით დაწყებას რომ ამბობს ყველა არ მგონია კარგი აზრი

Posted by: NinjaRacer 9 Jan 2019, 17:39
@Schizophrenic

გაგვანათლე ცოტა რას გულისხმობ smile.gif

QUOTE
პითონის მერე ცპპ-ზე რა ნერვებით უნდა მიხვიდე?
ისე ც/ცპპთი უნდა იწყებოდეს პროგრამირების სწავლა ჩემი აზრით, პითონით დაწყებას რომ ამბობს ყველა არ მგონია კარგი აზრი


პითონი დაწყება რატოა ცუდი აზრი?


მამენტ უკან ვიღებ ჩემს სიტყვებს ყველაზე რთულია. მარა სხვა ენები ბანძია და არ ვარგა არასწორი მიდგომაა. მითუმეტეს როცა ნუბი ხარ და ისედაც გერთულება ყველაფერი რატო უნდა დაიწყო ყველაზე რრთული ენით როგირიც ცპპ-ა

https://medium.com/@vardanator/why-cs-students-must-learn-c-as-their-main-programming-language-6d3b4f8720bd

Posted by: @Schizophrenic 9 Jan 2019, 21:43
QUOTE
სხვა ენები ბანძია და არ ვარგა არასწორი მიდგომაა

არა ეგ არ მითქვამს

მე დავიწყე სწავლა პითონით, უკვე კლასებამდე ვიყავი მისული პითონში როცა სასწავლებელში დავიწყე ც-ს სწავლა
ხოდა კაროჩე მეგონა რო არაფერი არ ვიცოდი, მაშინ გავიგე მეხსიერება რა იყო
მართალია დამწყებებისთვის ცოტა რთულია, მარა ჯობია გაიჭირვო თავიდან და მერე თავიდან ბოლომდე გეცოდინება შიგნით რა როგორ მუშაობს

ეს ჩემი აზრია თორე რავიცი ამ თემაზე 50/50ზე იყოფა აზრი, სანამ სწავლას დავიწყებდი გადავქექე ფორუმები და ნახევარი ერთს წერდა ნახევარი მეორეს biggrin.gif

Posted by: NinjaRacer 9 Jan 2019, 21:50
@Schizophrenic
არა პირიქით დიდი მადლობა რო დაწერე. მე არ ვიცი არაფერი ჰოდა უფრო მეტი გავიგე ახლა. სწორია. + ბევრისგან გამიგია იგივე.
პროსტა
C სწავლა ბევრად ადვილია სულ რაღაც 30 ქივორდი აქვს
c++ 93-თან შედარებით. სი პროცედურულია. სიპიპიში template metaprogramming

აი მარტო ამის წაკითხვამ ამატკივა თავი :დ
https://en.wikipedia.org/wiki/Template_metaprogramming


ეს ტიპი მევასება რატომღაც ცპპ-ს ავტორია :დ

Posted by: @Schizophrenic 9 Jan 2019, 22:15
NinjaRacer
ცპპ დანავაროტკებული ც-ა ასე რო ვთქვათ ხოდა ცპპ-ს სწავლას ც-დან იწყებენ ხოლმე, პირველი 6 თვე ც-ს ლექციები მქონდა და მერე გადავედი ც++ზე, მამაა ც რა biggrin.gif

ადვილი არაა, ნუ ადვილი არაა ცოტა ისე ისმის... პითონისგან რადიკალურად განსხვავებულია. აქ არი პოინტერები ალბათ დამწყებებისთვის ყველაზე უხერხული თემა, მარტო დამწყებებისთვისაც არა, ხშირად ვერ აკონტროლებენ პროგრამისტებიც და ბევრია მემორი ლიქები ამის გამო, საბედნიეროდ ც++ში სმარტ პოინტერები დაამატეს ნუ ეს უკვე სხვა თემაა. რთული და გაუგებარი კიარაა პოინტერები მარა ძაან არაკომფორტული რამეა ჩემთვის, სულ კონტროლი უნდა, ზატო ხელით ეხები თითქმის ოპერატიულს ისე წერ კოდს. პირადად მე მომავალში არ ვაპირებ ამ ენით წერას მარა მაინც კმაყოფილი ვარ რო ვისწავლე, ახლა ძაან ადვილად ვუმუღამებ სხვა ენებსაც

QUOTE
აი მარტო ამის წაკითხვამ ამატკივა თავი :დ

biggrin.gif

Posted by: NinjaRacer 10 Jan 2019, 22:36
@Schizophrenic
ძალიან საინტერესოდ აღწერე ახლა სერიალების ნაცვლად შეიძლება ლექციების ყურება გავცხო. რით განსხვავდება კიდე ?

ერთით მეტი დავალება გაქვს. მეხსიერება უნდა აკონტროლო და + დაბალ დონეზე ხარ უფრო და შეგიძლია ჰარდი მართო პირდაპირ.

ობიექტზე ორიენტირებულია, სკოუპები აქვს. მონაცემების დამალვა, კლასებიც აქვს.
კიდე რამე არის ისეთი რომ გამიკვირდეს რაც პითონში და ჯავასკრიპტში არაა. რათქმაუნდა იქნება biggrin.gif

Posted by: RedShark 11 Jan 2019, 00:42
NinjaRacer
QUOTE
ერთით მეტი დავალება გაქვს. მეხსიერება უნდა აკონტროლო და + დაბალ დონეზე ხარ უფრო და შეგიძლია ჰარდი მართო პირდაპირ.

აი ეგ "ერთით მეტი" დავალება ასჯერ გადაწონის პითონის და ჯავასკრიპტის ყველა სირთულეს ერთად biggrin.gif

Posted by: NinjaRacer 11 Jan 2019, 00:47
QUOTE
აი ეგ "ერთით მეტი" დავალება ასჯერ გადაწონის პითონის და ჯავასკრიპტის ყველა სირთულეს ერთად 


fortran-იც რთულია და ASM
პითონიც შეიძლება იყოს ზე რთული აი მაგალითად
django-ს სორს კოდი.

ამიტომ ჯერ აბსტრაქციის დამუღამება მინდა და ჰაილეველ დიზაინ პატერნების. efficient ალგორითმები ვწერო ადვილად.

და ჰარდეაზე და კომპაილერის ოპტიმიზაცია და ობიექტის ტემპლეიტების წერა მაგრად ასწორებს და ცალკე სპორტია.
მე ეგ სპორტი არ გამომდის not my cup of tea biggrin.gif შეიძლება ზედმეტად დებილი ვარ და ამიტომ არ ვიცი. მკიდია.
ძალიან მინდა. პითონი, ფლასკი, მონგოდბ, რუბი, node, GO, SWIFT და ჯავასკრიპტი ვიცოდე კარგად. .

კიდევ parallel, threading da async, wsgi მინდა პითონში დავმუღამდე.
ეს თუ ვინმეს ადვილად მოეჩვენება. გუდ ლაქ up.gif

Posted by: @Schizophrenic 11 Jan 2019, 01:13
QUOTE
რით განსხვავდება კიდე ?

რავიცი განსხვავებების მეტი რაარი, ყველაზე დიდი რაც გამახსენდა ეგ დავწერე
QUOTE
ადვილად მოეჩვენება

არ მიყვარს რთულს რო ვიყენებ ხოლმე, უბრალოდ სხვა სიტყვა ვერაფერი მოვიფიქრე და რთული მიტო დავწერე biggrin.gif
მთავარია მონდომება და ყველაფერს ისწავლის ადამიანი, არაფერი არაა შეუძლებელი ადამიანის ტვინისთვის თუარ დაიზარებს და შეუშინდება.
ადამიანია და გუნება ალბათ თორე ჩემი ლექტორია პითონს ვერ ვუმუღამებო, სასაცილო ენად მეჩვენებაო biggrin.gif ამას ამბობს ც++ ლექტორი, მგონია რო კაიფობს ხოლმე biggrin.gif
ახლა იმას ც++ უფრო უადვილდება ხზ biggrin.gif

Posted by: NinjaRacer 11 Jan 2019, 01:17
@Schizophrenic

ჰო რა ყველაფერში ვეთანმხები და იმ ლექტორაც ვეთანხმები.
ყველას აქვს გემოვნება სტილი მიდრეკილებები გამოცდილება ამოცანები და პრობლემები და შესაბამისად ყველას გააჩნია თავის აზრი.

პროსტა ესე რო იძახი პითონი ან ცპპ უკეთესია ენააო ძალიან იზღუდავ თავს.https://github.com/django/django/blob/master/django/db/models/base.py
ორივე გამოიყენე და მერე რომლიეც შენს გულს გაუხარდება და კონკრეტულ საქმეში გჭირდება ის გამაიყენე.

აი ეს კოდი თუნდაც ადრე რო შევხედე გული გამისკდა ახლა უკვე აღარ არის ისეთი გაუგებარი და
წაკითხვადიც კია. შეიძლება არაა საუკეთესო მაგრამ ადვილია. შედარებით

Posted by: Shredinger 11 Jan 2019, 01:18
ASM - ს სწავლის მუღამს ვერ ვხვდები. თუ რათქმაუნდა კომპილერს არ წერ ან კონტრიბუცია არ შეგაქ. პლიუს თუ რევერსური ინჟინერიით არ ხარ დაინტერესებული, სადაც ბევრი რამე გევალება კაცს. პლიუს თუ security research ით არ ხარ დაკავებული და 0day ებს არ ეძებ. ასევე os development ში თუ არ იღებ მონაწილეობას, დაჟე აქაც მხოლოდ ძალიან მცირე ნაწილი იწერება asm - ში, დანარჩენი C - ში.

დანარჩენ შემთხვევებში საერთოდ არ სჭირდება კაცს smile.gif
დროის კარგვაა.

P.S არვიცი რაზეა ლაპარაკი biggrin.gif ASM ს მოვკარი თვალი და...

Posted by: NinjaRacer 11 Jan 2019, 01:21
Shredinger
რევერს ენგჯინირია საინტერესოა ძაააან. განსაკუთრებით სეკურიტი მხარეში.

ადრე სუბარუს ფორუმზე ტიპები ჩვენი ეკუს დეფინიშენების შექმნას ჩალიჩობდნენ
რო ignition/fuel მეფებზე წვდომა გვქონოდა. და კიდევ უარმავი მიმართულებაა.

ვისაც რა ჭირდება და რისკენნაც აქვს მიდრეკილება იმ გზით მიდის.

Posted by: @Schizophrenic 11 Jan 2019, 01:22
QUOTE
პროსტა ესე რო იძახი პითონი ან ცპპ უკეთესია ენააო ძალიან იზღუდავ თავს

+1111

* * *
Shredinger
პირადად მე ძაან მაინტერესებს და ახლა სხვა რაღაცეები რო უკვე ნასწავლი მქონდეს, დიდი სიამოვნებით ჩავუჯდებოდი

Posted by: NinjaRacer 11 Jan 2019, 01:25
@Schizophrenic
ეკუს იმიჯის
hex dump-ებს იღებდნენ და იქედან დისასამბლერით მონაცებს და ფუნქციებს პოულობდნენ როგორღაც

მოკლედ გიჟები gigi.gif

Posted by: @Schizophrenic 11 Jan 2019, 01:29
QUOTE
მოკლედ გიჟები

love.gif

Posted by: Shredinger 11 Jan 2019, 01:38
NinjaRacer
@Schizophrenic
კი მაგარი საინტერესო თემაა. თუ ნერვები გაქ კაცს. ბევრი pattern ები უნდა დაამუღამო, მაგალითად for ციკლები ყველა ინტელის პროცესორის asm - ში თითქმის იგივე პატერნი აქვს. ყველგან იგივეა და უცებ რომ შეხედავ დიდ asm კოდს, ეგრევე მიხვდები. აი მიახლოებით მატრიცაში რომაა ერთი მონაკვეთი, ნეო ეკითხება ვიღაცას ამ ნაწერებში რას იგებო და ის რომ პასუხობს მე უკვე შევეჩვიე და რომ ვხედავ ვხვდები რასაც ნიშნავსო.

პროსტა ბევრი უნდა აკეთო და მოკლედ ტვინის ღუნვაა smile.gif

მე Exploit Development ის სფეროსკენ ვიხრები და asm ის ცოდნა მჭირდება 0day ების პოვნისთვის და მერე ექსპლოიტების საწერად.

ძაან კარგი დასაწყისი კურსია ეს:
https://www.pentesteracademy.com/course?id=3

ახლა გავდივარ და ასწორებს.

Posted by: NinjaRacer 11 Jan 2019, 01:53
QUOTE
To complete repetitive tasks, programmers often implement loops. There are many sorts of loops, but they can all be boiled down to a few similar formats in assembly code. This chapter will discuss loops, how to identify them, and how to "decompile" them back into high-level representations.

QUOTE
მიახლოებით მატრიცაში რომაა ერთი მონაკვეთი, ნეო ეკითხება ვიღაცას ამ ნაწერებში რას იგებო და ის რომ პასუხობს მე უკვე შევეჩვიე და რომ ვხედავ ვხვდები რასაც ნიშნავსო.

ძალიან საინტერესო საქმით ყოფილხარ დაკავებული love.gif წარმატებები. ბევრი 0day

კი მოვიხიბლე ისე.
MOV, EAX, 10
INC
DEC
CMP

3 სექციად რომ არის დაყოფილი კოდი. ტექსტი, ცვლადები, მონაცემები. აი ეხლა გამახსენდე.
_global_start ამას გულისხმობდნენ ენტრი პოინტში.
და მოკლედ იმ სექციას პოულობნენ (მისამართს) სადაც ცვლადები ინახებოდა და მერე ქმნიდნენ მეფებს romraider-ისთვის.

ნერვები + ტვინი უნდა + უზარმაზარი შრომა და კონცენტრაციის უნარიც უნდა და კომპლექსური აზროვნება.
აქედან არცერთი არ მაქ givi.gif
CODE

mov eax, $x
cmp eax, 0x0A
jg end
beginning:
inc eax
cmp eax, 0x0A
jle beginning
end:

If we were to translate that assembly code back into C, we would get the following code:
CODE

if(x <= 10) //remember: in If statements, we reverse the condition from the asm
{
  do
  {
    x++;
  } while(x <= 10)
}


ვიღაცისთვის (ნეოებისთვის givi.gif ) ზედა უფრო ბუნებრივი ლოგიკური და მარტივია.

JG >
JLE < ალბათ ამას უდრის ხო? J კიდე უეჭველი ჯამფია givi.gif
EAX ალბათ რომელიმე რეგისტრია სამუშაო და მათემატიკური გამოთვლებისთვის)


ისე მანქანებზე რაც ეკუებია ყველა კოდი უეჭველი asm. ია 16 ან 32 ბიტიანი ჰიტაჩის RISC პროცესორები აქვთ. ზიპინით რო იმუშაოს ამიტომ ალბათ.


ჯავაზეც. machine code-ში გადასათარგმნიც არის ალბათ მაგრამ ეგ აპარატებზე და ტურნიკეტებზე, ავტობუსებში და ავტორიზაციების სისტემებზე.
ჯავასკრიპტზეც იქნება იგივე.
ძაან დიდი დრო უნდა გქონდეს. ულევი იტოგში.
ამიტომ რასფეროშიც არ უნდა იყო და რაც არ უნდა გიტაცებდეს უსაქმოდ არასდროს იქნები. სულ რომ ხის თლა იყოს მანდაც კი არის უამრავი მიმართულებები და დონეები) უნდა გიყვარდეს ხეების თლა იტოგში givi.gif შედარებების მოფიქრება ძაან გამომდის

მომენტ საჭიროა იცოდე ebs esp რას ნიშნავს, სთექი რაარის და ა.შ.
https://www.youtube.com/watch?v=75gBFiFtAb8 აი კარგი მოკლე ვიდეო

ამაზე დაბალი დონე აღარ არის. ნუ თუ ნეო არ ხარ. ამის იქეთ უკვე ტრანზისტორებია და კრისტალები. )

Posted by: AnEeEeE=]] 11 Jan 2019, 13:25
CODE


def most_common_words(freqs):
   values = freqs.values()
   best = max(freqs.values())
   words =[]
   for k in freqs:
       if freqs[k] == best:
           words.append(k)
   return (words, best)
def words_often(freqs, minitimes):
   result =[]
   done = False
   while not done:
       temp = most_common_words(freqs)
       if temp [1] >= minitimes:
           result.append(temp)
           for w in temp [0]:
               del(freqs[w])
       else:
           done = True
   return result
print(words_often(beatles, 5))

აქ done = False და done = True რას ნიშნავს? რისთვისაა

Posted by: @Schizophrenic 11 Jan 2019, 14:05
QUOTE
რისთვისაა

ციკლის სატრიალოდ
QUOTE
done = False
   while not done:

ანუ როცა თრუ არარის ატრიალებს ციკლს
QUOTE
done = True

და როცა თრუ იქნება, ზედა პირობიდან გამომდინარე (while not done:) ციკლს დაასრულებს

Posted by: NinjaRacer 11 Jan 2019, 14:17
ანემ დაიბნა მგონი ამის გამო



როცა done True გახდება else-ში. not True ხომ ფალსია და ლუპიც შეწყდება.

while not done = true არის. ლუპი დაიწყება. done ფალსია და not done = true.
while not done. როცა else-ში done true გახდება. not done . done-ის მნიშვნელობას შეაბრუნებს და false-მივიღებთ ლუპი გაწყდება.

ასეც შეეძლოთ დაეწერათ.
CODE

done  = True
  while done:
      temp = most_common_words(freqs)
      if temp [1] >= minitimes:
          result.append(temp)
          for w in temp [0]:
              del(freqs[w])
      else:
          done = False

Posted by: AnEeEeE=]] 11 Jan 2019, 14:53
NinjaRacer
@Schizophrenic
გავიგეეე, მადლობა ხალხო love.gif

Posted by: NinjaRacer 11 Jan 2019, 16:25
Irakli2013
ადრე მგონი pycharm პრო ვერსიის კოდი დადე და კიდევ გაქვს ეგ? smile.gif

Posted by: Irakli2013 11 Jan 2019, 19:04
NinjaRacer
QUOTE
ადრე მგონი pycharm პრო ვერსიის კოდი დადე და კიდევ გაქვს ეგ?


მე არ ვიქნებოდი biggrin.gif

რაღაც საიტი კი ვიცოდი, სადაც იჩითებიდა ეგენი. თუ მოვძებნე დავწერ აქ
* * *
@Schizophrenic
QUOTE
პითონის მერე ცპპ-ზე რა ნერვებით უნდა მიხვიდე?
ისე ც/ცპპთი უნდა იწყებოდეს პროგრამირების სწავლა ჩემი აზრით, პითონით დაწყებას რომ ამბობს ყველა არ მგონია კარგი აზრი


ჩემთვის პირველი პროგრამირების ენა იყო cpp biggrin.gif
კოდფორსზე ვხსნიდი ამოცანებს. მაგის იქით არ გამომიყენებია არასდროს.

Posted by: NinjaRacer 11 Jan 2019, 23:59
Irakli2013
ღადაობ.?

ვიყიდოთ არდუინო და პაი ბოქსი თუ რაქვია და ვაპრგრამოთ. შეგიძლია ჰაი ლეველ ენებზე წერაც და c-ზეც.
რაღაც მუღამი გამიჩნდა. nor nand გეითებზე ვნახე რაღაცა ვიდეო და მაგრად დამაზამსკა. უეჭვ უნდა დავითრიო.
მაგრად გაასწორა
gI-qXk7XojA

Posted by: NinjaRacer 13 Jan 2019, 09:51
ყველაზე მნიშვნელოვანი მეცნიერი. პირველი პროგრამირების ენა. პირველი კოპაილერი. პირველი patch-ი. ფანჩქარდზე დაკრული სკოჩი/პატჩი. პირველი პაგი. სიტყვა ბაგი მაქედან წარმოიშვა. ერთერთ რელეში ხოჭო იყო შემძვრალი. რელეები ხო ცხელდება და მწერებს იზიდავდა და სიტყვა დებაგინგიც მაქედან მოდის.
cobol-ი ბებიას ეძახდნენ.

და გაგონილიც არ გაქვთ უეჭველი.



ზატო სტივ ჯობსი ყველამ იცით.

ინვოატორი გასული საუკუნის help.gif

grace hopper , დენის რიჩი ვინ ჩემი ღლე იყო კაცო
სტივ ჯობსი და ბილ გეიტცი იყვნენ 'მამები'
ერთი დოკუმენტურიც არაა მართლა grace hopper-ზე. vis.gif



ესენი კიდე ისწავლიან C-ის ან C++ და დადიან ცხვირი იმხელაზე აქვთ აწული და აბზუებული გეგონება ატომი დაშალეს. 'გენიოსები' facepalm.gif
თქვენაირი მინიმუმ 50 მილიონია კიდე. და ასე ცოტა იმიტომ რომ თქვენნაირი კამანდა ზუსტად ქმნის 'გენიოსის' მითებს და ახალბედებს აშინებს.

ნუ არწმუნებთ ნურავის რომ ვინმეზე ჭკვიანი ხართ რადგან ერთერთი პროგრამირების ენა ისწავლეთ და განა რამე შექმენით რომ ცნობილები იყოთ ამით. პროსტა ისწავლეთ ენა vis.gif

/END OF FUUCKING RANT

Posted by: ჩანიძე 13 Jan 2019, 11:38
ან პითონთან რა კავშირი ქონდა მაგ ყველაფერს
ან ამ დილა ადრიან რამ გაგამწარა ;(

Posted by: NinjaRacer 13 Jan 2019, 11:55
ჩანიძე
ვიცი არაა კავშირში. გამწარებული არ ვარ smile.gif პირიქით კარგ ხასიათზე ვარ. პროსტა ზოგჯერ ნერვები მეშლება რომ ასეთი ისტორია არ იცის მასიურად ტიპებმა ვისაც ტექნიკა და ტენოლოგიები ევასება. მასიურად კიარა ვინც ამ სფეროში წლებია მოღვაწეობს და წარმატებულია და განათლებული არც იმათ.

და პროგრამისტებს კიდევ ყველას ვუყვები ამ ქალზე და მაგრადაც უსწორდებათ. თუნდაც დებაგინგზე. რავი ვიფიქრე თქვენც გაგისწორდებოდათ. c-/c++ კიდევ არავის წინააღდმეგ კონკრეტულად არ დამიწერია.

პროსტა ბევრიგსგან შემხვედრია ეს 'ელიტისტური' დამოკიდებულება და აი მაგ დროს კი ვმწარდები ხოლმე :დ

დალშე არაფერი მიზანი არ ქონდა ამ პოსტს. არც გამწერბული ვარ. დილა კიდევ პირიქით წერის მუღამზე ვარ და ჩავუჯდები ახლა smile.gif
მოკლედ კარგ დღეს გისურვებთ და ეს ადამიანი თუ არ იცოდით იცოდეთ )

პროსტა ტიპებს აიფონი რომ გონიათ ტექნიკის მწვერვალი და ინოვაცია facepalm.gif
და სახეს იგლიჯავენ სტივ ჯობს ან ბილ გეითს შემეხე სასტავის არ მესმის. არც იმათი ერთ ენაზე ან ფრეიმვორკზე აფანატებენ.
როცა ზოგადი წარმოდგენა გაქვს ყველაფერზე, იცი სად დაიწყო, ვინ შექმნა, როგორ და რა სირთულეების გავლა მოუწია. აღარ დაიწყებ მერე სექტანტობას რამე კონკრეტულ ნივთზე დიზაინზე ან ტექნოლოგიაზე. დააფასებ მთლიანად. მაგრამ სექტანტი აღარ იქნები.

ამიტომ პითონი სათამაშო ენა არაა.
ანუ ჩვენ დებილები გამოვდივარ. პითონს ვინც ვიყენებთ და ვინც C-ში წერს მაგარი როჟა რომელმაც დარწმუნებული ვარ. არც cobol იცის რაარის და არც ENIAC და არც hopper-ზე სმენია საერთოდ რამე.
დებაგერი საბრუტინა და კომპალიერი ვინ შემქნა არც ეგ იცის. მაგრამ ყოველდღე იყენებს და თავი პროგრამისტების გურუ გონია ამ დროს. რომელიც დედამიწის მოსახლეობის 99% -ს ჯობია. დარწმუნებული ვარ ეგეთი თვითშეფასებით არიან. ჰოდა აი ეგ სულისკვეთება მინდა ამოვაგლიჯო სადაც აქვს იქიდან და სადმე სხვაგან ჩავტენო.

Posted by: ჩანიძე 13 Jan 2019, 12:12
გასაგებია და სავსებით გეთანხმები რასაც ამბობ ;დ

პროგრამისტი პოლიგლოტი უნდა იყოს
არცერთ ენას არ უნდა მიეჯაჭვოს
სხვადასხვა პრობლემას სხვადასხვანაირად უნდა მიუდგეს და ა.შ.
მარტივი ჭეშმარიტებებია ეგენი ძაან ;დ

Posted by: NinjaRacer 13 Jan 2019, 12:21
ჩანიძე
QUOTE
გასაგებია და სავსებით გეთანხმები რასაც ამბობ ;დ

bis.gif
QUOTE
პროგრამისტი პოლიგლოტი უნდა იყოს
არცერთ ენას არ უნდა მიეჯაჭვოს

+1
QUOTE
გამოუღებლად

იეს
givi.gif

Posted by: ჩანიძე 13 Jan 2019, 12:23
განსხვავებული პარადიგმებისა ცოდნა და ახალი ტექნოლოგიების სწრაფად ათვისება სურვილისა და საჭიროებისამებრ
კაი პროგრამისტისთვის მეტი ბევრი არაფერია საჭირო

რიჩის და ჰოპერის ისტორიების ცოდნა და
ვოზნიაკი > ჯობსი პათოსის მტკიცება არაფერს გვარგებს რა პროსტა ;დ

Posted by: NinjaRacer 13 Jan 2019, 12:36
რიჩის და ჰოპერის მნიშვნელობა

ვოზნიაკს და სტივ ჯობს რო ადარებ უკვე არასწორია.

კომპაილერი კიდევ ვინ შექმნა. პირველი კომერციული კომპიუტერი.
პირველი ფუნქცია.

რო არ იცი პროგრამისტმა. გარგებს. მინიმუმ სიამოვნებას მოგანიჭებს. სიტყვა დებაგინგის მნიშვნელობა რომ იცი. რეალური მნიშვნელობა და პაჩტიც სხვა თუ არაფერი.

თუ არ იცი შეიძლება არც არაფერი დაგაკლდეს როგორც პროგრამისტს.
მაგრამ თუ იცი შეგმატებს და ამ ადამიანის გაცნობით კი უფრო მეტად დააფასებ და აღარ დაიწყებს
სტივ ჯობსი 20საუკუნის ყველაზე გავლენიანი ტიპი იყოოო და პითონი სათამაშო ენააო მტკიცებას IT სფეროში.

არც სექტანტი იქნები. ჰოდა ამ მნიშვნელობას მაინცამაინც ხელით ვერ შეეხები და ვერ გამოყოფ რომ ამას ამას და აი ამას მოგიტანსო, მაგრამ მათი მნიშვნელობა ფასდაუდებელია მათი წვლილი და გაწეული სამუშაოც უსაზღვროდ დიდია და მნიშვნელოვანი.

ამის თქმა მინდოდა და იმის ყვირილიც არაფერს მოგიტანს პითონი სათამაშო და დებილების ენააო.
რომელიმე ენა დებილუური ან არასაჭირო რომ იყოს იარსებებდა მხოლოდ ერთი ენა და ერთი ტექნოლოგია.
რადგან არის და თანაც ბოლო წლების ყველაზე გამოყენებადი ენების ტოპშია. ე.ი დებილების ენა არაა როგორც მინიმუმ. შეიძლება ადვილი იყოს, მაგრამ ეს მის მნიშვნელობას და ფასს, როლს და ფუნქციას არ ამცირებს.

ესეიგი შენი აზროვნების პარადაგიმა. იმაში მდგომარეობს რომ რაიმე თუ ადვილი გამოსაყენებელია ე.ი დებილებისთვისაა. სათამაშოა. რაც ფუნდამენტურად არასწორია და შენ მე უკვე ვეღარაფერს ვერ მასწავლი. say no more ტიჩა.

აქედან მომდინარეობს მერე ის აზრები რომ გენიოსები არიან და 'მათემატიკური ტვინი ჭირდება' ან რაც უფრო რთულია რომელიმე ენა მითუფრო 'არასათამაშოა'.

ისიც კი არ იციან რომ ეს ყველაფერი ქალმა შექმნა. კომპაილერიც. ფუნქციაც და კომპიუტერიც.
შესაბამისად ჩნდება სტერეოტიპი მერე. რომ პროგრამისტები არიან მათემატიკოსი კაცები მხოლოდ. ნუ კარგი პროგრამისტები.
* * *



...

Posted by: NinjaRacer 14 Jan 2019, 14:33
ჯანგოსთვის ყველაზე კარგი დეველოპინგ გარემო რა არის?

Posted by: Perl 14 Jan 2019, 18:06
QUOTE (NinjaRacer @ 13 Jan 2019, 09:51 )
ყველაზე მნიშვნელოვანი მეცნიერი. პირველი პროგრამირების ენა. პირველი კოპაილერი. პირველი patch-ი. ფანჩქარდზე დაკრული სკოჩი/პატჩი. პირველი პაგი. სიტყვა ბაგი მაქედან წარმოიშვა. ერთერთ რელეში ხოჭო იყო შემძვრალი. რელეები ხო ცხელდება და მწერებს იზიდავდა და სიტყვა დებაგინგიც მაქედან მოდის.
cobol-ი ბებიას ეძახდნენ.

და გაგონილიც არ გაქვთ უეჭველი.



ზატო სტივ ჯობსი ყველამ იცით.

ინვოატორი გასული საუკუნის help.gif

grace hopper , დენის რიჩი ვინ ჩემი ღლე იყო კაცო
სტივ ჯობსი და ბილ გეიტცი იყვნენ 'მამები'
ერთი დოკუმენტურიც არაა მართლა grace hopper-ზე. vis.gif



ესენი კიდე ისწავლიან C-ის ან C++ და დადიან ცხვირი იმხელაზე აქვთ აწული და აბზუებული გეგონება ატომი დაშალეს. 'გენიოსები' facepalm.gif
თქვენაირი მინიმუმ 50 მილიონია კიდე. და ასე ცოტა იმიტომ რომ თქვენნაირი კამანდა ზუსტად ქმნის 'გენიოსის' მითებს და ახალბედებს აშინებს.

ნუ არწმუნებთ ნურავის რომ ვინმეზე ჭკვიანი ხართ რადგან ერთერთი პროგრამირების ენა ისწავლეთ და განა რამე შექმენით რომ ცნობილები იყოთ ამით. პროსტა ისწავლეთ ენა vis.gif

/END OF FUUCKING RANT




დავიწყოთ იქედან რომ ,

სტივ ჯობსსზე სრულიად გეთანხმები იმიტო რო არანაირი გამორჩეული პროგრამისტი ეგ არ იყო , მას ქონდა უბრალოდ შესაძლებლობა რომ პროგრამისტები მოეზიდა და დაეწერათ ოპერაციული სისტემა რამოდენიმე ადამიანს ერთად ,

რაც შეეხება აპპლეს ოპერაციულ სისტემებს tv/watch/ios/ipad/mac osx / ესენი ყველა დაფუძნებულია darwin ზე , დარვინი დაფუძნებულია ბსდ 3.4
>>>> https://github.com/opensource-apple/xnu <<<< აჰა სოურცეც , მე რასაც აქ ვხედავ ეს არის ეიპლის ოფიციალური კერნელი დღეს რასაც იყენებენ თავიანთ პროდუქტში ) აქ მე ვერ ვხედავ ვერანაირ სტივ ჯობსის მიერ შექმნილ ერთ ფაილსაც კი , მხოლოდ არის მითითებული რომ ეს არის ეიპლის პროექტი სხვა არაფერი , თუმცა სხვა არსებულ პროექტებში ყველგან მითითებულია ავტორები )

რაც შეეხება ბილ გეითსაც არც ის არის არანაირი გამორჩეული პროგრამისტი , არც გენიალური და არც არაფერი მსგავსი ,უბრალოდ მან წამოიწყო პროექტი და მოიზიდა პროგრამისტები მის ირგვლივ რომელთაც ერთად ის მუშაობდა, 100 000 კაცი რო დამეხმაროს მეც კი დავწერ ერთ გიგანტ პროექტს , პროგრამისტი მაშინ ხარ შენი საქმის მცოდნე როდესაც მარტო მუშაობ და მარტო შექმნი რაღაც გიგანტს და ერთერთ საუკეთესოს , თუმცა დღეს მე მსგავსი ადამიანები ნაკლებად მინახია )


რაც შეეხება ქალს და რაც შეეხება კობოლოს ,

დავიწყოთ იქედან რომ პირველი კომპილერის შექმნა და მსგავსი რაღაცეები არაფერ შუაშია ცოდნასთან საერთოდ , კობოლი კი რაღაც იყო წინა საუკუნეში თუმცა დღეს არავის არაფერში ჭირდება, იმიტო რო როდესაც არსებობს პროგრამული ენა c იქ არაფერი ესაქმება კობოლს , თუმცა პროექტი დასაფასებელია ნამდვილად , დავამატებ იმას რომ აი მაგ ქალის შესახებ არავინ არაფერი იცის მხოლოდ იმიტომ რო მას არაფერი შეუქმნია გრანდიოზული , შექმნა კომპილერი მერე რაა ? ისტორიას შემორჩა როგორც პირველი ავტორი სხვა არაფერი , აი რაც შეეხება დენის რიჩზე საუბარს , ცოტა ფრთხილად უნდა იყო მანდ აი რატო გეტყვი ეხლა

დენის რითჩი რო არა არ იარსებებდა unix / არ იარსებებდა bsd /არ იარსებებდა linux / არ იარსებებდა dos / არ იარსებებდა python -i როგორც შენ აქებ ეხლა პითონს და ეძახი რომ ის სათამაშო არ არისო , არ იარსებებდა არც აიფონი არც ანდროიდი და არც ეს ფორუმი სადაც ეხლა შენ პოსტავ იმიტო რო es forumi დაწერილია php -ში მას ასე php დაწერილია c++/c ში , რო არა c არ იარსებებდა c++ და c++ რო არა / არ იარსებებდა php/ არ იარსებებდა არც გოოგლი მოგლი არ იარსებებდა youtube არ იარსებებდა დღევანდელი ინტერნეტი (ნუ იარსებებდა (ისიც შეიძლება ) მაგრამ არ იქნებოდა ისეთი როგორიც არის ) მაშ ასე , ეს ყველაფერი საკმარისი უნდა იყოს იმისათვის რომ პროგრამული ენა c დააფასო და გაიგო მისი მნიშვნელობა , რაც შეეხება ყველაფერს დღეს ყველაფერი მოძრაობს c/c++ მეშვეობით , რაც შეეხება პითონს, პითონი სათამაშო არ არის თუმცა არც არაფერი გრანდიოზული არ არის , გარდა იმისა რო მარტივია და სკრიპტების წერისთის საკმაოდ კარგია , მისი შედარება c/c++ აბსურდია იმიტო რო c/c++ ის ერთ ნაბიჯსაც ვერ მოიცლის ) როგორც სხვა პროგრამული ენები , ე.გ პროგრამული ენა rust (რომლებსაც ესე აქებენ ბადქწექ , ისიც c++ ში დაიწერა თავდაპირველად , და ასევე დაფუძნებულია (llvm ) -ზე ,


დენის რიტჩის არის N1 ადამიანი ვინც ნამდვილად დასაფასებელია და არა ვიღაც ბილ გეიტსი და ხისთავიანი სტივ ჯობსი , რომლებმაც 10 000 -ობით ადამიანის დახმარებით რაღაც შექმნენ და ისეთი რაღაც რომელიც ყველა კოდი დაფარულია და ვერაფერს ვერ ნახავ ძაან რო გინდოდეს , აი დასაფასება ეგაა ნამდვილად :დ სტივ ჯობსი იყო ფულის მონა , ასევე როგორც ბილ გეიტსი , ხალხისთვის არავინ არაფერს არ აკეთებს , მითუმეთეს ეგ ორი (ხალხისთვის დღეს ვინც რაღაცას აკეთებს ეს ლინუსია / წამოიწყო პროექტი ლინუქსი და მილიონობით ადამიანი ჩაერთო ლინუქსის განვითარებაში ) ) ეხლა ბილ გეითსს იმდენი ფული აქვს უკვე ლექციებს უკითხავს ხალხს და მის ისტორიაზე ესაუბრება . და თან ამცნობს თუ რა და როგორ გააკეთა და მიაღწია/წარმატებას ცხოვრებაში და ასევე გემრიელადაც აბოლებს ხალხს (ნუ ვინც უფრო მეტს იტყუება და კარგად აბოლებს ხალხს აი ის აღწევს წარმატებას ცხოვრებაშიც ) gigi.gif


ხოლო რაც შეეხება დებაგს ეგ ინგლისური სიტყვაა და არამხოლდო პროგრამისტებმა იციან ეგ სიტყვა

gigi.gif gigi.gif

Posted by: NinjaRacer 15 Jan 2019, 02:09
Perl
კი ბაზ. არაა. ბევრ რამეში მართალი ხარ. მაგრამ

ჰოპერის ჯილდო.
QUOTE
The award goes to a computer professional who makes a single, significant technical or service contribution at or before age 35.

ეს შემთხვევით არაა. მისი სახელობის. კიდევ აქვს უმაღლესი ჯილდოები მიღებული. აღიარებული და დაფასებულია პროსტა ნაკლებად პოპულარული.
ასევე არსებობს სამხედრო გემიც.
https://en.wikipedia.org/wiki/USS_Hopper
და ამ ქალს ქონდა. ყველაზე მაღალი წოდება საზღვაო ფლოტში. თან იმ წლებში როცა ქალის მიღება ფლოტში იყო წარმოუდგენელი. ჰოდა ეს ყველაფერი არაფრისთვის არ მიუციათ.
დებაგინგი ტერმინიც კომპიუტერულ სამყაროში მაქედან წამოვიდა თორე ვიცი რომ მანამდეც არსებობდა ეგ სიტყვა)

კომპაილერის გარეშე არცერთი პროგრამირების ენა არ არსებობს. შენ დაწერილს კოდს კომპაილერი თუ არ გადაიყვანს მაშინ კოდში პროგრამა არ გაეშვა. მერე რამოხდა და კომპაილერი რაარის ეგრეც არაა smile.gif
პირველად მან გააკეთა აბსტრაგირება მანქანის ენიდან უფრო მაღალი დონის ენამდე.
მისი იდეა იყო ჰაი ლეველ ენების შექმნა. 46 კომპი გაყიდეს 1.5 მილიონად. მხოლოდ და მხოლოდ იმიტომ რომ მან შექმნა ჰაი-ლეველ აბსტრაგირების ენა და ეს ყველაფერი მაშინ როცა საერთოდ არაფერი არსებობდა მანამდე. პიონერი იყო.

მოკლედ რაშუაშია ეს საერთოდ :დ დავანებოთ თავი.

პ.ს ცხელცხელი ვიდეო ჯანგოზე. რთული მეგონა და რამოდენიმე დღეში შეიძლება ჯანგოს სწავლა სრულფასოვნად
https://www.youtube.com/watch?v=F5mRW0jo-U4
ესეც პითონის დამსახურება ) ვებ ფრეიმვორკის სწავლა შეგიძლია ერთ კვირაში და პროგრამირების ცოდნაც არაა დიდად საჭირო. ელემენტალურ დონეზე უნდა იცოდე პითონი და ჰტმლ მარტო. ამის თქმა მინდა ეს მოაქვს აბსტრაქციას თორე არც ვადრი C-ან ცპპს. ძალიან რთულ ტექნოლოგიებს ხელმისაწვდომს ხდის და ეს ერთერთი ყველაზე მნიშვნელოვანი ამოცანაა.

რო დაუყენო ვოზნიაკი, ჯობსი და ცუკენბერგიც ბედეს პიროვნება გამოდის ჰოპერი. ბედესი იყო. სხვათაშორის კოდის გაოფენსორსებაც პირველად მან მოახდინა.

fun fact
In 1979, Wozniak was awarded the ACM Grace Murray Hopper Award.

Posted by: AnEeEeE=]] 15 Jan 2019, 14:11
CODE
class IntSet(object):
   def _init_(self):
       self.vals = []
   def insert(self, e):
       if not e in self.vals:
           self.vals.append(e)
   def member(self, e):
       return e in self.vals
   def remove(self,e):
       try:
           self.vals.remove(e)
       except:
           raise ValueError(str(e)+'not found')
   def getMembers(self):
       return self.vals[:]
   def _str_(self):
       self.vals.sort()
       result=""
       for e in self.vals:
           result = result + str(e)+ ','
       return '{'+result[:-1]+'}'
s = IntSet()
print(s.insert(3))

AttributeError: 'IntSet' object has no attribute 'vals'

ამას მიწერს და რატო ზემოთ ხო წერია ცარიელი ლისტი უნდა გაეკეთებინა user.gif

Posted by: ჩანიძე 15 Jan 2019, 14:40
ინიტ-ს ორი ქვედა ტირე უნდა ორივე მხრიდან ;დ

Posted by: AnEeEeE=]] 15 Jan 2019, 14:44
ჩანიძე
QUOTE
ინიტ-ს ორი ქვედა ტირე უნდა ორივე მხრიდან ;დ

მადლობაა lol.gif

Posted by: ჩანიძე 15 Jan 2019, 14:45
ბოლო ხაზი None-ს დაპრინტავს იმიტომ რომ ინსერტი ჩადებს ელემენტს და ვსიო
თუ ელემენტების გამოტანა გინდა str-ც ორი ქვედატირით ჩაწერე და ინსერტის მერე პირდაპირ print(s)

Posted by: AnEeEeE=]] 15 Jan 2019, 14:46
ჩანიძე
QUOTE
ბოლო ხაზი None-ს დაპრინტავს იმიტომ რომ ინსერტი ჩადებს ელემენტს და ვსიო
თუ ელემენტების გამოტანა გინდა str-ც ორი ქვედატირით ჩაწერე და ინსერტის მერე პირდაპირ print(s)

კიკივიცი ,გავასწორე ეგ

Posted by: RedShark 15 Jan 2019, 22:42



Posted by: HCl 16 Jan 2019, 12:54
გამარჯობათ
სწრაფ კალკულატორად გამოვიყენე პითონი და გუშინ ასეთ რამეს მივაქციე ყურადღება.
>>> 864.29-849.61
14.67999999999995
რატომ წერს ამას ხომ ვერ ვხვდები და 8-ს რატომ არ წერს ვერ მივხვდი განმანათლეთ რა

Posted by: NinjaRacer 16 Jan 2019, 13:01
HCl
გამარჯობა.

mit-ს ქონდა ლექცია მაგაზე.
https://docs.python.org/3/tutorial/floatingpoint.html

numpy ან რამე ეგეთი მათემატიკური ბიბლიოთეკა უნდა გამოიყენო.

მე ეგ ლექცია გავაცდინე.

ან ეს https://pythonhosted.org/bigfloat/

ანუ უფრო მარტივი აგერ
https://en.wikiversity.org/wiki/Python_Concepts/Numbers#Decimal_fixed_point_and_floating_point_arithmetic_for_extreme_precision

Posted by: HCl 16 Jan 2019, 13:10
NinjaRacer
მადლობა გადავავლებ თვალს.

Posted by: NinjaRacer 16 Jan 2019, 13:14
HCl
არ გინდა აგერ
CODE

import decimal

decimal.getcontext().prec = 10

int1 = decimal.Decimal(864.29)
int2 = decimal.Decimal(849.61)

print(int1-int2)


პასუხი: 14.68000000
მიიღებ 8-ს მაგრამ რომ იცოდე.

limited precision floating point-ის ბრალია.
თუ უფრო დეტალურად გაინტერესებს რატო. MIT აქვს ლექცია.
ციფრები რადგან ორობითშია წარმოდგენილი და აქვს განსაზღვრული სივრცე ბაიტებში. იმიტომაა ეგრე.


პითონი უფრო ზუსტად აკეთებს.

სინამდვილეში
14.6799999999999499777914024889469146728515625
ეს არის სწორი პასუხი.

სიზუსტე გავზარდე 10-დან 30-მდე და სწორი დაწერა.


როცა 10-მდე ვამცირებ წერს 68-ს
decimal.getcontext().prec = 10

Posted by: HCl 16 Jan 2019, 13:26
NinjaRacer
დიდი მადლობა! alk.gif
თუ არ შეგეზარება მიტ-ს ვიდეოც დამილინკე რა, უნდა გავერკვიო მაგეებში თორემ სადღაც ძალიან დამირხევს, მაგეების არ გათვალისწინება

Posted by: NinjaRacer 16 Jan 2019, 13:47
HCl
კი.
მგონი ეს იყო.
ეს კაცი იმდენად მაღიზიანებდა.
ამის გამო გავანებე თავი :დ და გადავახტი მაგ ლექციას.
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/video-lectures/lecture-5/

კოდი რაც დაგიწერე ეგეც გეყოფა.


30-ზე მეტი სიზუსტე თუ დაგჭირდა რავიცი.

ან ეკონომისტი ხარ. ან ასტრონომი ან ფიზიკოსი მაშინ.

Posted by: iraklikairakli 17 Jan 2019, 17:14
QUOTE (NinjaRacer @ 16 Jan 2019, 13:47 )
HCl
კი.
მგონი ეს იყო.
ეს კაცი იმდენად მაღიზიანებდა.
ამის გამო გავანებე თავი :დ და გადავახტი მაგ ლექციას.
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/video-lectures/lecture-5/

კოდი რაც დაგიწერე ეგეც გეყოფა.


30-ზე მეტი სიზუსტე თუ დაგჭირდა რავიცი.

ან ეკონომისტი ხარ. ან ასტრონომი ან ფიზიკოსი მაშინ.

levani.ubilava.1@btu.edu.ge
Irakli123321
პიჩარმის .....

Posted by: NinjaRacer 17 Jan 2019, 19:09
iraklikairakli
უუუუუუუუუღრმესი მადლობა. ბოდიში ამერია წინაზე ნიკები.
2kiss.gif

Posted by: iraklikairakli 17 Jan 2019, 23:36
არგინდათ ფბ ჯგუფი შევქმნათ და იქ ვუზიაროთ გამოცდილება ერთმანეთს? ვიცი რომ არსებობს პითონ გეორგია მარა მაინც smile.gif ფორუმის სასტავი smile.gif

Posted by: NinjaRacer 17 Jan 2019, 23:38
QUOTE
არგინდათ ფბ ჯგუფი შევქმნათ და იქ ვუზიაროთ გამოცდილება ერთმანეთს? ვიცი რომ არსებობს პითონ გეორგია მარა მაინც ფორუმის სასტავი


ფეისბუქს ომი გამოვუცხადე მე პირადად sa.gif

კარგი იქნება ისე კავშირი გვქონდეს რამე ფორმით.

ლინქდინში რომ დაგამატო?

Posted by: iraklikairakli 17 Jan 2019, 23:43
QUOTE (NinjaRacer @ 17 Jan 2019, 23:38 )
QUOTE
არგინდათ ფბ ჯგუფი შევქმნათ და იქ ვუზიაროთ გამოცდილება ერთმანეთს? ვიცი რომ არსებობს პითონ გეორგია მარა მაინც ფორუმის სასტავი


ფეისბუქს ომი გამოვუცხადე მე პირადად sa.gif

კარგი იქნება ისე კავშირი გვქონდეს რამე ფორმით.

ლინქდინში რომ დაგამატო?

დისქორდი თუ იცით? მშვენიერია

Posted by: NinjaRacer 17 Jan 2019, 23:45
QUOTE
დისქორდი თუ იცით? მშვენიერია

up.gif

slack-ი არის კიდევ ძააან პოპულარული.
მშვენიერია დისქორდი. იყოს დისკორდი

Posted by: iraklikairakli 17 Jan 2019, 23:55
https://discord.gg/ttuvpZ

იმედია შევიკვრებით, მოვრჩი გამოცდებს და დიდი სიამოვნებით ჩაუვჯდებოდი რაიმე საინტერესო თასკებს smile.gif)
* * *

მოკლედ მე და NinjaRacer გავიცანით ერთმანეთი დისქორდში smile.gif ძალიან გვსურს 'მოხოდვა' და ჯგუფში მუშაობა , ტასკების გარჩევა მოკკლედ რაიმეზე ჯანსახი დისკუსია და ინფოების მიმოცვლა smile.gif
-----------> https://discord.gg/ttuvpZ ეს არის დისკორდი არხი და შემოგვიერთდით ნუ დაიზარებთ smile.gif
* * *
შესწორებულიი ლინკი --------- >>>>> https://discord.gg/q9rHmaG

Posted by: Irakli2013 18 Jan 2019, 11:22
QUOTE
შესწორებულიი ლინკი --------- >>>>> https://discord.gg/q9rHmaG


შემოგიერთდით smile.gif

Posted by: AnEeEeE=]] 18 Jan 2019, 13:49
CODE
def sum13(nums):
for i in range(len(nums)):
  if nums[i:i+1] == 13:
       del(nums[i:i+2])
return sum(nums)
print(sum13([1, 2, 13, 2, 1, 13]))  


პირობა რო სრულდება რატო ვერ ხედავს user.gif

Posted by: ჩანიძე 18 Jan 2019, 14:45
CODE
def sum13(nums):
 for i in range(len(nums)):
   if nums[i] == 13:
     nums[i] = 0
     if i < len(nums) - 1:
       nums[i+1] = 0
 return sum(nums)


nums[i:i+1] ერთელემენტიან ლისტებს აკეთებს: [1], [2], [13], [2], [1], [13]. ხოდა ის პირობაც ვერ სრულდება.

Posted by: AnEeEeE=]] 18 Jan 2019, 14:52
ჩანიძე
ვაა რა კარგად ამოხსენი , მადლობა smile.gif

Posted by: УгнатьДевушкуЗа60SC 18 Jan 2019, 17:20
მოგესალმებით მასტერებო, ჩაინიკური კითხვა მაქვს: "როგორ შევქმნა საკუთარი კოინი და როგორ დავაკავშირო საიტთან?"

Posted by: AnEeEeE=]] 19 Jan 2019, 13:10
CODE
def sum67(nums):
 for i in range(len(nums)):
   print(len(nums))
   if nums[i] == 6:
      nums[i] = 0
      nums1 = nums[i:]
      for e in range(len(nums1)):
         if nums1[e] == 7:
            nums1[e] = 0
            nums1 = nums1[e:]
            nums1.extend(nums[0:i])
            nums = nums1
            break
 return sum(nums)
print( sum67([1, 6, 2, 6, 2, 7, 1, 6, 99, 99, 7]))

list index out of range რატო მიწერს

Posted by: ჩანიძე 19 Jan 2019, 14:40
AnEeEeE=]]
CODE
def sum67(nums):
 for i in range(len(nums)):
   if nums[i] == 6:
     for j in range(i, (len(nums))):
       if nums[j] == 7:
         nums[j] = 0
         break
       else:
         nums[j] = 0
 return sum(nums)

მეორე ციკლში რას შვრებოდი ვერ მივხვდი
მგონი ესე უფრო გასაგები კოდია ;დ

Posted by: AnEeEeE=]] 19 Jan 2019, 14:51
ჩანიძე
მეორე ციკლში 7 ის მერე ლისტს და პირველ ციკლში 6 ამდე ლისტს ერთმანეთს ვუმატებდი, აი იცი რა მაინტერესებს აუთერ ლისტი რომაა მაგისთვის ელსე სთეითმენთ როგორ გავაკეთო ისე რომ შიდა ციკლი გაიაროს და ეგრევე ელსზე არ გადახტეს

QUOTE
def sum67(nums):
 for i in range(len(nums)):
   if nums[i] == 6:
     for j in range(i, (len(nums))):
       if nums[j] == 7:
         nums[j] = 0
         break
       else:
         nums[j] = 0
 return sum(nums)

აქ ელსი რისთვისაა ვერ გავიგე

პ.ს ააა გავიგე გავიგე , კაი მოფიქრებაა

Posted by: ჩანიძე 19 Jan 2019, 14:55
AnEeEeE=]]
მანდ ელსი იმისთვისაა რომ სანამ 7 შეხვდება გზაში ყველა გაანულოს
თუ შეხვდა 7 ეგეც განულდეს და დაბრეიქდეს

Posted by: NinjaRacer 19 Jan 2019, 15:54
CODE

def summer(arr):
   while (7 in arr):
       start = arr.index(6)
       stop = arr.index(7)
       del arr[start:stop+1]
   return sum(arr)

print(summer([1, 6, 2, 6, 2, 7, 1, 6, 99, 99, 7]))



პოეტური კოდია ცცოტა    return sum(arr) gigi.gif


Posted by: AnEeEeE=]] 19 Jan 2019, 16:13
NinjaRacer
ვააა კარგია ძაან love.gif

Posted by: NinjaRacer 19 Jan 2019, 16:27
QUOTE
ვააა კარგია ძაან 

ჰო და გასაგრბიც. შენკიდე პირობაც არ გითქვამს up.gif

Posted by: NinjaRacer 20 Jan 2019, 17:09
QUOTE
un Jan 20 12:58:12.924131 2019] [wsgi:error] Traceback (most recent call last):
TabError: inconsistent use of tabs and spaces in indentation

File "/var/www/flaskapi/flaskapi/__init__.py", line 28
[Sun Jan 20 12:58:12.924185 2019] [wsgi:error] [pid 3574]   return None



CODE
from flask import Flask, jsonify, request, render_template
import numpy as np
import PIL
from PIL import Image
from keras.models import load_model

app = Flask(__name__)

model = load_model('/var/www/flaskapi/flaskapi/my_model.h5')

#@app.route('/predict', methods=["POST"])

@app.route('/predict',"GET")
def predict_image():
       # Preprocess the image so that it matches the training input
       image = request.files['file']
       image = Image.open(image)
       image = np.asarray(image.resize((28,28)))
       image = image.reshape(1,1,28,28)

       # Use the loaded model to generate a prediction.
       pred = model.predict(image)

       # Prepare and send the response.
       digit = np.argmax(pred)
       prediction = {'digit':int(digit)}
#        return jsonify(prediction)
       return None

if __name__ == "__main__":
       app.run()


რაუნდა ამის თავზეც გავიარე :@@@@@

ssh-ით glcloud-ზე უყლეებს რატო?

https://stackoverflow.com/questions/5685406/inconsistent-use-of-tabs-and-spaces-in-indentation
ამის ბრალია ვითომ?
* * *
ხშირად ერთი კოდის ჩაკოპირებისას ტაბის მაგივრად ზოგი ედიტორი ' ' სპეისებს იყენებს. ამიტომ
CODE
sed -e 's/        /\t/g' yourfile.py  

ასწორებს.
ეს ბრძანება ყველა სფეისს შლის, 8 ცალ სფეისს კერძოდ და 1 ტაბს ამატებს.

Posted by: Dirac 20 Jan 2019, 18:57
QUOTE
ეს ბრძანება ყველა სფეისს შლის, 8 ცალ სფეისს კერძოდ და 1 ტაბს ამატებს.


8 ცალი რა უბედურებაა? ოთხია საჭირო.

Posted by: NinjaRacer 20 Jan 2019, 20:41
Dirac
QUOTE
8 ცალი რა უბედურებაა? ოთხია საჭირო.

ამასთან უნდა იყოს კავშირში მაგრამ ვერ დავაკავშირე მეც drug.gif მაგრამ ამან პრობლემა მოგივარა.
CODE

Don't use tabs.

Set your editor to use 4 spaces for indentation.
Make a search and replace to replace all tabs with 4 spaces.
>>>>>>>>>>Make sure your editor is set to display tabs as 8 spaces <<<<<<<<<<<

* * *
ააა მგონი მივხვდი.

ანუ ედიტორი ტაბებს აჩვენებს როგორც 8 სიმბოლოს ' ' ანუ 8 სფეისს.

სედი ჭრის ამ სფეისებს და მის ნაცვლად ამატებს ერთ ტაბს.

თუ რავი ხ.ზ ვერ მივხვდი ახლაც. მაგრამ ის კოდი პრობლემას მიგვარებს.

Posted by: NinjaRacer 23 Jan 2019, 19:30
ჰელოუ



პირველი 40 წუთი ძალიან ელემენტალურ რაღაცეებზე ბაზრობს.
კარგი მთლიანობაში.

Posted by: NinjaRacer 25 Jan 2019, 18:31
ვინა თქვა რომ ქართულად არ დევს ტუტორიალები.

აგერ ბექა ნავერიანი. პრფესიონალი დეველოპერია.



გვპირდება ჯანგოზეც გავაგრძელებო.


react-ზე ძალიან მომეწონა ლექცია. საკმაოდ გამარტივებული და ხელმისაწვდომია. პრიციპში ჯანგოზეც ჯავასკრიპტზე და ფლასკზეც იგივეს თქმა შეიძლება. ზოგადად ეს კურსი არი დამწყებზე ორიენტირებული.

Posted by: AnEeEeE=]] 28 Jan 2019, 13:59
CODE

class student(person):
   def __init__ (self, name, age, major =None):
       person. __init__ (self, name, age)
       self.major = major
   def __str__(self):
       return "student:" +str(self.name)+":"+str(self.age)+":"+str(self.major)
   def change_major(self, major):
       self.major = major
   def speak(self):
       r = random.random()
       if r < 0.25:
           print("i have homework")
       elif 0.25 <= r < 0.5:
           print("i need sleep")
       elif 0.5 <= r < 0.75:
           print("i should eat")
       else:
           print("i am watching tv")
s1= student('alice', 20, "cs")
s2=student("beth",18)
print(s1)
print(s2)
print(s1.get_name(),"says:",end = " " )
s1.speak()
print(s2.get_name(), "says:", end = " ")
s2.speak()

აქ (s2.get_name(), "says:", end = " ") აი ეს
end = " " რისთვისაა? რო ვაცილებ მერე ქვემოთ პრინტავს სფიქს ეგ გავიგე მარა , იქნებ ვინმემ გამარკვიოთ ნორმალურად რატო აკეთებს იმას რასაც აკეთებს givi.gif (მთლიან კოდს არ ვაგდებ ძაან დიდია )

Posted by: NinjaRacer 28 Jan 2019, 14:01
AnEeEeE=]]
ეგ ენდი იმისთვიაა რომ print() ფუნქცია. თავისით ამატებს ბოლოში \n

ანუ რამეს რომ დაპრინტავს ახალ ხაზზე გადავა შემდეგი პრინტი. ეგ არის default ქმედება და ამიტომ არ ჩანს. ავტომატურად აქვს გაწერილი end='\n' ანუ. ისე რომ არ ჩანს.

\n არი newline
\t არის ტაბი და აშ.

ფორმატისტვისაა. ანუ ტექსტი როგორც გინდა ისე რომ დაპრინტო.
სიტყვაზე გინდა რომ შემდეგი ხაზი tab-ით დაპრინტოს. უწერ end = '\n\t'

Posted by: AnEeEeE=]] 28 Jan 2019, 14:04
NinjaRacer
QUOTE
ეგ ენდი იმისთვიაა რომ print() ფუნქცია. თავისით ამატებს ბოლოში \n

ანუ რამეს რომ დაპრინტავს ახალ ხაზზე გადავა შემდეგი პრინტი.

ანუ სხვაგან რო გამოვიყენო ვთქვათ მეორე ხაზის პრინტს ზემოთ გადამიტანს ჩვეულებრივად?

კაიი გავიგეეე

Posted by: NinjaRacer 28 Jan 2019, 14:06
QUOTE
ანუ სხვაგან რო გამოვიყენო ვთქვათ მეორე ხაზის პრინტს ზემოთ გადამიტანს ჩვეულებრივად?


CODE

print('hi', end='\n\n\n\t')
print('world')


გაშვი და მიხვდები რასაც აკეთებს.

print() ფუნქციაში ეგრე იზამს.
სხვაგან ვერ გავიგე

პ.ს

სგ მაგარი დიდი კოდია და კარგი მაგალითია.

კი ეგრე იზამს.

print() თუ დააკვირდები ფუნქციაა. ადრე არ იყო ფუნქცია. მე-3-ე ვერსიაში გახდა.

და ამ ფუნქციის კოდში რომ ჩაიხედო ნახავ რომ

CODE

def print(str, end='\n'):
   bla balba

უწერია.

დეფაულტ keyword არგუმენტები ხომ გახსოვს?
ანუ ხელით თუ არ მიუთითებ end= თავისით newlines- ჩაწერს. სულ ეგაა.

და end='' ცარიელ სტრინგ თუ მიუთითებ იმ ნაგულისხმევ \n წაშლის და ყველა პრინტი ერთ ხაზზე დაიბეჭდება. ყველა არა ის კონკრეტული პრინტ სთეითმენტი მარტო. სხვებში თუ ჩაწერ სხვებშიც ეგრე იზამს.

Posted by: AnEeEeE=]] 28 Jan 2019, 17:47
ერთი კითხვა მაქვს შესაძლებელია პითონში ფუნქცები ენდოგენური იყოს? ანუ ერთ მეორეს განსაზღვრავდეს და მეორე პირველს. რაღაცას ვაკეთებ და ეგეთი რაღაცა დამჭირდა საბოლოო პასუხი დამოკიდებულია ფუნქციის არგუმენტზე, რომელიც განსაზღვრულია საბოლოო პასუხით, ეგეთი რამე თუა ნაცნობი დ თუ სხვა გზას დავადგე lol.gif

Posted by: NinjaRacer 28 Jan 2019, 18:00
QUOTE
ერთი კითხვა მაქვს შესაძლებელია პითონში ფუნქცები ენდოგენური იყოს? ანუ ერთ მეორეს განსაზღვრავდეს და მეორე პირველს. რაღაცას ვაკეთებ და ეგეთი რაღაცა დამჭირდა საბოლოო პასუხი დამოკიდებულია ფუნქციის არგუმენტზე, რომელიც განსაზღვრულია საბოლოო პასუხით, ეგეთი რამე თუა ნაცნობი დ თუ სხვა გზას დავადგე 




აბა ქართულად დაწერე იგივე. smile.gif
უცევ ვერ მივხვდი მე მაპატიე)


კი გენერატორები შეგიძლია ერთმანეთს გადააბა.

coroutine-ები ქვიათ

https://www.geeksforgeeks.org/coroutine-in-python/

ან factory functi0n აქედან რომელიღაცას გულისხმობს მემგონი gigi.gif

დაწერევეთ ვინმემ მე მვერ მივხვდი.

https://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html

https://www.tutorialspoint.com/python_design_patterns/python_design_patterns_factory.htm

ობიექტების ენკაპსულაციას და შექმნას ერთად ჩალიჩობ ინტერფეისიდან. იმპლემენტაცია რომც არ იცოდე.

Posted by: AnEeEeE=]] 28 Jan 2019, 18:13
NinjaRacer
კაი წავიკითხავ მაგას ,ვცდილობ მიტ ის პირველი პრობლემ სეთი გავაკეთო , ვითომ ეგეთი რამეები უნდა რაც არასდროს არუხსენებიათ? დ

Posted by: NinjaRacer 28 Jan 2019, 18:16
AnEeEeE=]]
http://coursegalaxy.com/python/functi0nfactory.htm
ეს ჯობია.
შეიძლება სულაც არ იყოს ეგეთი რამეები. შეიძლება იყოს კიდეც.
წაკითხვით ყველა ვარიანტში გამოგადგება. რაღაცა მაინც დაგრჩება წაკითხულიდან და მომავალში შეიძლება მიუბრუნდე ან გაგახსენდეს.

ესე ზეპირად მეც არ ვიცი ეხლა რომ არ მჭირდება ხშირად და არ მიკეტებია. მეც რამოდენიმეჯერ წაკითხვა შეიძლება დამჭირდეს.

იმიტომ გითხარი უფრო კონკრეტულად გვითხარი რის გაკეთება გინდა და დაგეხმარება ვინმე.


კიი იქნება
სავარაუდოდ decorator-ებზე გინამოიკებენ biggrin.gif

უეჭვ დეკორატორებია. იგივე callback ფუნქცია. იგივე closure functi0n-ს

თავიდან მერთულა ეგ მაგრამ ერთერთი ყველაზე გამოსადეგი და ხშირად გამოყენებადი ფიჩაა.
და რომ გაიგებ რამოდენიმეჯერ გამოიყენებ ბევრად მარტივი და გასაგები ხდება. იოლია პრინციპში ძალიან.

აი ძაან სასარგებლო და საკაიფო რამეა.

ფუნქციას ფუნქციას გადასცემ პარამეტრად თავის არგუმენტებით და ეს არგუმენტები შეგიძლია გამოიყენო, რამე შეამოწმო და ტიპის მიხედვით დაუბრუნო პირველ ფუნცქიას ობიექტი. ანუ ერთი ფუნქციის მუშაობის პროცესში ერევი, მანიპულაციას აკეთებ ჩაედიტებულ ან უფრო გამდიდრებულ ობიექტს გადასცემ ისევ პირველ ფუნქციას რო გააგრძელოს თავის საქმე + შენი დანამატებით.


თლა ფაქტორი არაა. ფაქტორი ფუნქციაში კლასის სახელიც უნდა იყოს ნახსენები ან globals() პარამეტრი მაინც.

Posted by: AnEeEeE=]] 29 Jan 2019, 12:18
NinjaRacer
არ დამჭირდა ეგენი, მივხვდი როგორც კეთდება პროსტა მაინც ვერ ვიღებ სწორ პასუხს lol.gif

Posted by: NinjaRacer 29 Jan 2019, 12:20
QUOTE
არ დამჭირდა ეგენი, მივხვდი როგორც კეთდება პროსტა მაინც ვერ ვიღებ სწორ პასუხს

დეკორატორით გააკეთებდი. ვიცი რომ არ დაგჭირდებოდა.

Posted by: AnEeEeE=]] 29 Jan 2019, 12:23
NinjaRacer
არა მე ჩავხლართე ძაან და, აი აქ რატო არ გამოდის ვერ გავიგე ახტება პასუხს და ძაან შორს მიდის ვაილ ლუპს ვერ აღწევს თავს
CODE
     
def portion_down_payment(total_cost):
   return total_cost*0.25

def howlong( r ):
     monthly_salary = annual_salary/12
     epsilon = 0.1
     guess = 0.0
     n = 1  
     increment = 1
     while  abs( monthly_salary*portion_saved*((1+r/12)**(12*n) -1)/r - portion_down_payment(total_cost)) >= epsilon and guess <= portion_down_payment(total_cost) :
            n += increment
     
     if abs(monthly_salary*portion_saved*((1+r/12)**(12*n) -1)/r- portion_down_payment(total_cost)) >= epsilon:  
          return 'Failed'
     else:
          return n
annual_salary = 1200000
portion_saved = 0.1
total_cost = 100000
   

r = 0.04        
print(howlong(r))

მოკლედ კოდმა უნდა მოძებნოს ის ხარისხი n , რომლის შესაბამისადაც ტოლობა შესრულდება, ზუსტად არ სრულდება ეს ტოლობა და მიახლოებითი პასუხი უნდა დამიჯინოს ამ ალგორითმმა

Posted by: HCl 29 Jan 2019, 13:35
მე ვერ ვერკვევი და პითონში და მითუმეტეს ამოცანაც არვიცი, მაგრამ ნუბურად რომ შევხედე
if abs(monthly_salary*portion_saved*((1+r/12)**(12*n) -1)/r- portion_down_payment(total_cost)) >= epsilon:
ამის მნიშვნელობა მთლიანად გარედან შესულ პარამეტრებზეა დამოკიდებული მემგონი.
რიცხვი გამოატანინე რას წერს.

Posted by: AnEeEeE=]] 29 Jan 2019, 13:38
HCl
ეგენი წერია ზემოთ


annual_salary = 120000
portion_saved = 0.1
total_cost = 1000000


r = 0.04
ერთადერთი რაც მაინტერესებს ვიპოვო არის n

Posted by: NinjaRacer 29 Jan 2019, 13:57
QUOTE
monthly_salary*portion_saved

ეს არ იცვლება
ჰოდა ვაილში ყოველ დატრიალებაზე არ დაათვლევინო ტყულიად

CODE


def howlong(r):
   monthly_salary = annual_salary / 12
   epsilon = 0.1
   guess = 0.0
   n = 1
   saved = monthly_salary * portion_saved
   portion_to_pay = total_cost * 0.25
   while abs(saved * ((1 + r / 12) ** (12 * n) - 1)) / r - portion_to_pay >= epsilon and guess <= portion_to_pay:
       guess += n

   if abs(saved * ((1 + r / 12) ** (12 * n) - 1)) / r - portion_to_pay >= epsilon:
       return 'Failed'
   else:
       return guess


annual_salary = 1200000
portion_saved = 0.1
total_cost = 100000

r = 0.04
print(howlong(r))

ცოტა გავამარტივე.

აქედან გავაგრძელოთ.

ვაილში საერთოდ არც შედის.

მაგ ფორმულას რა ქვია შეგიძლია დაწერო?

Posted by: AnEeEeE=]] 29 Jan 2019, 14:01
NinjaRacer
QUOTE
 guess += n

აქ ჩაწერე ნ+= 1
თორე ისე არ იცვლება მანდ ნ ები პირობაში

Posted by: NinjaRacer 29 Jan 2019, 14:06
AnEeEeE=]]
ეგ ხო მაგრამ while-ში არც შედის რადგან პირობას არ აკმაყოფილებს.
ნ-მდე საერთოდ არც მიდის.

ამიტომ ფორმულას თუ დაწერ კარგი იქნება.

Posted by: AnEeEeE=]] 29 Jan 2019, 14:24
NinjaRacer


CODE



def howlong( r ):
     portion_down_payment = total_cost*0.25
     monthly_salary = annual_salary/12
     epsilon = 0.1
     n = 0.0
     increment = 1
     while  abs( monthly_salary*portion_saved*(((1+r/12)**(12*n) -1)/r) - portion_down_payment) >= epsilon and n <= 30 :
            n += increment
     if abs(monthly_salary*portion_saved*(((1+r/12)**(12*n) -1)/r)- portion_down_payment) >= epsilon:  
               return 'Failed'
     else:
               return n
annual_salary = 120000
portion_saved = 0.1
total_cost = 1000000
   

r = 0.04        
print(howlong(r))

ვაილში როგორ არ შედის , უბრალოდ მაქედან ვეღარ გამოდის დ

Posted by: NinjaRacer 29 Jan 2019, 14:36
QUOTE
ვაილში როგორ არ შედის , უბრალოდ მაქედან ვეღარ გამოდის დ

არ შედის არა) რამე დაპრინტე აბა შიგნით.

Posted by: HCl 29 Jan 2019, 14:43
AnEeEeE=]]
ნ=1 ჩასვი რიცხვები ვოლფრამ ალფაზე და გადაამოწმებ.
სწორს გეუბნება წინაზე რომ არ იცვლებოდა ნ-ი და 1 იყო, იფ-ში რომ შედიოდა სრულდებოდა და მაგიტომ გამოქონდა ფეილდ.
ეხლაც ნ=1-ზე ვაილი რჩება და გადადის იფ-ზე იმასაც ასრულებს.

Posted by: AnEeEeE=]] 29 Jan 2019, 14:52
NinjaRacer
QUOTE
while abs(saved * ((1 + r / 12) ** (12 * n) - 1)) / r - portion_to_pay >= epsilon and guess <= portion_to_pay:

აბს ფრჩხილი დახურე შენ კოდში არ ტრიალდება ლუპი ჩემთან ტრიალდება

QUOTE
 guess += n

ამის გამო არ შევა კიდე, ეს ჩავასწორე მე, ენის ხარჯჰზე გესი იზრდება მარა მე ნის ცვლილება მაინტერესებს ტოლობაში

Posted by: NinjaRacer 31 Jan 2019, 09:45
AnEeEeE=]]
QUOTE
აბს ფრჩხილი დახურე შენ კოდში არ ტრიალდება ლუპი ჩემთან ტრიალდება

ამას სანამ დავწერდი ორივენაირად ვცადე smile.gif
QUOTE
guess += n

ეგ ლუფის შიგნითაა. რანაირად გაზრდის თუ ვერც შედის. მოკლედ. მთავარი ისაა რო იპოვე სოლუშენი და კიდევ ასეთი რთული ქონდიშენი თითქმის არასდროს არ უნდა იყოს. ესაა აქ მთავარი biggrin.gif

Posted by: AnEeEeE=]] 1 Feb 2019, 11:44
QUOTE
def long_repeat(line):
  list1 = []
  for i in line:
     k =  line[(line.index(i)): (line.rindex(i))+1]
     list1.append(k)
     for e in list1:
         if e != len(e)*e[0]:
            list1.remove(e)
            continue
  return  len(max(list1))
print( long_repeat('abababaab'))


აი კა რომ არი ი ელემენტი პირველი რაც ხვდება იმის ინდექსს აგდებს, მე მინდა ინდექსი ამოაგდოს მე-ი ე ელემენტის და როგორ გავაკეთო ეგ user.gif
* * *
გავაკეთეეე bis.gif ......................

Posted by: iraklikairakli 3 Feb 2019, 03:27
სალამი ხალხოო აქაც ვიკითხავ ბარემ smile.gif ესეიგი საიტს ვპარსავ yelp.com-ს. მომაქვს კერძების სახელები (Soco,SalaThai Restaurant...) და ასევე მინდა რომ reviews იც მოყვეს და როცა ფორ სიკლს სიკლში ვსვავ არ შვება :/ "ვერ" იქნებ ჰელფ მი :დ
https://repl.it/@IrakliGhviniani/SmartSimplisticTrapezoid

Posted by: AnEeEeE=]] 6 Feb 2019, 15:13


CODE
def translate(phrase):
   listphrase1    = [i for i in phrase ]  
   def func(listphrase1):
       consonants = 'bcdfghjklmnpqrstvwxz'    
       for e  in  range(len(listphrase1)-2):
           if listphrase1[e] in consonants:
              listphrase1.pop(e+1)
       return listphrase1
   vowels = "aeiouy"    
   for c in range(len(func(listphrase1))-3):
       if func(listphrase1)[c] in vowels:
           if func(listphrase1)[c] == func(listphrase1)[c+1] and func(listphrase1)[c+1] == func(listphrase1)[c+2]:
              func(listphrase1).pop(c+1) and func(listphrase1).pop(e+2)

   return func(listphrase1)  


   
print(translate("hieeelalaooo"))    


აბა დამეხმარეეთ თორე დავიხოკე ღაწვები lol.gif
მოკლედ ვერ გავიგე ლოკალურ ფუნქციაში ლისტის სიგრძე ხო იცვლება და ე ვერ ხედავს მაგას თურა პონტია აწერს რო list index out of range
პ.ს. ჰელლო უნდა დაპრინტოს ბოლოში

Posted by: Roy 6 Feb 2019, 16:23
AnEeEeE=]]
პირველი, მეორე და ბოლო ხაზის გარდა დროებით დააკომენტე დანარჩენი კოდი და ნახავ რომ NONE-ს აბრუნებს.

სადაც იდეაში ასეთ ლისტს ელოდები,
h
i
e
e
e
l
a
l
a
o
o
o
გიბრუნებს none-ს იმიტო რო listphrase1 = None.. მერე რო გადაცემ ლუპში, იქ არაფერი არ ხდება იმიტო რო none-ში აკეთებ ლუპს.

QUOTE
        consonants = 'bcdfghjklmnpqrstvwxz'   

QUOTE
    vowels = "aeiouy"   

ესენი ლისტები უნდა იყოს სტრინგების მაგივრად თუ სწორად ვხვდები კოდს

Posted by: AnEeEeE=]] 6 Feb 2019, 16:55
Roy
იტერაციებს აკეთებს, ინდექსის პრობლემაა, ლისთი მუტაბელ არის და როდესაც შლის ელემენტებს ზემოთ არ ითვალისწინებს რანჯ სადაც მაქვს და როცა ბოლოში გადის და აღარ ხვდება ელემენტი მაგის გამო იჭედება კოდი

Posted by: RexxaR 6 Feb 2019, 17:37
QUOTE (AnEeEeE=]] @ 6 Feb 2019, 15:13 )
CODE
def translate(phrase):
   listphrase1    = [i for i in phrase ]  
   def func(listphrase1):
       consonants = 'bcdfghjklmnpqrstvwxz'    
       for e  in  range(len(listphrase1)-2):
           if listphrase1[e] in consonants:
              listphrase1.pop(e+1)
       return listphrase1
   vowels = "aeiouy"    
   for c in range(len(func(listphrase1))-3):
       if func(listphrase1)[c] in vowels:
           if func(listphrase1)[c] == func(listphrase1)[c+1] and func(listphrase1)[c+1] == func(listphrase1)[c+2]:
              func(listphrase1).pop(c+1) and func(listphrase1).pop(e+2)

   return func(listphrase1)  


   
print(translate("hieeelalaooo"))    


აბა დამეხმარეეთ თორე დავიხოკე ღაწვები lol.gif
მოკლედ ვერ გავიგე ლოკალურ ფუნქციაში ლისტის სიგრძე ხო იცვლება და ე ვერ ხედავს მაგას თურა პონტია აწერს რო list index out of range
პ.ს. ჰელლო უნდა დაპრინტოს ბოლოში

ტვინი ამტკივდა ისეთი საყვარელი კოდი გაქვს დაწერილი

რის გაკეთებას ცდილობ გაგვანდე და დაგეხმარები

Posted by: @Schizophrenic 6 Feb 2019, 17:52
QUOTE
ტვინი ამტკივდა ისეთი საყვარელი კოდი გაქვს დაწერილი

რის გაკეთებას ცდილობ გაგვანდე და დაგეხმარები

+1 biggrin.gif biggrin.gif

AnEeEeE=]]
ამის წასაკითხად ვერ ვიმეტებ თავს
სავარაუდოდ ლისტის ინდექსებს რომ უმატებ რაღაცეებს მად ცდები ლისტის ზომას და ვეღარ გამოაქვს ის შედეგი რაც ლისტში არ არსებობს, list index out of range ეს ერორი მაგას ნიშნავს

Posted by: HCl 6 Feb 2019, 18:52
Stephan has a friend who happens to be a little mechbird. Recently, he was trying to teach it how to speak basic language. Today the bird spoke its first word: "hieeelalaooo". This sounds a lot like "hello", but with too many vowels. Stephan asked Nikola for help and he helped to examine how the bird changes words. With the information they discovered, we should help them to make a translation...

ამას ალბათ :დ

Posted by: AnEeEeE=]] 7 Feb 2019, 09:22
RexxaR
თანხმოვნების შემდეგ სიტყვას ემატება ხმოვანი და მაგ ხმოვანს ვშლი, ხმოვნების მერე ემატება ორი ხმოვანი და მერე მაგის წაშლა მინდა და ბოლოში სიტყვა უნდა დაჯდეს biggrin.gif

QUOTE
Stephan has a friend who happens to be a little mechbird. Recently, he was trying to teach it how to speak basic language. Today the bird spoke its first word: "hieeelalaooo". This sounds a lot like "hello", but with too many vowels. Stephan asked Nikola for help and he helped to examine how the bird changes words. With the information they discovered, we should help them to make a translation...

კი ესარი

@Schizophrenic
QUOTE
სავარაუდოდ

ვარაუდებზე ნუ მელაპარაკები კოდის წერისას lol.gif

QUOTE
func(listphrase1).pop(c+1) and func(listphrase1).pop(e+2)

უი აქ მეორეში ც უნდა იყოს ეს მაგივრად დდ

პ.ს. თრაი იქსეფთით გაკეთებული არმინდა, სხვაგანაც შევეჩეხე ამ პრობლემას და ვერ გავიგე როგორც გადავჭრა , ვინმე კომპეტენტურმა მიპასუხოს დ

Posted by: @Schizophrenic 7 Feb 2019, 11:23
QUOTE
ვარაუდებზე ნუ მელაპარაკები კოდის წერისას

biggrin.gif
ეგ ერორი მაგას ნიშნავს +1 +2 და რაღაცეები რომ გიწერია ინდექსებზე, მად სადღაც ცდილობ არარსებულ ინდექსზე მოქმედებას

Posted by: AnEeEeE=]] 7 Feb 2019, 11:31
@Schizophrenic
ვიცი , მაგრამ ეგ გათვალისწინებული მაქვს, მინუსები ხო მიწერია, პრობლემა ის არის რომ ლისთი მოკლდება და ამ დროს რაუნდა გავაკეთო ვერგავიგე

Posted by: HCl 7 Feb 2019, 12:38
...Stephan has a friend who happens to be a little mechbird. Recently, he was trying to teach it how to speak basic language. Today the bird
spoke its first word: "hieeelalaooo". This sounds a lot like "hello", but with too many vowels. Stephan asked Nikola for help and he helped
to examine how the bird changes words. With the information they discovered, we should help them to make a translation module.
The bird converts words by two rules:
- after each consonant letter the bird appends a random vowel letter (l ⇒ la or le);
- after each vowel letter the bird appends two of the same letter (a ⇒ aaa);
Vowels letters == "aeiouy".
You are given an ornithological phrase as several words which are separated by white-spaces (each pair of words by one whitespace).
The bird does not know how to punctuate its phrases and only speaks words as letters. All words are given in lowercase. You should
translate this phrase from the bird language to something more understandable.
Input: A bird phrase as a string.
Output: The translation as a string.

ეს ყოფილა სრული პირობა
________
ეს კოდი დავწერე მე
CODE
s=input()
for i in range(0,len(s)-1):
   if (s[i]!='a' and s[i]!='i' and s[i]!='u' and s[i]!='e' and s[i]!='o' and s[i]!='y') and (s[i+1]=='a' or s[i+1]=='i' or s[i+1]=='u' or s[i+1]=='e' or s[i+1]=='o' or s[i+1]=='y'):
      s=s.replace(s[i+1],'')
s=s.replace('aaa','a')
s=s.replace('iii','i')
s=s.replace('eee','e')
s=s.replace('ooo','o')
s=s.replace('yyy','y')
print(s)

და რატომ მაქვს ეს შეცდომა
CODE
$ python3 rrr.py
hieeelalaooo
Traceback (most recent call last):
 File "rrr.py", line 3, in <module>
   if (s[i]!='a' and s[i]!='i' and s[i]!='u' and s[i]!='e' and s[i]!='o' and s[i]!='y') and (s[i+1]=='a' or s[i+1]=='i' or s[i+1]=='u' or s[i+1]=='e' or s[i+1]=='o' or s[i+1]=='y'):
IndexError: string index out of range

ანუ იდეაში ვიწყებ 0 ინდექსიდან სტრინგის და მივდივარ ბოლოს წინა ინდექსამდე, და იფ პირობაში რომ ცდილობს მიწვდეს ი+1-ს ხომ არსებობს მასეთი ელემენტი ?

Posted by: AnEeEeE=]] 7 Feb 2019, 15:28
HCl

თრაი ექსეფთით მოვაგვარე ეგ პრობლემა ისევ, მარა ახლა სხვა პრობლემა მაქვს ისევ ლისთის მუთაბლობის გამო სამი ელემენტის ტოლობას რო აფიქსირებს და ერთს აგდებს მერე ლისთი მცირდება და უკვე ორ ელემენტიან ტოლობას აღიქვავს და მაგის გამო ერთ ხმოვნებს ზედმეტს მიტოვებს
CODE
def translate(phrase):
  listphrase1    = [i for i in phrase ]  
  def func(listphrase1):
      consonants = 'bcdfghjklmnpqrstvwxz'    
      for e  in  range(len(listphrase1)-2):
           try:
             if listphrase1[e] in consonants:
                 listphrase1.pop(e+1)
           except IndexError:
                  pass
      return  listphrase1
  vowels = "aeiouy"
  func(listphrase1)
  for c in range(len(listphrase1)-3):
          if (listphrase1)[c] in vowels:
             if (listphrase1)[c] == (listphrase1)[c+1] and (listphrase1)[c+1]==(listphrase1)[c+2]:
                (listphrase1).pop(c+1)  
                (listphrase1).pop(c+2)
         
  return listphrase1  


 

 
print(translate("hieeelalaooo"))  


CODE
def translate(phrase):
  listphrase1    = [i for i in phrase ]  
  def func(listphrase1):
      consonants = 'bcdfghjklmnpqrstvwxz'    
      for e  in  range(len(listphrase1)-2):
           try:
             if listphrase1[e] in consonants:
                 listphrase1.pop(e+1)
           except IndexError:
                  pass
      return  listphrase1
  vowels = "aeiouy"
  func(listphrase1)
  for c in range(len(listphrase1)-3):
       try:
          if (listphrase1)[c] in vowels:
             if (listphrase1)[c] == (listphrase1)[c+1] and (listphrase1)[c+1]==(listphrase1)[c+2]:
                (listphrase1).pop(c+1)  
                (listphrase1).pop(c+1)
       except IndexError:
                  pass  
  return ''.join(listphrase1)  


 

 
print(translate("aaa bo cy da eee fe"))  

აჰაა აი ეს კოდი უკვე თითქმის ის არი რაც მე მინდა
* * *
CODE
def translate(phrase):
  listphrase1    = [i for i in phrase ]  
  def func(listphrase1):
      consonants = 'bcdfghjklmnpqrstvwxz'    
      for e  in  range(len(listphrase1)-1):
           try:
             if listphrase1[e] in consonants:
                 listphrase1.pop(e+1)
           except IndexError:
                  pass
      return  listphrase1
  vowels = "aeiouy"
  func(listphrase1)
  for c in range(len(listphrase1)-2):
       try:
          if (listphrase1)[c] in vowels:
             if (listphrase1)[c] == (listphrase1)[c+1] and (listphrase1)[c+1]==(listphrase1)[c+2]:
                (listphrase1).pop(c+1)  
                (listphrase1).pop(c+1)
       except IndexError:
                  pass  
  return ''.join(listphrase1)  

ამ კოდმა გაიარა ყველა ჩექი , მარა ინდექსზე მაინც არ მომწონს თრაი ექსეფშონის გამოყენება

Posted by: @Schizophrenic 7 Feb 2019, 20:59
QUOTE
ანუ იდეაში ვიწყებ 0 ინდექსიდან სტრინგის და მივდივარ ბოლოს წინა ინდექსამდე, და იფ პირობაში რომ ცდილობს მიწვდეს ი+1-ს ხომ არსებობს მასეთი ელემენტი ?

ანუ s=s.replace(s[i+1],'') ამას რომ აკეთებ მად სთრინგს ერთი ასო აკლდება და ეგაა პრობლემა, s=s.replace(s[i+1],' ') ესე დაწერე და მოგვარდება ეგ პრობლემა( ' '-სფეისი ბრჭყალებს შორის) და ბოლოს რეფლეისით მოაშორე სფეისი თუ არ გჭირდება
AnEeEeE=]]
შენც იგივენაირად ხოარ გაქ? ვერ ვკითხულობ მაგ კოდს იზვინი cry.gif

Posted by: HCl 8 Feb 2019, 01:02
@Schizophrenic
ვა შენ გაიხარე, რა მარტივი რამე ყოფილა :დ

აი ჩემი კოდი AnEeEeE=]] ტესტები გადაატარე რა
CODE
s=input()
for k in range(0,len(s)-1):
      if (s[k]!='a' and s[k]!='i' and s[k]!='u' and s[k]!='e' and s[k]!='o' and s[k]!='y' and s[k]!='*') and (s[k+1]=='a' or s[k+1]=='i' or s[k+1]=='u' or s[k+1]=='e' or s[k+1]=='o' or s[k+1]=='y'):
             s=s.replace(s[k+1],'*')
#print(s)            
s=s.replace('aaa','a')
s=s.replace('iii','i')
s=s.replace('eee','e')
s=s.replace('uuu','u')
s=s.replace('ooo','o')
s=s.replace('yyy','y')
s=s.replace('*','')
print(s)

Posted by: Roy 8 Feb 2019, 03:26
გაჭედილი ვარ ამ კოდზე ვერაფერი მოვუხერხე. sad.gif
CODE

import csv,ipaddress,logging
def csv_Parse():
with open('ObjectList.csv', 'r') as csv_file:
 csv_read = csv.reader(csv_file, delimiter = ',')
 next(csv_file)
 ''' Now we launch the loop and store each column in respective variable'''
 for Each_Line in csv_read:
  objectname = Each_Line[0]  #### ცსვ ფაილის პირველი სვეტის ყველა row .. ეს ლისტია ხო ? :spy:
  objectip = Each_Line[1]          
  objectmask = Each_Line[2]  
  objectcomments = Each_Line[3]  
  objectmeta = Each_Line[4] ### ცსვ ფაილის ბოლო სვეტი (მეხუთე)  
  validatedIP = Validate_IP(objectip)   # აი ეხლა აქ ვიჭედები.. რა IPებიც ამოიღო ცსვდან მაგის ვალიდაცია მინდა გავაკეთო Validate_IP ფუნქციით.
  while (validatedIP):   ############# პოტენციური პრობლემა.
   Print_Commands(objectname, str(validatedIP), objectmask, objectcomments)  #### და ბოლოს უნდა ავაგო ASA ფაირვოლის ბრძანება Print_Command  ფუნქციით.
   break


აგერ არის დანარჩენი კოდი.
CODE
def Validate_IP(objectip):
while True:
 try:
  ipaddress.ip_address(objectip)
  return objectip

 except ValueError as error:
  while True:
   logger = logging.getLogger()
   print("Invalid IP address detected in CSV file!")
   logger.error(error)
   break
   raise
                               return
 break
def Print_Commands(objectname, validatedIP, *objectmask):
Print_Commands.MAFAddHostObject = print('newtork object ' + objectname, '\n',
          'descr1ption ' + objectmask[1], '\n',
          'host ' + validatedIP, '\n', '!' )
csv_Parse()


საქმე იმაშია რომ ეს კოდი მუშაობს მაგრამ ბაგი აქვს...
დაუშვათ ცსვ ფაილში არის შეცდომა და IP წერია 192.168.1.2566.. .. რაც სწორია სიაში იმისთვის სწორად ბეჭდავს ბრძანებებს, ამ არასწორზე რო მივა loop, მაგას როგორც ერორს ისე ბეჭდავს და აგრძელებს.. მომდევნო თუ სწორია ისევ სწორ ბრძანებებს ბეჭდავს და ა.შ.
მინდა რო არასწორად თუ წერია ცსვ ფაილში სადმე IP, არანაირი ბრძანება არ დაპრინტოს და დაწეროს რო ცსვ ფაილში არის შეცდომა.

Posted by: @Schizophrenic 8 Feb 2019, 11:06
QUOTE
მინდა რო არასწორად თუ წერია ცსვ ფაილში სადმე IP, არანაირი ბრძანება არ დაპრინტოს და დაწეროს რო ცსვ ფაილში არის შეცდომა.

თრაი ექსცეპტში ჩასვი დაბეჭდვა
try:
(კოდი)
except:
print("ცსვ ფაილში არის შეცდომა")
ასე არ შვება?
* * *
QUOTE
objectname = Each_Line[0]  #### ცსვ ფაილის პირველი სვეტის ყველა row .. ეს ლისტია ხო ? spy.gif

CSV excel-თან სამუშაოდაა ხო? არვიცი ეგ მარა, როცა ჩვეულებრივი ტხტ-დან შემოგაქ ეგ პირველი ასოა ხაზის
QUOTE
for Each_Line in csv_read:
  objectname = Each_Line[0]
  objectip = Each_Line[1]         
  objectmask = Each_Line[2]  
  objectcomments = Each_Line[3] 
  objectmeta = Each_Line[4]

აქ ტექსტ დოკუმენტიდან წაკითხვისას ამ ცვლადებში ყველაში ჩაგიწერდა ბოლო ხაზის პირველ , მეორე, მესამე, მეოთხე ასოს(რა ინდექსებიც გაქ მითითებული ოღონდ ყველა ბოლო ხაზიდან იქნება)

Posted by: Roy 8 Feb 2019, 13:10
@Schizophrenic
QUOTE
for Each_Line in csv_read:
  objectname = Each_Line[0]
  objectip = Each_Line[1]        
  objectmask = Each_Line[2] 
  objectcomments = Each_Line[3]
  objectmeta = Each_Line[4]


ამ ლუპიდან returnით როგორ დავაბრუნებინო მთლიანი objectip მაგალითად? დაუშვათ 500 IP მისამართი მაქვს მაგ სვეტში და ყველა მინდა რო დააბრუნოს
return(objectname, objectip, objectmask)-ს რო ვაძლევ მერე მარტო ბოლო IPს მაძლევს

Posted by: @Schizophrenic 8 Feb 2019, 17:24
QUOTE
ამ ლუპიდან returnით როგორ დავაბრუნებინო მთლიანი objectip მაგალითად? დაუშვათ 500 IP მისამართი მაქვს მაგ სვეტში და ყველა მინდა რო დააბრუნოს
return(objectname, objectip, objectmask)-ს რო ვაძლევ მერე მარტო ბოლო IPს მაძლევს

ხაზები შეგიძლია წაიკითხო და ეგ ხაზები ლისტში ჩაყარო, მერე მთლიან ლისტს დააბრუნებ
https://stackoverflow.com/questions/17262256/how-to-read-one-single-line-of-csv-data-in-python
აქ წერია ცსვ ფაილიდან წაკითხვაზე, ტხტ-დან რედლაინ ფუნქციით კითხულობს ხაზებს

Posted by: AnEeEeE=]] 11 Feb 2019, 13:07
CODE
class Warrior(object):
   def __init__(self, health= 50, attack=5):
       self.health = health
       self.attack = attack
   def get_health(self):
       return self.health
   def get_attack(self):
       return self.attack
   def __str__(self):
       return "<"+str(self.health)+","+str(self.attack)+">"
   def is_alive(self):
       return self.health > 0  
def fight(x, y):
       y.health =  y.health - x.attack
       if y.health  > 0 and x.health > 0 :
           x.health = x.health - y.attack
           return fight(x, y)
       return x.health > 0

         
           
class Knight(Warrior):
   def __init__(self, health=50, attack=7):
       Warrior.__init__(self, health, attack)
   def get_health(self):
       return self.health
   def get_attack(self):
       return self.attack  
   def __str__(self):
       return "<"+str(self.health)+","+str(self.attack)+">"

chuck = Warrior()
   bruce = Warrior()
   carl = Knight()
   dave = Warrior()
   mark = Warrior()
   jim = Knight()
   
   assert fight(chuck, bruce) == True
   assert fight(dave, carl) == False
   assert chuck.is_alive() == True
   assert bruce.is_alive() == False
   assert carl.is_alive() == True
   assert dave.is_alive() == False
   assert fight(carl, mark) == False
   assert carl.is_alive() == False

TypeError: <class 'dict'> is wrong data type
ხალხო ვინმეს შეუძლია ამიხსნას ამას რატო მიწერს?

Posted by: robox 11 Feb 2019, 13:29
QUOTE (AnEeEeE=)
],11 Feb 2019, 13:07 ]
CODE
class Warrior(object):
   def __init__(self, health= 50, attack=5):
       self.health = health
       self.attack = attack
   def get_health(self):
       return self.health
   def get_attack(self):
       return self.attack
   def __str__(self):
       return "<"+str(self.health)+","+str(self.attack)+">"
   def is_alive(self):
       return self.health > 0  
def fight(x, y):
       y.health =  y.health - x.attack
       if y.health  > 0 and x.health > 0 :
           x.health = x.health - y.attack
           return fight(x, y)
       return x.health > 0

         
           
class Knight(Warrior):
   def __init__(self, health=50, attack=7):
       Warrior.__init__(self, health, attack)
   def get_health(self):
       return self.health
   def get_attack(self):
       return self.attack  
   def __str__(self):
       return "<"+str(self.health)+","+str(self.attack)+">"

chuck = Warrior()
   bruce = Warrior()
   carl = Knight()
   dave = Warrior()
   mark = Warrior()
   jim = Knight()
   
   assert fight(chuck, bruce) == True
   assert fight(dave, carl) == False
   assert chuck.is_alive() == True
   assert bruce.is_alive() == False
   assert carl.is_alive() == True
   assert dave.is_alive() == False
   assert fight(carl, mark) == False
   assert carl.is_alive() == False

TypeError: <class 'dict'> is wrong data type
ხალხო ვინმეს შეუძლია ამიხსნას ამას რატო მიწერს?

არ აგდებს ჩემთან ერორს


user posted image

Posted by: AnEeEeE=]] 11 Feb 2019, 13:55
robox
ვაა აბა ტესტერი მიგდებს მაგას და ვერ გავიგე რატო დიკთ ვაფშე რა შუაშია ეგეც კივერ გავიგე

Posted by: NinjaRacer 18 Feb 2019, 09:44
ზდ pep-ცი.
pep - python enhancment proposal ყოფილა.
ახალი სინტაქსი დაემატარა რაც ძალიან მომეეწონა.

:=

გოუშიც არის ეს სინტაქსი მგონი და იქ duck typing-ისთვის გამოიყენება როგორც მახსოვს. აქ სულ სხვა მნიშვნელობა აქვს )



Posted by: ბიჭური 18 Feb 2019, 16:55
CODE
2019

CODE
Python


drug.gif

----------------------------------------

Posted by: Dirac 18 Feb 2019, 22:44
ბიჭური
რა გიკვირს? პითონი არის ხელოვნურ ინტელექტში მთავარი ენა. ქეგლ-ზე პითონში აკეთებენ პროექტების 80%-ს. დიდ ფინანსურ კომპანიებიში საქმის 90% პითონში კეთდება.

Posted by: Optimer 19 Feb 2019, 00:05
QUOTE
დიდ ფინანსურ კომპანიებიში საქმის 90% პითონში კეთდება.

facepalm.gif

Posted by: robox 19 Feb 2019, 00:21
QUOTE (ბიჭური @ 18 Feb 2019, 16:55 )
CODE
2019

CODE
Python


drug.gif

----------------------------------------

რატო ###ზე არ გკიდია?ვისაც რა სად უნდა იქ და იმაში დაწერს

Posted by: Dirac 19 Feb 2019, 03:16
Optimer
რა თავში იტყაპუნებ? რომელიმე სერიოზულ ფინანსურ კომპანიაში გიმუშავია? საინვესტიციო ბანკებში პრაისერები C++ზეა დაწერილი. ამ პრაისერებზე ძალიან ცოტა ხალხი მუშაობს, მაგრამ ათიათასობით პროგრამისტი და ფინანსისტი პითონიდან იძახებს და ყველაფერი პითონში აქვთ. პითონზე აქვთ აგებული სისტემა რომელიც მილიარდობით ჯდება. ეტყობა ქართველი ექსპრეტებისთვის არ უკითხავთ თორემ ხო აირჩევდნენ C#-ს biggrin.gif

Posted by: NinjaRacer 19 Feb 2019, 04:07
მაგრად მკიდია რომელიმე ენის ფრეიმვორკის ან ბიბლიოთეკის ფანობა biggrin.gif
python, ruby, java, php, C# node.js, go ეს ის ენებია რომელიც არ მომკვდარა და ვერც მოკვდება კიდევ ძალიან დიდი ხანი. კიდევ უფრო აქტუალური გახდება მოგვწონს თუ არა.
განსაკუთრებით პითონი :დ ღადაობს პეპე :დ დაგვტროლა და წავიდა.

ფინანსური არვიცი და გუგლი ძალიან ბევრ რამეში იყენებს პითონს და დეველოპერებიც საკმაოდ ყავს.
ლინუქსში თითქმის ყველაფერი დაწყებული პაკეტ მენეჯერებიდან დაწერილია პითონში.
Ansible -იც პითონშია დაწერილი.
dropbox-იც

გუგლის კლაუდ პლატროფმის ერთერთი მთავარ პროდუქტშიც პითონი აქვთ გამოყენებული და ###ები რო არ არიან მანდ. თქვენც იცით.
https://cloud.google.com/appengine/

ML ხალხიც ყველა ჩერეზე პითონ მუშაობს. საქართველოში თითქმის ყველგან სოფთვეა კომპანიებში ყავთ პითონის კამანდაც და იყენებს ყველა რაღაცაში მაინც. ღადაობ? biggrin.gif

scientific community-შიც ყავს თავის კლიენტები პითონს biggrin.gif

https://en.wikipedia.org/wiki/Google_App_Engine

QUOTE
Written in Python, Java, Go, PHP, Node.js 
Initial release April 7, 2008; 10 years ago

:ფაცეპალმ:

გასაგებია რომ არ მოგწონთ პითონი, მაგრამ თქვენზე არაადამოკიდებული ეგ. პოპულარული და გამოყენებადი იქნება კიდევ ძალიან დიდხანს.
* * *
ანსიბლი რაა არის თუ არ იცით


ყველაა ასეთი ტული ან ამის მსგავსი როგორც წესი პითონში იწერება.

Posted by: AnEeEeE=]] 19 Feb 2019, 11:09
QUOTE
ML ხალხიც ყველა ჩერეზე პითონ მუშაობს

მლ ხალხი როდის გავხდები biggrin.gif

Posted by: NinjaRacer 19 Feb 2019, 16:35
QUOTE
მლ ხალხი როდის გავხდები 

დაახ. 10 წუთში

დაგუგლე MNIST. ეგ ითვლება ML-ის ჰელოუ ვორლდად.
და გაყევი გაიდს. დაატრეინინგე სეტი და ამოიცნობინე ციფრები. ამით დაიწყე. დალშე გემოვნების მიხედვით.
კალკულუსი და ალჯებრაც იცი რო რამე

https://towardsdatascience.com/image-classification-in-10-minutes-with-mnist-dataset-54c35b77a38d


საოარი დამთხვევაა. პითონით ჩალიჩობ. აქაც

Posted by: Roy 19 Feb 2019, 17:51
კლასსის მეთოდს პარამეტრები როგორ მივცე როცა ეს პარამეტრები მაქვს ლისტში და ეს ლისტი არის კლასის გარეთ ? user.gif

Posted by: NinjaRacer 19 Feb 2019, 18:09
Roy
QUOTE
კლასსის მეთოდს პარამეტრები როგორ მივცე როცა ეს პარამეტრები მაქვს ლისტში და ეს ლისტი არის კლასის გარეთ ?


Classmethod-ს გულისხმობ?
კოდი დადევი აბა.

Class.method(params)

ან ინსტანსი გააკეთე კლასის ჯერ და მერე მიეცი
x= Class()
x.method(params)

კოდი დადევი უფრო გასაგები რომ იყოს.

https://realpython.com/instance-class-and-static-methods-demystified/


მგონი (**args) სინტაქს გგინდა.

Posted by: Roy 19 Feb 2019, 18:33
NinjaRacer
აგერ ძია..
მოკლედ რო დავწერო რისი გაკეთება მინდა..ASA ფაირვოლისთვის მომდის დახუია რექვესტები რა.. ხან ჰოსტის ობჯექტია დასამატებელი, ხან საბნეტის, ხან ორივე ერთად და ა.შ.
ერთი რაღაც unified ფაილი არაა რომელსაც გავპარსავ. ამის გამო გადავწყვიტე რო csv ფაილში ჩავყარო პარამეტრები (ობჯექტის სახელი, IP, მასკა და ა.შ)
მერე ცსვ პარსერი ამ დატას პარსავს და ინახავს ლისტებში.. მერე ეს ლისტი უნდა მივცე რამენაირად კლასს რო ბრძანებები დამიბეჭდოს და აი აქ ვარ გაჭედილი.
თუ გინდა რო გატესტო, რამე csv ფაილი შექმენი (სკრიპტში objectlist.csv მაქ მითითებული სახელად) და სამი Fილდი გაუწერე, name, IP, comment

Posted by: NinjaRacer 19 Feb 2019, 18:37
Roy
ოკ. პადაჯდი სიანტერესოა.

ესეიგი ასას ლოგში მოსული რექუესტები გინდა გინდა რომ ბრძანებებად აქციო.
საინტერესოა მართლა. გავაკეთოტ. 1 სეკუნდი დაიცა.

ხარაშო გავტესტავ.

წავედი ყავა მოვიდგა yes.gif

Posted by: Roy 19 Feb 2019, 18:45
NinjaRacer
ლოგში არა.. კლიენტები ცალკე ექსელ ფაილებში ტენიან რაც უნდათ იმას რა.. რა IPებიცაა დასამატებელი და ა.შ
მერე იმ ექსელ ფაილებიდან (ხანდახან ვორდფაილებიდანაც) ხელით ვაკოპირებ დატას და ვტენი ცსვ ფაილში.. როგორც ზევით დავწერე ერთი კონკრეტული unified ტემპლეიტი არ არსებობს რომელსაც კლიენტი შეავსებს და გამოგვიგზავნის.. ყველას თავის გემოზე აქვს აწყობილი ეგ

მასტმა ეხლა შეიძლება რექვესტ თიქეთი გაგვიხსნას რო დავამატოთ სიტყვაზე 100 ცალი host ან subnet ობჯექტი რომელიღაც ობჯექტგრუპში.
object-group network {obj.group name}
descr1ption {object descr1ption}
network-object object {objectname}

დაახლოებით ასეთი რამე.. {}=ებში რაც უნდა იყოს მაგ პარამეტრებს csv_parse ფუნქცია იძლევა ლისტის სახით.



Posted by: NinjaRacer 19 Feb 2019, 18:58
Roy
ყოჩაღ ძაან საკაიფოდ გაქვს.
ძაან საკაიფოდ გაქვს კოდი დაწერილი ისე.
ჯერ ესე გავეკთოთ იმუშაოს და მერე

ვებით რო წამოიღო არ გინდა? რექუესტები მომდისო რო თქვი მეგონა ასას ASDM ან სადმე მოგდიოდა...

რადგან ხელით მოგდის და სტანდარტიზებულიც არაა. საზიზღარი ტასკი ყოფილა. ხელით მაგის კეთება.
ჰოდა სგ. კარგი მოგიფიქრებია.

json ან გინდაც csv ფორმატში გექნება ეგ უნიფიცირებული ფაილი. ლოგიკა მოაკლდება კოდს და ბევრად მარტივი გახდება. ნუ რადგან დაწერე უკვე კარგია. ვალიდაციას მაინც გაივლის.

პროსტა რადგან ადმინური საქმეა და ამარტივებ. ბავრებ 1-ით ნაკლები პრობლემა გექნება ექსელის და ფორდ ფაილებსაც გააჯმეინებ და თითქმის სრულიად აუტომატიზირებული და აუტონომიური ტული გენქება.


აა რადგან თიქეთები მოგდის მაშინ იყოს როგორცაა. კაი ვნახოთ მაშინ ესე.

კაი ჩავუჯდეთ მაშინ :დ ყავაც მოვიდგი :დ

Posted by: Roy 19 Feb 2019, 19:20
NinjaRacer
5 თუ 6 კვირაა რაც დავიწყე პიტონის სწავლა და მესიამოვნა ეხლა რო მითხარი კარგად გაქვს დაწერილიო biggrin.gif .. თუმცა არ გეთანხმები მაინც givi.gif
ერთი ეხლა რაც მრჩება გასაკეთებელი არის ის რომ csv_parse ფუნქცია რო დააბრუნებს punchcard ლისტს, მერე ეგ punchcard უნდა ვაჭამო რომელიმე კამანდას..ვაბშე თავისით თუ გაარჩევს რომელ ბრძანება დაბეჭდოს მთლად უკეთესი იქნება..რეალურად თუ საბნეტი აქვს მაშინ object network {name}, subnet {ip} {subnet} .. თუ ჰოსტია(როცა მასკა არ აქვს punchcardში) მაშინ object network {name}, host {ip}
* * *
NinjaRacer
QUOTE
პროსტა რადგან ადმინური საქმეა და ამარტივებ. ბავრებ 1-ით ნაკლები პრობლემა გექნება ექსელის და ფორდ ფაილებსაც გააჯმეინებ და თითქმის სრულიად აუტომატიზირებული და აუტონომიური ტული გენქება.

მაგას ვუმიზნებ ზუსტად.. ჯერ ასათი დავიწყე იმიტო რო ყველაზე ადვილი cli ამ მღლეობა FWს აქვს.. დალშე მერე ჩეკპოინტისთვის და Fორტიყლეობისთვის დავწერ იგივეს.. მთავარია პრინციპი გავიგო რა როგორ.
აი ჩეკპოინტზე რო მოგდის 500 ცალი ჰოსტ ობჯექტის ლისტი და ეგენი რო უნდა დაამატო ხელით.. ეჰ... მაგას მირჩევნია წავიქცე და თავი დავარტყა რამეს givi.gif

Posted by: NinjaRacer 19 Feb 2019, 19:28
Roy

ხო არ იქნება პრობლემა. ჯერ ესე ავამუშაოთ.
პითონს რო აჯვამენ აქ. აი რასაც ჩალიჩობ ზუსტად ამისთვისაა ეს ენა საუკეთესო. ადმინური ტაკსებისთვის.
ანსიბლიც და ეგეთი ტულები. 1 ლეპტოპიდან 1000-სერვერს მართავ ძალიან მარტივად. 1 ან 2 ბრძანებით.
აუ სამსახურში მახსოვს ერთი 10 წლის წინ ჩვენი ნეტადმინები ხელით რო აკოპირებდნენ კონფიგებს ხოლმე.

პითონი არის ჯიგარი ენა მოკლედ 1 სიტყვით :დ და კარგია რომ ასე საკაიფოდ დაწერე მართლა.
აუ რავი მართლა ძაან კულტურული კოდია. დაჟე დოქსტრინგებიც რომ გაქვს კლასებში
'''
'''
გაასწორა. მართლა ძაან ჯიგრულად გაქ და ააქამდე რო მოხვედი ლისტის გადაცემას რაღაუნდა კლასში შეკაცო.
აი რაც თქვი ეგენიც ავამუშაოთ და 'დავტვიკოთ' მერე ბოლომდე. აბა პითონიც მაგისთვისაა და გამოვიყენოთ ბოლომდე მაგის დედაც ? :დ

მოიცადე და დავალაგოთ ბოლომდე რაღადარჩა.

Posted by: Roy 19 Feb 2019, 19:31
ერთი იდეა მაქვს ეხლა..
მეთოდს უნდა გადავცე self და *args.

*args-ს ლისტი რო მიუვა პარამეტრებს ხო იმ მიმდევრობით მიცემს როგორც ლისტშია? ლისტი მამენტ ordered data structure არის და უნდა ქნას წესით

Posted by: NinjaRacer 19 Feb 2019, 19:51
Roy
პირდაპირ arg-ით გადაეცი არუნდა *არგსი

ეგ მაშინ უნდა როცა გამოყოფილი გაქვს პარამატერები. (პარამ1, პარამ2, 3)
და როცა (ლისტს) გადასცემ. ლისტი 1 ობჯექტია smile.gif
მერე უკვე შიგნით self.args = [x for x in args] და გაშლი ან რაღაც მსგავს იზამ.

ან ესეც შეგიძლია გაშალო უკვე კლასის შიგნით.


ip, addr, name, *coment = youlist

აქ ბოლო *comment იცი რას იზამს. ლისტში რამდენი ელემენტიც დარჩა იმეებს მიაწერს ბოლო *coment-ს.

თუ არაფერია მეოთხე ელემტენში არცეეგა პრობლემა დაჟE. მაგრამ თუ გინდა len(yourlist) >4 გაუკეთებ სანამ შეყრი და ეგაა. ზუსტად არ მახსოვს ეხლა შეიძლება რამე ერორი გაგეჩითოს ან ვაფშე try except-ში ჩასვი.

პ.ს შენ კოდში #error დავაკომენტარე და თავისი ერორი გამოვატანინე.
ipaddress.AddressValueError: Only decimal digits permitted in ' 10' in ' 10.0.0.1'

ეს მომცა. არ მქონია ამ ბიბლიოთეკასთან შEხება და ეხლა ვარკვევ რაუნდა smile.gif
* * *
ამუშავდა შენი კოდი

სად დავდოთ მითხარი smile.gif
* * *
Roy
QUOTE
ერთი იდეა მაქვს ეხლა..
მეთოდს უნდა გადავცე self და *args.

ეგრე გადავეცი როგორც თქვი და იმუშავა.

CODE

def CSV_Parse():
   """ This functi0n parses and checks for errors in csv file
       If no errors in csv file, it will return PunchCard that will be  'fed' to class Commands later"""
   PunchCard = []
   with open('objectlist.csv', 'r') as csv_file:
       csv_reader = csv.reader(csv_file, delimiter=',')
       next(csv_reader)
       # for i in csv_reader:
       #     print(i)
       DefaultComment = "MACD#-AL97-" + f'{datetime.now():%b-%d-%Y}'
       for Each_Row in csv_reader:  # Let the parse begin
           if (len(Each_Row[0]) == 0 or len(
                   Each_Row[1]) == 0):  # Checking if "Name" and "IP" fields are not blank in csv file.
               print("Error Occured! 'Object Name' and/or 'IP' fields cannot be empty")
               return
           if len(Each_Row[2]) == 0:
               Each_Row[2] = DefaultComment

           # print(Each_Row[1], 'Second ROW')
           IP = Check_IP(Each_Row[1])
           if IP == False:
               return
           elif '/32' in Each_Row[1] or '/' not in Each_Row[1]:
               Each_Row[1] = IP[0]
           else:
               Each_Row[1] = IP
           PunchCard.append(Each_Row)
       # for Each_Element in PunchCard:
       #     print(Each_Element)
       return commands(*PunchCard)


ოღონდ ცმირე პრობლემები ქონდა და ოდნავ გადავაკეთე.
მაგალითად შენი პაჩქარდი ხო ლისტია და ამ ლისტში კიდევ ერთი ლისტი გააკეთა, სადაც ip და network-ი იყო.

და ამ ნაწილსში
CODE

class commands:
   def __init__(self, name, ipmask, comment, inline=None, ObjectGroup=None):
       self.name = name
       self.ipmask = ipmask
       self.ip = ipmask[0]
       self.mask = ipmask[1]
       self.comment = comment

გადავაკეთე ცოტა.

კიდევ ამაზე აგდებდა ექსეფშენს.

checkIP-ში.
ეს შევცავალე მარტო
CODE

 # address = IPv4Network(ip, strict=False).with_netmask
       address = ip_network(ip, strict=False).with_netmask

ზედა ხაზე დავაკომენტარე და ჩავსვი ქვედა. დანარჩენი იგივეა.
ეხლა არც თქვი გრუპებადო ეგ დავტვიკოთ.
* * *
QUOTE
.ვაბშე თავისით თუ გაარჩევს რომელ ბრძანება დაბეჭდოს მთლად უკეთესი იქნება..რეალურად თუ საბნეტი აქვს მაშინ object network {name}, subnet {ip} {subnet} .. თუ ჰოსტია(როცა მასკა არ აქვს punchcardში) მაშინ object network {name}, host {ip}

არც მაგის გარჩევას უნდა დიდი რამე )

Posted by: AnEeEeE=]] 20 Feb 2019, 09:17
NinjaRacer
QUOTE
მლ ხალხი როდის გავხდები 

დაახ. 10 წუთში

დაგუგლე MNIST. ეგ ითვლება ML-ის ჰელოუ ვორლდად.
და გაყევი გაიდს. დაატრეინინგე სეტი და ამოიცნობინე ციფრები. ამით დაიწყე. დალშე გემოვნების მიხედვით.
კალკულუსი და ალჯებრაც იცი რო რამე

ჯერ ჩეკიოზე ერთი 100 ამოცანა უნდა გავაკეთო lol.gif
* * *
CODE
class Node(object):
   def __init__(self, name):
       """Assumes name is a string"""
       self.name = name
   def getName(self):
       return self.name
   def __str__(self):
       return self.name

class Edge(object):
   def __init__(self, src, dest):
       """Assumes src and dest are nodes"""
       self.src = src
       self.dest = dest
   def getSource(self):
       return self.src
   def getDestination(self):
       return self.dest
   def __str__(self):
       return self.src.getName() + '->' + self.dest.getName()
             
class Digraph(object):
   """edges is a dict mapping each node to a list of
   its children"""
   def __init__(self):
       self.edges = {}
   def addNode(self, node):
       if node in self.edges:
           raise ValueError('Duplicate node')
       else:
           self.edges[node] = []
   def addEdge(self, edge):
       src = edge.getSource()
       dest = edge.getDestination()
       if not (src in self.edges and dest in self.edges):
           raise ValueError('Node not in graph')
       self.edges[src].append(dest)
   def childrenOf(self, node):
       return self.edges[node]
   def hasNode(self, node):
       return node in self.edges
   def getNode(self, name):
       for n in self.edges:
           if n.getName() == name:
               return n
       raise NameError(name)
   def __str__(self):
       result = ''
       for src in self.edges:
           for dest in self.edges[src]:
               result = result + src.getName() + '->'\
                        + dest.getName() + '\n'
       return result[:-1] #omit final newline

class Graph(Digraph):
   def addEdge(self, edge):
       Digraph.addEdge(self, edge)
       rev = Edge(edge.getDestination(), edge.getSource())
       Digraph.addEdge(self, rev)
   
def buildCityGraph(graphType):
   g = graphType()
   for name in ('Boston', 'Providence', 'New York', 'Chicago',
                'Denver', 'Phoenix', 'Los Angeles'): #Create 7 nodes
       g.addNode(Node(name))
   g.addEdge(Edge(g.getNode('Boston'), g.getNode('Providence')))
   g.addEdge(Edge(g.getNode('Boston'), g.getNode('New York')))
   g.addEdge(Edge(g.getNode('Providence'), g.getNode('Boston')))
   g.addEdge(Edge(g.getNode('Providence'), g.getNode('New York')))
   g.addEdge(Edge(g.getNode('New York'), g.getNode('Chicago')))
   g.addEdge(Edge(g.getNode('Chicago'), g.getNode('Denver')))
   g.addEdge(Edge(g.getNode('Chicago'), g.getNode('Phoenix')))
   g.addEdge(Edge(g.getNode('Denver'), g.getNode('Phoenix')))
   g.addEdge(Edge(g.getNode('Denver'), g.getNode('New York')))
   g.addEdge(Edge(g.getNode('Los Angeles'), g.getNode('Boston')))
   return g


def printPath(path):
   """Assumes path is a list of nodes"""
   result = ''
   for i in range(len(path)):
       result = result + str(path[i])
       if i != len(path) - 1:
           result = result + '->'
   return result



def testSP(source, destination):
   g = buildCityGraph(Digraph)
   sp = shortestPath(g, g.getNode(source), g.getNode(destination),
                     toPrint = True)
   if sp != None:
       print('Shortest path from', source, 'to',
             destination, 'is', printPath(sp))
   else:
       print('There is no path from', source, 'to', destination)



printQueue = True

def BFS(graph, start, end, toPrint = False):
   """Assumes graph is a Digraph; start and end are nodes
      Returns a shortest path from start to end in graph"""
   initPath = [start]
   pathQueue = [initPath]
   while len(pathQueue) != 0:
       #Get and remove oldest element in pathQueue
       if printQueue:
           print('Queue:', len(pathQueue))
           for p in pathQueue:
               print(printPath(p))
       tmpPath = pathQueue.pop(0)
       if toPrint:
           print('Current BFS path:', printPath(tmpPath))
           print()
       lastNode = tmpPath[-1]
       if lastNode == end:
           return tmpPath
       for nextNode in graph.childrenOf(lastNode):
           if nextNode not in tmpPath:
               newPath = tmpPath + [nextNode]
               pathQueue.append(newPath)
   return None

def shortestPath(graph, start, end, toPrint = False):
   """Assumes graph is a Digraph; start and end are nodes
      Returns a shortest path from start to end in graph"""
   return BFS(graph, start, end, toPrint)
   
testSP('Boston', 'Phoenix')
print()    

ბფს რომ არი მაგ ფუნქციაში pathQueue = [initPath] აქ ელემენტები როგორ ემატება ვერ გავიგე user.gif

Posted by: NinjaRacer 20 Feb 2019, 15:42
AnEeEeE=]]
ჩემიკაი ტვინი მეტკინა.
მაგ კლასებს სანამ სათითაოდ ხელით არ დავწერ ვერ გავყვები biggrin.gif

Posted by: crytek 20 Feb 2019, 16:18
მოკლედ სამარადისო კვითხვაზე პასუხი biggrin.gif

Posted by: AnEeEeE=]] 20 Feb 2019, 16:29
NinjaRacer
QUOTE
ჩემიკაი ტვინი მეტკინა.
მაგ კლასებს სანამ სათითაოდ ხელით არ დავწერ ვერ გავყვები

ისე ამოცანის პირობა რო იცოდე კარგია შტატიდან შტატში უმოკლედ გზას ეზებს გრაფების გამოყენებით, მე უფრო ის ერთი რაღაცა მაინტერესებს რაც ვიკითხე იმ ტიპმა თქვა ქიუ არი ეგ ლისტიო და რანაირად ჩანს არვიცი
ისე ალგორითმებში გავლილი უნდა ქონდეს ვინმეს breadth first search მოდელი
პ.ს. აუ აი ასეთ კოდს რო ვწერდე მეტი არც მინდა რა biggrin.gif

Posted by: RedShark 20 Feb 2019, 17:28
AnEeEeE=]]
QUOTE
აუ აი ასეთ კოდს რო ვწერდე მეტი არც მინდა რა

ისწავლი თუ არ მოეშვები. რახან ოოპ-ზე ხარ გადასული, პარალელურად თანდათან შეგიძლია დიზაინ პატერნებსაც შეუტიო (მეზარება ეხლა მაგხელა კოდის გარჩევა, თუ კარგი კოდია, სავარაუდოდ მანდაც რომელიმე პატერნ(ებ)ია გამოყენებული).

https://en.wikipedia.org/wiki/Software_design_pattern

Posted by: NinjaRacer 20 Feb 2019, 17:36
AnEeEeE=]]


მე პირადად ეს ნაწილი მერთულა. ერთი 3-ჯერ დამჭირდა მთლიანად გადაკითხვა მთლიანი კოდის რომ გამეგო. ეგრე ვარ ხოლმე სანამ არ გავიაზრებ მთლიანად ყველა ნაწილს ვერ ვადგენ მოდელს მუშაობის. ახლა მივხვდი.

მთელი ვიტამინები არის diGraph-ის childrenOf-ში. დანარჩენი სინაქს შუგა არის. ჰოდა მართალია ლისტში არის ეს ნოუდები, pop(0) და [-1] ბოლო ელემენტის childrenOf-ით ახდენს მარშრუტის შედგენას. თუ მიმდინარე ელემენტი არის destination ასრულებს ციკლს.
თავიდან BFS მიეწოდება უკვე აგებული გრაფი. რომეშლიც არის დიქშენერი.
რომელიც შედგება ნოუდებისგან.
თოეულ ნოუდს აქვს ეჯები დამატებული. ამ ედჯების გამოთვლისას იყენებს EDGE ცკლასს. ეგ კლასი მგონი მარტო იმისთვისაა დამატებული რომ addEdge მეთოდში 1 არგუმენით იმუშაოს ყველაფერმა. ეს 1 არგუმენტი ნოუდ კლასია თვითონ. ამან დამაბნია. სხვაგან არის ინიციალიზებული მაგ კლასის ინსტანსი. სხვა ფუნქციაში
აი ასე
CODE
g.addEdge(Edge(g.getNode('Boston'), g.getNode('Providence')))


როცა BFS-მდე მიდის. მიეწოდება უკვე ეს აგებული გრაფიკის, starti
CODE


[def BFS(graph, start, end, toPrint=False):
   # print(graph,'\n', start, end,'############################')
   """Assumes graph is a Digraph; start and end are nodes
      Returns a shortest path from start to end in graph"""
   initPath = [start]
   pathQueue = [initPath]
   while len(pathQueue) != 0:
       # Get and remove oldest element in pathQueue
       if printQueue:
           print('Queue:', len(pathQueue))
           for p in pathQueue:
               print(printPath(p))
       tmpPath = pathQueue.pop(0)
       if toPrint:
           print('Current BFS path:', printPath(tmpPath))
           print()
       lastNode = tmpPath[-1]
       if lastNode == end:
           return tmpPath
       for nextNode in graph.childrenOf(lastNode):
           if nextNode not in tmpPath:
               newPath = tmpPath + [nextNode]
               pathQueue.append(newPath)
   return None


არაფერი განსაკუთრებული არაა ეს.კლასი არასდროს არ დავწერ იმედია ასერთ რთულ და ჩახლართულ კოდს.

up.gif
ჩახლართული არ ნიშნავს მაგარს. პირიქით. ჩახლართული ნიშნავს ჩახლართულს.
მეც მინდა ეგეთი კოდის დაწერა რომ შემეძლოს, მაგრამ ეგეთი ჩახლართულის არა. ამ პატერნების გამოყენება მინდა რომ შემეძლოს და მახსოვდეს ყველა. უფრო სწორედ ყველა ეგეთ კოდს წერს. ეს არის შაბლონი თითქმის. ასე რომ თუ ეგეთი კოდის წერა გინდა ეს კოდი უნდა დაისწავლო კარგად პატერნები გაიაზრო და დაწერ. არაფერი მაგიური მაგაში არაა.
networking-შიც გამოიყენება ეს კოდი და ბეევრგან კიდევ.

OSPF პროტოკოლში ასე იქნება ზუსტად იმპლემენტირებული. და ახალი არაა ეს. პატერნია.
თუ გინდა ასეთ კოდს წერდე უბრალოდ ეს პატერნი უნდა დაამუღამო და ვსიო.
ის ტექნიკები რაც გამოყენებულია და არაა აუცილებელი ყველს ეს ტექნიკა ერთ პროგრამაში გატენო.

ჰოდა ყველა იღებს ზუსტად ამ მაგალითს და აკოპირებს და ზუსტად იგივე პატერნით წერენ. ასე რომ ორიგინალური ამაში არაფერი არაა.

შესაბამისად ყველგან მეორდება ეს სირთულე. რაც არ არის კარგი. არც ლამაზია. არც გასააგებია. მაგრამ მუშაობს. ამიტომ ყველა იყენებს. რადგან არის უკვე მზა.

Posted by: AnEeEeE=]] 20 Feb 2019, 17:59
NinjaRacer

მოკლედ თავიდან სტარტით-ბოსტონით ხო იწყებს გაგრძელება რითი ხდება, აი მე ვუყურებ სტარტს არარი საბოლოო დანიშნულება მერე გამოაკლებს ამას რჩება თითქოს ცარიელი ლისტი
QUOTE
თავიდან BFS მიეწოდება უკვე აგებული გრაფი. რომეშლიც არის დიქშენერი.
რომელიც შედგება ნოუდებისგა

აი მიწოდება საიდან ხდება რომელი ეტაპიდან ეგ დამანახე biggrin.gif დანარჩენი მეც გავიგე
RedShark

QUOTE
რახან ოოპ-ზე ხარ გადასული, პარალელურად თანდათან შეგიძლია დიზაინ პატერნებსაც შეუტიო

ჩეკიოსაც ვაკეთებ ჯერ და სხვა რამეს ვერ დავიწყებ, ისედაც ბევრი დრო მიაქვს საკმაოდ ამ ხლაფორთს დ

Posted by: NinjaRacer 20 Feb 2019, 18:09
AnEeEeE=]]
AnEeEeE=]]
CODE

tmpPath = pathQueue.pop(0)
       if toPrint:
           print('Current BFS path:', printPath(tmpPath))
           print()
       lastNode = tmpPath[-1]
       if lastNode == end:
           return tmpPath
       for nextNode in graph.childrenOf(lastNode):
           if nextNode not in tmpPath:
               newPath = tmpPath + [nextNode]
               pathQueue.append(newPath)


გითხარი არ არის ეს კოდის დალაგებული მეთქი biggrin.gif

childrenoF-იდან მოაქვს. ცარიელი კია მაგრამ nextNode მიეწოდება ბოლო გავლილი ნოუდი. ნექსნოუდი კიდევ childreOf-ით პულობს გზის გაგრძელებას.

Posted by: AnEeEeE=]] 20 Feb 2019, 18:16
NinjaRacer
QUOTE

childrenoF-იდან მოაქვს. ცარიელი კია მაგრამ nextNode მიეწოდება ბოლო გავლილი ნოუდი. ნექსნოუდი კიდევ childreOf-ით პულობს გზის გაგრძელებას.

ბოსტონიდან ხო ვიწყებთ, ანუ ერთი ელემენტი ხოარი ბოსტონი მერე მიყვება და ტემპპას გამოდის ცარიელი ლისტი რადგან პოპით ხო აგდებს 0 ინდექსზე მდგარ ელემენტს ,მერე ლასთნოუდიც ცარიელი გამოდის (ტემპში სხვა ელემენტები როდის იყო?)და ცარიელიდან მერე შვილებს როგორ ნახავს sad.gif

Posted by: NinjaRacer 20 Feb 2019, 18:51
QUOTE
ტემპპას გამოდის ცარიელი ლისტი


რატო გამოდის ცარიელი? ისე მეც მაგან დამაბნია და მერე ვნახე რომ არ გამოდის.

tmpPath = pathQueue.pop(0)
ცარიელი pathQue რჩება მართალია და არა tmpPath, ეს ბოლო შეიცავს ყველა გავლილ გზას რაც პოპით ამოვაგდეთ და კიდევ ამატებს თავისივე ბოლო ელემენტის [-1]-ის ყველა იმ childOf-ს რომელიც არ გაუვლია pathQue-ში:
CODE

lastNode = tmpPath[-1]
       if lastNode == end:
           return tmpPath
       for nextNode in graph.childrenOf(lastNode):
           if nextNode not in tmpPath:
               newPath = tmpPath + [nextNode]
               pathQueue.append(newPath)


pathQue-ში. პირიქით. იმიდან რაც ამოხტება და დაცარიელდება ის ლისტი გადავა tmpPath-ში, მერე მაგის შვილები (რომელიც უკვე არ გაუვლია) დაემატება pathQue და ივლის იქამდე სანამ არ დაცარიელდება pathQue- ან სანამ destionation-ს არ დამეთხვევა ბოლო გავლილი ნოუდი.

ყველაზე ძველი ელემენტი რაც არის pathQue-ში ანუ თავში რაც აქვს [0] ინდექსზეე. მაგას იყენებს tmpPath გზის გასაკვლევვად + მაგას კიდევ ეძებს childOf-ებს და პახოდუ pathQue-ში აცარიელებს იმეებს რაც გაიარა და ამატებს იმეებს რაც არ გაუვლი childOf-ით.

ყოველ შემდეგ ნაბიჯზე რთულდება ეს კოდი. user.gif არაა მარტივი gigi.gif

Posted by: RedShark 20 Feb 2019, 19:07
NinjaRacer
QUOTE
შესაბამისად ყველგან მეორდება ეს სირთულე. რაც არ არის კარგი. არც ლამაზია. არც გასააგებია. მაგრამ მუშაობს. ამიტომ ყველა იყენებს. რადგან არის უკვე მზა.

პროგრამაში ზედმეტი სირთულე (და არა აუცილებელი) ნამდვილად არ არის კარგი და ლამაზი, მაგრამ ამ თემას პატერნებთან არანაირი პირდაპირი კავშირი არ აქვს. პატერნები არის ტიპიურ ამოცნებზე/პრობლემებზე ორიენტირებული პროექტირების შაბლონები, რომლებიც ათწლეულების განმავლობაშია დატესტილი და რეკომენდირებული, განსაკუთრებით გრძელვადიან პერსპექტივაში პროგრამების მხარდაჭერა/გაფართოებისას. შესაბამისად, პატერნების ასე განხილვა (კარგია და ლამაზია თუ ცუდი, მახინჯი და გაუგებარი), იგივეა, რაც ველოსიპედზე იმსჯელო კარგია თუ თავიდან გამოგონება ჯობს, ასევე მანქანების, თვითმფრინავების და ა.შ. პროექტირების ზოგად პრინციპებზე smile.gif

Posted by: NinjaRacer 20 Feb 2019, 20:00
RedShark

ამ კოდშიც არის რამოდენიმე პატერნი მაგალითად ერთერთი memoization. ნუ ზუსტად 1/1-ში არაა ეგ მაგრამ ძალიან გავს.

დანარჩენი რავი. ზოგადად პატერნი უნდა დაიმახსოვრო ხო.
მაგრამ კოდი როცა გაუგებარია და ეს კოდი დამიჯერე გაუგებარი და ახლართულია (ძალიან)
არ არის ზოგადად კარგი. არავისთვის.
მაქსიმაულრად უნდა ეცადო ყველაფერი გაახალიეველო და გაამარტივო განსაკუთრებით როცა შენს კოდს სხვები იყენებენ.

ეს კოდი აქედან არის ამოღებული
https://networkx.github.io/documentation/networkx-1.9.1/overview.html

Posted by: RedShark 20 Feb 2019, 20:19
NinjaRacer
QUOTE
მაგრამ კოდი როცა გაუგებარია და ეს კოდი დამიჯერე გაუგებარი და ახლართულია (ძალიან)

ალბათ (მეზარება გარჩევა) მაგრამ ვინმე თუ პატერნებს არასწორად იყენებს პატერნების ბრალი ხომ არ არის ეგ?)))
QUOTE
მაქსიმაულრად უნდა ეცადო ყველაფერი გაახალიეველო და გაამარტივო განსაკუთრებით როცა შენს კოდს სხვები იყენებენ.

პატერნებით პროექტირების ერთ-ერთი უპირატესობა სწორედ იმაშია, რომ გუნდური მუშაობისას ყველამ იცის რას აკეთებს... ასევე, გამარტივება ყოველთვის არ არის სასარგებლო, არსებობს საზიანო გამარტივებაც, შეიძლება რაიმე პროექტი დაწერო მაქსიმალურად მარტივად, მაგრამ მომავალში მხარდაჭერა/გაფართოებისას ხუხულასავით დაგენგრეს და მთლიანი პროექტი ნოლიდან გაგიხდეს დასაწერი. არაერთხელ მომხდარა და ხდება ასე...

Posted by: AnEeEeE=]] 20 Feb 2019, 20:29
NinjaRacer
QUOTE
tmpPath = pathQueue.pop(0)
ცარიელი pathQue რჩება მართალია და არა tmpPath, ეს ბოლო შეიცავს ყველა გავლილ გზას რაც პოპით ამოვაგდეთ და კიდევ ამატებს თავისივე ბოლო ელემენტის [-1]-ის ყველა იმ childOf-ს რომელიც არ გაუვლია pathQue-ში:
CODE

მადლობა დიდიიიიი, აი ეგარვიცოდი რო ტემპში რჩებოდა ამოგდებული ელემენტი
QUOTE

ამ კოდშიც არის რამოდენიმე პატერნი მაგალითად ერთერთი memoization. ნუ ზუსტად 1/1-ში არაა ეგ მაგრამ ძალიან გავს.

კიკი ეგარი ზუსტად, დინამიკური დაპროგრამირების ამოცანები მაგ მეთოდით იხსნება მარტივად

Posted by: NinjaRacer 20 Feb 2019, 21:19
AnEeEeE=]]
მეგონა რომ გავიგე ბოლომდე მაგრამ კიდევ დამრჩა ცოტა გაუგებარი რაღაცეები.

ვერ ვიაზრებ და აბა დამეხარე.

pathQue ინიციალიზირდება როგორც ლისტი ლისტში.

თავიდან აქვს [[boston]]
pop0 აგდებს [boston] ობიექტს და გადასცემს tmpPath-ში.
lastNode-ი ხდება tmpPath-ის ლისტი ბოლო ელემენტი.
თუ ეს ელემენტი/ობიეტი destination-ია წყდება ყველაფერი და ბრუნდებს tmpPath. ვუალა მორჩა.
თუ არადა მოქვაგქვს ამ ობიექტის edge-ები ანუ შვილები ნექსტნოუდად ვინახავთ.
ვამოწმებს ნექსნოუდი არის თუარა სადმე tmpPath-ში თუ არ არის ეს შვილები მაშინ ვამატებთ სიაში ამ ნოუდებსაც და pathQue-ს ბოლოში ვააპენდებთ. 2 ლისტ ობიექტი უნდა იყოს წესით quePath-ში ახლა. [boston, providence] და [boston, new york].
შემდეგ იტერაციაზე ვარდება [boston, providence] ხდება tmpPath . ისევ ბოლო ელემენტს იღებს ჩაილდებს ამოწმებს providenc-ის თუ ეს ჩაილდებბი არ არის tmpPath-ში და ამატებს tmpPath + child რამდენი ჩაილდიცაა იმდენ ლისტს pathQue-ში.
ასე მიყვება

TREEE-ს ქმნის.
თითოეული ლისტი არის ნოუდების TREE და იქამდე ქმნის სანამ უმოკლესს არ იპოვნის.
მერე და რა ჩუმად ხარ. ვერ მეტყვი რომ ბოლომდე გავიგე?! lol.gif


თითოეული ლისტი pathQue-ში არის ობიექტების ხე.


QUOTE
ალბათ (მეზარება გარჩევა) მაგრამ ვინმე თუ პატერნებს არასწორად იყენებს პატერნების ბრალი ხომ არ არის ეგ?)))


RedShark

სულ ტყუილად გეზარება. ძალიან რთულია ისე გასაგებად მაგრამ რომ გაიგებ. მერე ელემენტალურია. მაგრამ ძალიან სასარგებლო ალგორითმებია. ყველგან გამოიყენება. განსაკუთრებით ქსელებში.
მაგრამ თვიტონ სტილი კოდის წერის და სტრუქტურა არის აჩეხილი.
პატერნებს არ ვეხები კაცო biggrin.gif არ ვერჩი მაგას. სტილი და სტრუქტურა არის საზიზღრად აწეწილი.
ანუ რომ მიყვე იმენა პასტა ფურცლით უნდა ჩაუჯდე და დახატო თორე შანსი არ გაქვს გაგების რა რას აკეთებს. ან 3 დღე უნდა იჯდე და იკითხო ერთიდაიგივე კოდი. თორე სწორად კი არის დაწერილი. მე უკეთესს ჯერჯერობით ვერ ვწერ. ჯერ ამის გაგება მინდა. მაგრამ ეტყობა რაღაც კოჭებშივე რომ არ არის სუფთად გაკეთებული.

ძალიან ძალიან ეტყო ბა.

Posted by: AnEeEeE=]] 20 Feb 2019, 21:40
NinjaRacer
კი ეგრეა, შენ არ გაქვს წაკითხული ამოცანა და მაგიტო მოუნდი დიდ დროს , წიგნში რო ჩაიხედო და ნაო იქ ამოხსნაც წერია, მერე კოდს რო კითხულობ წარმოგიდგება ამოხსნა როგორ მიდის სათითაოდ ლეველებზე

https://www.youtube.com/watch?v=V_TulH374hw&t=19s

Posted by: NinjaRacer 20 Feb 2019, 21:42
AnEeEeE=]]
მომეცი მერე ეგ ლინკი

რაღას უცდი? biggrin.gif

Posted by: AnEeEeE=]] 20 Feb 2019, 21:44
NinjaRacer
ნახე წინა პოსტი დ

Posted by: NinjaRacer 20 Feb 2019, 23:54
AnEeEeE=]]
მადლობა.

ჯავათი რომ დაგეწყო, ჯერ კიდევ სინტაქსის სწავლაზე იქნებოდი. ნი ტო შტო ალგორითმების გარჩევაზე.

პითონი შეიძლება არ ჯობია მაგრამ ძალიან დიდი ენეიბლერია სწავლის კუთხით. მე არ ვნანობ რომ დავიწყე.
განსაკუთრებით იმიტომ რომ ყოველ ნაბიჯზე მადგება. მეტი რესურსია სასწავლო, მეტი მაგალითები და ადვილია.
შესაბამისად მართლა პათერნებს სწავლობ. ტექნიკებს, იდიომებს და ა.შ.
ამ იოდომებს რომ დაამუღამებ ყველაზე ენაზე შეგიძლია გადაიტანო ეს ცოდნა. ამიტომ წყალშიც არ გეყრება და პითონის ცოდნაც ცოდნად გრჩება. + მეტ თემებს მოკლე დროში ითვისებ.

წეღან ვიწუწუნე რთულად წერიათქო. რთულად კიარა თითქმის ინგლისურივით იკითხება მართლა. სხვა ენებზე იგივეს ვერ იტყვი.


Posted by: AnEeEeE=]] 21 Feb 2019, 09:12
NinjaRacer
QUOTE
ჯავათი რომ დაგეწყო, ჯერ კიდევ სინტაქსის სწავლაზე იქნებოდი. ნი ტო შტო ალგორითმების გარჩევაზე.

შემიძლია ვთქვა რომ სინტაქსი საერთოდ არ მისწავლია, უბრალოდ ერთხელ წავიკითხე წესები lol.gif

Posted by: NinjaRacer 21 Feb 2019, 17:43
AnEeEeE=]]
ნახე რა ჯიგარია



do u want to have fffffffun lol.gif

Posted by: AnEeEeE=]] 22 Feb 2019, 09:03
NinjaRacer
ვერაფერი გავიგე lol.gif

იტალიელია ხო ეგ ტიპი რა მონდომებით ხსნის დ ისე შენ ჯავა იცი?

Posted by: NinjaRacer 22 Feb 2019, 09:37
AnEeEeE=]]


კარგია ალგორითმები და პატერნები.
მაგრამ აი შენ რომ თქვი ნეტა ესე ვწერდეო თავიდან ამ ვიდოებზე მქონდა ეგრე.
და აბსოლუტ ბეისკებია ესენი და გადავუვლი კიდევ მერე კიდევ ერთხელ. მნიშვნელოვანია.

ამეებს ყველაფერს რომ გაიგებ აღარფერი რჩება გაუგებარი ენაში.
https://www.youtube.com/watch?v=sPiWg5jSoZI ამ ვიდეოს მერე ჯანგოსნაირ ფრეიმვორსკაც დაწერ შენით.

https://www.youtube.com/watch?v=5-qadlG7tWo
https://www.youtube.com/watch?v=E-1Y4kSsAFc

იდეა მომივიდა. ბოტი უნდა დავწერო რომელიც კოდებს იპოვის წაიღებს დააკომპილირებს და გაუშვებს და ლინკებს მომცემს და დაპოსტავს მერე ) ცოტა სახალისო იქნება. პროსტა ეხლა სხვა რაღაცას ვაკეთებ და არ მინდა მოვცდე.


ჯავა მარტო სახელი ვიცი smile.gif
ეს ტიპი უფრო ფრნაცუზს გავს. კი მაგარი მასტია.

Posted by: AnEeEeE=]] 22 Feb 2019, 09:38
NinjaRacer
აუუ კაია ესენი , კაკრაზ უნდა მეკითხა ცოტა ედვენსდ ლექციები მინდა თქო, მიტის დათა კურსს რო გავივლი მერე ამაზე გადავალ

Posted by: NinjaRacer 22 Feb 2019, 23:18
AnEeEeE=]]
ბლინ ძალიან სწრაფად ხსნის მეტაკლასებზე და დესკრიპტორებზე.

რამდენჯერმე ვუყურე მეგონა სრულად გავიგე და მაინც დამრჩა გაუგებარი რაღაცეები.

https://www.blog.pythonlibrary.org/2016/06/10/python-201-what-are-descr1ptors/

Posted by: RedShark 23 Feb 2019, 12:42
NinjaRacer
QUOTE
ჯავათი რომ დაგეწყო, ჯერ კიდევ სინტაქსის სწავლაზე იქნებოდი. ნი ტო შტო ალგორითმების გარჩევაზე.

არ არის კაცო ჯავა ასეთი რთული. უბრალოდ სტატიკური ტიპიზაცია აქვს და სინტაქსით C++ - ს წააგავს, მაგრამ სირთულით ოდნავაც არ არის ახლოს სიპპ-სთან, თითქმის პითონის დონეა.
QUOTE
პითონი შეიძლება არ ჯობია

ერთადერთი რითაც პითონი არ სჯობია არის სიჩქარე, ჯავა გაცილებით სწრაფია, სხვა მხრივ ვერ იტყვი რომ ან ერთი სჯობია ან მეორე, თავის საქმეში ორივე კარგია.

Posted by: @Schizophrenic 23 Feb 2019, 14:02
QUOTE
არ არის კაცო ჯავა ასეთი რთული

+111
Java C# და Python-ს შორის სირთულეებში განსხვავებას საერთოდ ვერ ვხედავ, სამივე ენას აქ რაღაც კედელი და ამ კედლის იქეთ არ იხედები.
სინტაქსის სწავლა პროგრამირებაში ყველაზე პატარა კიბეა, პირადად მე პითონის სინტაქსზე ლამაზად მეჩვენება C#(ჯავაც მაგის ტყუპისცალია)
ყველა ენა მაგარია გააჩნია რას აკეთებ. ამერიკაში რომ ვცხოვრობდე C/C++ს მივაწვებოდი იმის გამო რომ ძაან საინტერესო პროექტებზე მომიწევდა მუშაობა sad.gif

Posted by: NinjaRacer 23 Feb 2019, 14:10
@Schizophrenic
მასე მეგონა ჯავასკრიპტიც რთული რადგან შორიდან ეგრე ჩანს ეგრევე თითქმის ერთ დღეში ცოტა რო გავერკვიე მერე პირიქით ლოგიკურად და ლამაზად მომეჩვენა.
ჯავაც და სიშარპიც
აი ასეთ ასოციაციას მიქნიან შორიდან.
user posted image

ერთი მნიშვნელოვანი თემა დარჩა პითონში და ისევ საუკეთესო წყარო არის ოფიციალური დოკუმენტაცია.
https://docs.python.org/3/howto/descr1ptor.html

დესკრიპტორებზეა აგებული უმეტესობა ამ ენის. ჰოდა საჭიროა ამის კარგად გაგება.

სიპ არის რთული ჩემთვის პირადად რომ არ მქონდეს სწავლი და წაკითხვის პრობლემები. ადრევე ვისწავლიდი.
პითონი პროსტა მართლა ბევრად პრაქკტიკულია. ლინუქსისთვის ტულების წერა სიპიში საერთოდ არაა საჭირო.
ამიტომაცაა ყველაფერი პითონზე. ანუ ვგულისხმობ ჰაი ლეველ ტულებს. თორე ბექენდი c/c++-ზე შეიძლება ქონდეს. biggrin.gif

Posted by: @Schizophrenic 23 Feb 2019, 14:25
QUOTE
მასე მეგონა ჯავასკრიპტიც რთული რადგან შორიდან ეგრე ჩანს ეგრევე

ბაზარი არაა, პროების დაწერილ კოდს რო ხედავ უცხო ენაზე biggrin.gif facepalm.gif

QUOTE
სიპ არის რთული ჩემთვის პირადად რომ არ მქონდეს სწავლი და წაკითხვის პრობლემები. ადრევე ვისწავლიდი.

ხო 16+ ასაკის თუ ხარ მაგ ენებით უნდა დაიწყო სწავლა, მერე ძაან დაგეზარება გადასვლა(პირად მაგალითზე ვამბობ biggrin.gif )

შენ გეცოდინება და გკითხავ ახლა, ვაკანსიებში რომ ლინუქსის ცოდნას ითხოვენ მად რა იგულისხმება? სამომხმარებლო დონეზე ვიყენებ ლინუქსს, კომანდებიც ვიცი რაც აქამდე დამჭირდა, რა უნდა ვისწავლო მად? როგორაც ვინდოუსს ვიყენებდი ეგრე ვიყენებ ამასაც

Posted by: NinjaRacer 23 Feb 2019, 14:39
QUOTE
შენ გეცოდინება და გკითხავ ახლა, ვაკანსიებში რომ ლინუქსის ცოდნას ითხოვენ მად რა იგულისხმება? სამომხმარებლო დონეზე ვიყენებ ლინუქსს, კომანდებიც ვიცი რაც აქამდე დამჭირდა, რა უნდა ვისწავლო მად? როგორაც ვინდოუსს ვიყენებდი ეგრე ვიყენებ ამასაც

აზრზე არ ვარ smile.gif
რა იგულისხმიება ლინუქსის ცოდნაში )

lpic-1 ალბათ. ეგ დონეზე რაც ელემენტალურია...

Posted by: @Schizophrenic 23 Feb 2019, 14:41
NinjaRacer
ოკ, სპასიბა

Posted by: NinjaRacer 23 Feb 2019, 14:43
@Schizophrenic
https://www.lpi.org/our-certifications/exam-102-objectives

აგერ არის ჩამონათვალი რა იგულისხმება საწყის ლეველზე. 1 დონეზე.

Posted by: @Schizophrenic 23 Feb 2019, 14:49
NinjaRacer
მადლობა up.gif

Posted by: NinjaRacer 23 Feb 2019, 15:02
@Schizophrenic
რაზე გთხოვენ ლინუქს საერთოდ
სიპიში წერ კაცი რაშუაშია ლინქუსი biggrin.gif დეველოპერს რაც ჭირდება რაც იცი მაგაზე მეტი არც გჭირდება.



* * *
ესეც არ მქონდა გარკვეული კარგად
https://stackoverflow.com/questions/2608708/what-is-the-difference-between-type-and-type-new-in-python

Posted by: @Schizophrenic 23 Feb 2019, 15:28
NinjaRacer
მომავალზე ვზრუნავ biggrin.gif
ვაკანსიებს რომ ვათვალიერებ ბევრგან მხვდება და მეთქი აქედანვე დავიწყებთქო თორე ჩემთვის აზრი არ აქ

Posted by: NinjaRacer 23 Feb 2019, 15:28
@Schizophrenic
საინტერესო პროექტებში მაინც რას გულისხმობ კონკრეტულად.

ჯავაზე ვერ იმუშავებ საინტერესო პროექტებზე? Enterprise(სლეშ governmet) ენაა ჯავა. ამას გულისხმობ ?საინტერესოში. ნუ კიდევ JIT-ის გამო ეშვება embedded დივაისებზე და სწრაფადაც მუშაობს.

უბრალოდ გარკვევა მინდა რას ეძახით საინტერესოს.

ჩემთვის სიანტერესო მაგალითად. ინფრასტრუქტურების ორკესტრირება მართვა და მონიტორინგია. CI/CD, testing და ა.შ
კონტეინერები და სისტემების მართვა და ამას python + go სრულიად ყოფნის.

არ ჭირდება მაგას ლოუ ლეველ ენები და შეეცი თუ გინდა.
* * *
პ.ს
https://www.python.org/download/releases/2.2/descrintro/#__new__

Posted by: @Schizophrenic 23 Feb 2019, 15:53
NinjaRacer
საინტერესო ვიდეო დადო ც++ თემაში RedShark-მა, ემბედინგში 50% იყენებენ C-ს, 25% C++ და დანარჩენ 25% სხვა ენებს ერთად (ჯავა, ასემბლერი ც# და დალშე), ამ საქმეში ჯერ-ჯერობით შეუცვლელი ენებია
მე მომწონს სიღრმეებში ჩაძრომა biggrin.gif ჰარდვეარის დაპროგრამება ძაან საინტერესოა, ამბობენ რასტი მაგარი ენაა და ჩაანაცვლებსო, მარა მაგას დრო უნდა ჯერ ასე მალე ვერ მოხდება

მაშინ ლერნინგიც ძაან მაინტერესებს, მარა საბოლოოდ ხო ვიცი მომავალი მაინც ვები მექნება facepalm.gif

Posted by: NinjaRacer 23 Feb 2019, 16:09
QUOTE
მაშინ ლერნინგიც ძაან მაინტერესებს, მარა საბოლოოდ ხო ვიცი მომავალი მაინც ვები მექნება 

biggrin.gif
რასტი კარგი ყოფილა. კროსპლატფორმულია. ყველგან ეშვება. მულტისრედშიც არ გიწევს რეის კონდიშენებზე ფიქრი. არც სინქრონიზაციაზე. ეს კარგია ნამდვილად.სწრაფია. ჰაილეველია. მეტი რაგინდა biggrin.gif

თუ არ ჩავძვერი სიღრმეებში და არ დავშალე ნაწილაკებად რამე თემა ვერ ვიგებ. თავიდან მაბნევს ყველაფერი. მირჩევნია დეტალებიდან დავიწყო სწავლა და ჩაუღმავდე ვიდრე ბევრი მარტივი რაღაც ვისწავლო ერთად. იმიტომ რომ სწავლა მიჭირს ზოგადად.
ამიტომ რასაც ვსწავლობ ვცდილობ ვისწავლო კარგად რომ მერე როგორ სტეიტშიც არ უნდა ვიყო არ გამიჭირდეს. ზოგჯერ ძალიან კონცენტრირებული ვარ ზოგჯერ პირიქით. 1000 რამისკენ გამირბის გონება. ამიტომ რამეს თუ ვაკეთებ უნდა მაინტერესებდეს და 100% მითრევდეს. სსხვა შემთხვევაში მივედმოვედები უსასრულოდ. მაგრამ მივეჩვიე უკვე და გამოვნახე ამის მოგვარების გზებიც.

Posted by: RedShark 23 Feb 2019, 16:31
@Schizophrenic
QUOTE
ემბედინგში 50% იყენებენ C-ს, 25% C++ და დანარჩენ 25% სხვა ენებს ერთად (ჯავა, ასემბლერი ც# და დალშე), ამ საქმეში ჯერ-ჯერობით შეუცვლელი ენებია

ემბედინგში C# ძალიან იშვიათად გამოიყენება, ძირითადად უფრო ჯავა (ჯავა თავიდან სპეციალურად ემბედინგისთვის შეიქმნა), მაგრამ მხოლოდ ისეთ სისტემებში სადაც უსაფრთხოების მაღალი სტანდარტები არ მოითხოვება, მაგალითად: სარეცხი მანქანებიდან დაწყებული, მცირე ზომის დრონებით (სულ რამდენიმე კილოიანი, რომელსაც ჩამოვარდნის შემთხვევაში ნგრევის და მსხვერპლის გამოწვევა არ შეუძლია) დამთავრებული. მაგრამ დაუშვებელია ჯავას და ნებისმიერი სხვა ენის გამოყენება, რომელიც garbage collection - ს იყენებს Safety-critical system ( https://en.wikipedia.org/wiki/Safety-critical_system) - ებში. ობიექტების ავტომატურად განადგურებისას "ნაგვის ამღები" პროგრამის მსვლელობას აჩერებს, ეს შეიძლება სულ 1 მილიწამი გაგრძელდეს, მაგრამ არსებობს სისტემები სადაც პროცესის სრული უწყვეტი დამუშავებაა საჭირო, მაგალითად ატომურ ელ-სადგურზე მაგ ერთმა მილიწამმა შეიძლება ჩერნობილი მოგიწყოს, ასევე თვითმფრინავებში, რაკეტებში და ა.შ... ამიტომ ასეთ სისტემებში გამოიყენება ძირითადად C და C++, ამ ბოლო წლებშ სულ უფრო და უფრო იშვიათად ასემბლერი და არის კიდევ სპეციალურად ამისთვის შექმნილი ენა - ADA, მაგრამ ამასაც ძალიან იშვიათადღა იყენებენ.

სიპპ შვრება ამას მთლიანად ავტომატურ რეჟიმში:


Posted by: @Schizophrenic 23 Feb 2019, 16:34
NinjaRacer
აუ რა სიმართლე დაწერე biggrin.gif მეც ეგრე ვიყავი ხან რას მოვედებოდი ხან რას, ახლა მკაცრად ვარ შევწყვიტე ექსპერიმენტები და რასაც მასწავლიან იმას ვსწავლობ მარტო, რასაც უფრო საინტერესოს ვხედავდი იქეთ გავრბოდი და ძაან ცუდია ეგ :X თან ზარმაცი ვარ მარა კაი ჩვევა მაქ რამე თუვერ გავიგე სანამ არ გავაკეთებ არ ვეშვები, წიგნებს არ ვკითხულობ ვერ გამომაქ აზრი წიგნებიდან, ვიდეოებში პრაქტიკაში რომ ხედავ ახსნილს უფრო საკაიფოა , სგ თქვენ ვინც წიგნიდან სწავლობთ

Posted by: NinjaRacer 23 Feb 2019, 16:36
RedShark
სადაც ინტერპრეტერები არის ან ნახევრად ინტერპრეტერები ყველგანაა ეგ პრობლემა. კერნელი აკეთებს სქედულინგ და სვიჩინგ. პითონშიც არის ეგ პრობლემა. ინტერპრეტერი 1 პროცესორზეა მიბმული 1 პროცესში.

მაგრამ
არის ჯავაში მაგის გადაწყვეტის მცდელობებიც.

https://www.youtube.com/watch?v=BD9cRbxWQx8

Posted by: @Schizophrenic 23 Feb 2019, 16:41
QUOTE
რომელიც garbage collection - ს იყენებს Safety-critical system

გაიხარე, დაგუგვლა მინდოდა მეთქი სმარტ პოინტერებს რატო არ იყენებენ ყველაფერში

Posted by: RedShark 23 Feb 2019, 16:44
NinjaRacer
QUOTE
სადაც ინტერპრეტერები არის ან ნახევრად ინტერპრეტერები ყველგანაა ეგ პრობლემა. კერნელი აკეთებს სქედულინგ და სვიჩინგ. პითონშიც არის ეგ პრობლემა. ინტერპრეტერი 1 პროცესორზეა მიბმული 1 პროცესში.

ინტერპრეტატორები რისთვისაც არის განკუთვნილი, იქ არანაირი პრობლემა არ არის. აუცილებელი არ არის ერთი ენა/ტექნოლოგია უნივერსალურად მოერგოს ყვეალფერს.
QUOTE
არის ჯავაში მაგის გადაწყვეტის მცდელობებიც.

ვიცი ეგ მცდელობები, რამდენმე სპეციალური ვერსია შექმნეს, მაგრამ ვერცერთმა ვერ დააკმაყოფილა ბოლომდე საჭირო უსაფრთხოების სტანდარტები.

Posted by: @Schizophrenic 23 Feb 2019, 16:47
RedShark
შენ ამ სფეროში საქმიანობ ?

Posted by: RedShark 23 Feb 2019, 16:48
@Schizophrenic
QUOTE
გაიხარე, დაგუგვლა მინდოდა მეთქი სმარტ პოინტერებს რატო არ იყენებენ ყველაფერში

მარტო სმარტ პოინტერებს კი არა, ამ სფეროში სიპპს თითქმის 60% არ იყენებენ)))

აი მაგალითად სიპპს გამოყენების ლოკჰიდ მარტინის სტანდარტი http://www.stroustrup.com/JSF-AV-rules.pdf
იმდენი შეზღუდვებია, ფაქტიურად ოდნავ დააბდეითებული C - ია დარჩენილი.

QUOTE
შენ ამ სფეროში საქმიანობ ?

არა სამწუხაროდ sad.gif

Posted by: NinjaRacer 23 Feb 2019, 16:53
ბოლო ვიდეოს რაც დავდე უყურეთ და მანდ ნახავთ პოინტერებს biggrin.gif

fgpa
და
asic-ზე ხდება უკვე ბანკებშიც პროგრამირება ჯავაზე

ნასა კიდევ ყოველდღე არ უშვებს ხოლმადლს ზეცაში.

უყურეთ ვიდეოს.

Posted by: @Schizophrenic 23 Feb 2019, 16:58
ძაან საინტერესოა

QUOTE
არა სამწუხაროდ sad.gif

იმედია მოიხოდება ჩვენთანაც მსგავსი თემები up.gif
* * *
QUOTE
ბოლო ვიდეოს რაც დავდე უყურეთ და მანდ ნახავთ პოინტერებს

პოინტერებზე არაა, ჯავას აქ ნაგვის შემგროვებელი და თვითონ ასუფთავებს ყველაფერს
პითონიც გამოყოფს მეხსიერებას მარა ეგეც თვითონ შლის
აქ ყველაფრის გაკეთება ხელით გიწევს, ასე ასახსნელად რთულია
QUOTE
asic-ზე ხდება უკვე ბანკებშიც პროგრამირება ჯავაზე

ნასა კიდევ ყოველდღე არ უშვებს ხოლმადლს ზეცაში.

არ ვამბობ ც++ ჯავაზე მაგარია და ჯავა პითონს ჯობია, ყველა ენა უნიკალურია შენ საქმიანობას გააჩნია, რატო უნდა წერო კოდი ც-ზე თუ იგივეს გაკეთება პითონზეც შეგიძლია? ის ტექნოლოგია უნდა გამოიყენო რითაც ხარისხიანად და მარტივად გადაჭრი პრობლემას, ამ შემთხვევაში ც/ც++ იტ რასაც აკეთებენ საინტერესოდ მიმაჩნია თორე მე ვერც რაკეტას დავაპროგრამებ და ვერც მაცივარს biggrin.gif

Posted by: NinjaRacer 23 Feb 2019, 17:23
QUOTE
პოინტერებზე არაა, ჯავას აქ ნაგვის შემგროვებელი და თვითონ ასუფთავებს ყველაფერს
პითონიც გამოყოფს მეხსიერებას მარა ეგეც თვითონ შლის
აქ ყველაფრის გაკეთება ხელით გიწევს, ასე ასახსნელად რთულია


ვიდეოს უყურე და მიხვდები რომ ეგ ტყუილად ამიხსენი და + კიდევ ბევრ რამეს გაიგებ.

მე რაც დავწერე ეგ პითონში სრედედ აპლიკაციის პრობლემაა რეალურად.

როცა ინტერპრეტატორი 1 პროცესზეა მიბმული და შენ ბევრი სრედები გაქვს და უწევს სვიჩინგი. სწრაფი ვერ იქნება.

გარბიჯ ქოლეშენი რა არის ვიცი და მაგის ოპტიმიზაციებიც მიჩალიჩია JVM-ზე

https://www.youtube.com/watch?v=Obt-vMVdM8s

ამ პრობლემაზე ვთქვი.

პ.ს და პოინტერზე ხუმრობასაც გაიგებ biggrin.gif
* * *
არაკომპილირებად ინტერპრეტირებად ენებში თუ წერ სრედიდ აპლიკაციებს. ამ სრედებს შორის ხდება სვიჩინგი და ამ დროს ინტერპერტატორი აჩერებს პროგრამას. იგივეა გარბიჯ ქოლეშენზეც.

GLOBAL INTERPRETER LOCK მნიშვნელოვანია იცოდე რას ნიშნავს. ვიდეოში ხსნის დევიდი ძალიან ადვილად და გასაგებად.

Posted by: @Schizophrenic 23 Feb 2019, 17:39
NinjaRacer
ვნახავ საღამოს
ვიცი ჯავა და რა განსხვავებებიც აქ მაგას და ცპპ
გძულს ც++ თუ რა პონტში ადარებ ჯავას? biggrin.gif ენების შედარება არ მიყვარს ეგ ორი ენა თავის საქმებში არიან ღმერთები,
ოპის ბირთვებს და თამაშის ძრავებს რატო წერენ ც++? გიჟები არიან? იმიტო რო სწრაფი იყოს, კარგად ვერ გავიგე რისი თქმა გინდა ჯავაა ც-ზე სწრაფი?
მაგით არსდროს დავინტერესებულვარ და მიძებნია გუგლში მარა ლოგიკურად რო შეხედო ც-ს კოდი და ჯავას კოდი რა გზას გადიან პროცესორამდე რა ლოგიკით უნდა იყოს ჯავა უფრო ახლოს სისტემასთან?

Posted by: NinjaRacer 23 Feb 2019, 17:43
https://docs.oracle.com/cd/E15523_01/web.1111/e13814/jvm_tuning.htm#PERFM158

ეს ვიგულისხმე ოპტიმიზაციებში. ჰიპ საიზის ზომა და ა.შ

ამისთვის არაა საჭირო ჯავას ცოდნა.
* * *
QUOTE
ოპის ბირთვებს და თამაშის ძრავებს რატო წერენ ც++? გიჟები არიან? იმიტო რო სწრაფი იყოს, კარგად ვერ გავიგე რისი თქმა გინდა ჯავაა ც-ზე სწრაფი?

კარგად ვერც გითხარი და რომ უყურებ ვიდეოს მიხვდები რომ არც მძულს ხუმრობებსაც მიხვდები. (ვიდეო ყურების გარეშე ვერ მიხვდები )

და იმასაც რომ ორივე ენას აქვს თავისი ადგილი რომ ეგ ძალიან კარგად გავიგე მე პირდად ამ ვიდეოდან და შენც უყურე აუცილებლად რადგან ჯავას დამარხვა ლოუ ლეითენსი აპლიკაციებსI არის ძალიან არასწორი. და თუ რატომაა არასწორი ეს კაცი ძალიან თვალსაჩინოდ ხსნის და ჩემი თხოვნა იქნება უყურო რომ კარგად გაიგო რაზე ვიხუმრე და + რა დავწერე ზოგადად.
* * *
დევიდს ძალიან მაგრად აქვს ახსნილი.

GIL-ის ასახსნელად

აპლიკაცია დაწერე რომელსაც 2 სრედი აქვს. ეს 2 სრედი როგორ იბრძვის INTERPRETATORISTVIS და სიგნალებს უგავნის კერენელს. კერნელი thread que-ში როგორ ალაგებს ამ სრედებს პრიოტრიტეტის მიხედვით და GIL რის მიხევით იღებ გადაწყვეტილებას ყოველ 100 tick-ზე სრედს მისცეს თუ არა უფლება გაგრძელების. თუ არადა გადადის (wait) sleep სტეიტში და 100 tick-ის მერე ისევ აკითხავს.
ჩვეულებრივი que-არის FIFI და ბაინარი სემაპფორებით p(posix)thread-ებით მუშაობს პითონიც.

Posted by: @Schizophrenic 23 Feb 2019, 17:59
NinjaRacer
არა ღადაობ? ერთ-ერთი ვარ ვისაც ეჭვი არ ეპარება ამ ენის უკვდაობაში, ძაან მეშლება ნერვები რო ამბობენ ჯავა მოკვდება 10 წელში და მსგავსი პროგნოზები facepalm.gif ამერიკის სამსახურები დაათვალიერე და ყოველი მეორე ჯავაა, ინტერესი მაქ იმის უფრო დიდი თორე, ამ სფეროში ჯავაზე აქამდეც საინტერესო რაღაცეები იწერებოდა და მომავალშიც დაიწერება up.gif
ვნახავ ვიდეოსაც რომ მოვიცლი ფეხბურთებია ახლა და ვერ ვმაზავ biggrin.gif

Posted by: NinjaRacer 23 Feb 2019, 18:01
@Schizophrenic
ჰოდა ძალიან გაგიხარდება ამ ვიდეოს ყურება რადგან ჯავა

ოპტიმიზაციების მერე
C++-ზე სწრაფია.
ყველაზე სწრაფი გაგიკვირდება და C#-ია.

10 მიკროწამამდე აქვს ლეითენსი ჯავას. მაგრამ ძალიან სპეციალიზირებული ინფრასტრუქტურა და ჰარდვეა ჭირდება.
მოკლედ თუ ოდნავ მაინც გაინტერესებს ჯავა უყურე.

და გადაწყვეტილებას მიიღებ სწორი ინფორმაციით. რომელი სად როგორ და რატომ გამოიყენება. რეალურ ცხოვრებაში და ძალიან ძვირფას და მნიშვნელოვან ორგანიზაციებში.

რაის მოკვდა ღადაობ givi.gif
* * *
https://www.youtube.com/watch?v=iG6fr81xHKA

კაკრაზ ამ 2 თემის მიყვანა მინდოდა პითონში და მიზეზიც მომეცა.
async და descr1ptore/metaclass-ები.

ვსო მოვრჩი ჩემ საქმეს.

აწი სისტემებს მივხედავ + პითონში რამე მარტივ ტულებს დავწერ.
ჯავაც თქვენი იყოს და სიპიპიც და ჰასკელიც)

Posted by: AnEeEeE=]] 25 Feb 2019, 12:19
Assuming you are developing a user based system like facebook, you will want to provide the functi0nality to search for other members regardless of the presence of accents in a username. Without using 3rd party collation library, you will need to remove the accents from username before comparison.

é - letter with accent; e - letter without accent; ̀ and ́ - stand alone accents;

checkio(u"préfèrent") == u"preferent"
checkio(u"loài trăn lớn") == u"loai tran lon"

ეს ბიბლიოთეკების გარეშე როგორ უნდა გავაკეთო სათითაოდ ხოარ ჩავანაცვლებ ასოებს, რა მეთოდი შეიძლება რო გამოვიყენო.

Posted by: Definitely_Maybe 25 Feb 2019, 13:59
AnEeEeE=]]
და რა პრობლემაა? შეამოწმოს სადაც ნახავს აქცენტიან ასოებს ჩაანაცვლოს ჩვეულებრივით

Posted by: AnEeEeE=]] 25 Feb 2019, 14:03
Definitely_Maybe
QUOTE
და რა პრობლემაა? შეამოწმოს სადაც ნახავს აქცენტიან ასოებს ჩაანაცვლოს ჩვეულებრივით

და როგორ უნდა შეამოწმოს

Posted by: Definitely_Maybe 25 Feb 2019, 14:11
for loop ში ჩამოუაროს ყველას
if i='é '
i='e' (ლისტში ჩამატება მგონი სხვანაირადაა ნუ გაქექვა უნდა)
elif i='à'
i='a'

ჰოდა ასე ყველა ვარიანტი რო ამოწურო.

ნუ ეს პირველი რაც თავში მომივიდა და იქნება ალბათ უფრო ადვილი ვარიანტიც.

Posted by: AnEeEeE=]] 25 Feb 2019, 14:13
Definitely_Maybe
არა ეგრეა არ გამოვა ამ ორ ასოზე კიარ არი ეს მარტო , სხვადასხვა კომბინაციებია სხვადასხვანაირი აქცენტიანი ასოების , ყველა ვარიანტს ეგრე ვერ ამოვწურავ ძაან დიდ დროს წამართმევს დ

Posted by: NinjaRacer 26 Feb 2019, 00:52
user posted image

ცოტა გავიცინოთ ^_^

აბა რა
* * *
server
CODE

import websockets
import asyncio


async def server(websocket, path):
   while True:
       message = await websocket.recv()
       await websocket.send(f'We have received message from client {message}')

start_server = websockets.serve(server, 'localhost', 9999)
loop = asyncio.get_event_loop()
loop.run_until_complete(start_server)
loop.run_forever()


client
CODE

import asyncio
import websockets

async def hello(uri):
   async with websockets.connect(uri) as websocket:
       while True:
           msg = input('what do you want to send?')
           await websocket.send(f'{msg}')
           print(await websocket.recv())

asyncio.get_event_loop().run_until_complete(
   hello('ws://localhost:9999'))
asyncio.get_event_loop().run_forever()

დამწყები asyncio-ისტი. მაგარი ეისინქი


https://asyncio.readthedocs.io/en/latest/hello_world.html
ხვალ ღამე დავწერ ჩეთს და უნდა შემოხვიდეთ ყველა გამატესტინოთ

Posted by: NinjaRacer 28 Feb 2019, 06:58
AnEeEeE=]]
კრისტალს ბაზრობს ტაწიანა


Posted by: AnEeEeE=]] 28 Feb 2019, 13:53
ეს მემენტო პატერნი ამიხსენით ვინმემ ვერ გავიგე ვერაფერი cry.gif

Posted by: NinjaRacer 28 Feb 2019, 15:49
AnEeEeE=]]
ერთი კლასის ინსტანს

ინახავ მეორე კლასის ინსტანის ატრიბუტში, დიკტში ან რამეში. ოღონდ შენახვისას copy.copy გინდა
თორე ვერ ავამუშავე სხვანაირად მე.

ესენი იდიოტები არიან
https://gist.github.com/fabiobatalha/5404977
რთულ სახლებს არქმევენ და დამაბნეველია ცოტა. მაგრამ აი იდეა ესაა მემენტოსი.


დიზაინ პატერნია. რომლითაც მაგალითად შეგიძლია დაწერო ტექსტ ედიტორი რომელშიც შეინახ ტექსტს.

სეივის მერე თუ დაგჭირდება, ისევ წინა სტეიტეზე აბრუნებ. რადგან მთელი ეს წინა სტეიტი მეორე ნესთიდ კლასში გაქვს შენახული self.shenaxuli ატრიბუტში.

რადგან მეორე კლასში გაქვს შენახული შენი პირველის კლასის ინსტანსის მთელი სტრუქტურა.
ჩათვალე დროში აბრუნებ და როგორიც იყო შენი კლასი სეივამდე ზუსტად იმ სტრუქტურას აბრუნებს.

ამიტომ გინდა copy.copy. ცვლადის მნიშვნელობას ან ობიექტის მისამართს კი არ აკოპირებს. როგორც მაგალითად კლასის გამოძახებისას შვება. არამედ მთლიან ობიექტს იღებს და აკოპირებს. თავის ყველაფრით ქმნის მის ასლს.

shalow copy-ს აკეთებს ობიექტის.
deep და shalow კოპის გაკეთება შეგიძლია ობიექტის.

მარტივად რომ გითხრა. ვთქვათ გაქვს საქაღალდე. პიქჩურეს.
სანამ რამეს შეცვლი ფიქჩურესში იღებ და აკოპირებს ფიქჩრეს_ბექაპ საქაღალდეს არქმევ ამ ორიგინალ პიქჩურეს.

ორიგინალ ფიქჩურესში აედიტებ სურათებს. რაღაც არ მოგწონს იღებ ფიქჩურეს ბექაფს და აკოპირებს ისევ ფიქჩურესში. ჰაილ ლეველზე ესე ხდება. ამ დიზაინ პატერნის აზრი ესაა.

მარტივია. ოღონდ ამ ყველაფერს კოდით აკეთებ. იზი პიზია.

Posted by: Roy 28 Feb 2019, 16:30
მაგარი გავიჭედე ლისტებში რა..
მოკლედ რა მინდა ავხსნი ეხლა.. მაქვს დაუშვათ ლისტების ლისტი. ელემეტებს(საბლისტებს) ერთიდაიგივე ელემენტები აქვთ კიდე შიგნით.
მინდა რომ დუპლიკატი რაცაა საბლისტებში ის გადავიტანო ლექსიკონში როგორც key და მერე იმავე საბლისტიდან კონკრეტული ელემენტი მივცე როგორც value.

დაახლოებით ასე გამოიყურება ჩემი ლისტი. ეხლა თითო ლისტიდან მინდა რო group1 და group2 წავიდეს ლექსიკონში როგორც key და მერე იმავე key'ს value მიენიჭოს შესაბამისი ლისტის პირველი ელემენტი..
CODE

def test():
   dic={}
   testlist = [
                  [name1,ip1,mask1,group1]
                  [name2,ip2,mask2,group1]
                  [name3,ip3,mask3,group2]
                  [name4,ip4,mask4,group2]
                 ]

საბოლოო შედეგი მინდა რო მივიღო ასეთი
{group1:[name1,name2], group2:[name3,name4]}

for each in testlist:
dic.update(each[3]:[]) ამის მერე რა უნდა ვქნა? user.gif

Posted by: AnEeEeE=]] 28 Feb 2019, 17:41
Roy
CODE
def test(testlist):
   result=dict()
   for element in testlist:
       if element[3] not in result:
         result[element[3]] = [element[0:3]]
       else:
         result[element[3]] +=[element[0:3]]
   return result
 
testlist = [
                 ['name1','ip1','mask1','group1'],
                 ['name2','ip2','mask2','group1'],
                 ['name3','ip3','mask3','group2'],
                 ['name4','ip4','mask4','group2']
                ]
print(test(testlist))

ნახე აბა ეს კოდი

თუ მარტო სახელები გინდა

Posted by: NinjaRacer 28 Feb 2019, 18:30
Roy
აუ მონაცემები გარეშე ძალიან მიჭირს მაგის დალაგება გონებაში.


ისე zip და set მეთოდები შეიძლება გამოიყენო.



Posted by: Lilith 28 Feb 2019, 20:16
QUOTE (Roy @ 28 Feb 2019, 17:30 )
მაგარი გავიჭედე ლისტებში რა..
მოკლედ რა მინდა ავხსნი ეხლა.. მაქვს დაუშვათ ლისტების ლისტი. ელემეტებს(საბლისტებს) ერთიდაიგივე ელემენტები აქვთ კიდე შიგნით.
მინდა რომ დუპლიკატი რაცაა საბლისტებში ის გადავიტანო ლექსიკონში როგორც key და მერე იმავე საბლისტიდან კონკრეტული ელემენტი მივცე როგორც value.

დაახლოებით ასე გამოიყურება ჩემი ლისტი. ეხლა თითო ლისტიდან მინდა რო group1 და group2 წავიდეს ლექსიკონში როგორც key და მერე იმავე key'ს value მიენიჭოს შესაბამისი ლისტის პირველი ელემენტი..
CODE

def test():
   dic={}
   testlist = [
                  [name1,ip1,mask1,group1]
                  [name2,ip2,mask2,group1]
                  [name3,ip3,mask3,group2]
                  [name4,ip4,mask4,group2]
                 ]

საბოლოო შედეგი მინდა რო მივიღო ასეთი
{group1:[name1,name2], group2:[name3,name4]}

for each in testlist:
dic.update(each[3]:[]) ამის მერე რა უნდა ვქნა? user.gif

CODE

def test():
   dic={}
   testlist = [
                  [name1,ip1,mask1,group1]
                  [name2,ip2,mask2,group1]
                  [name3,ip3,mask3,group2]
                  [name4,ip4,mask4,group2]
                 ]
   s = set([x[-1] for x in testlist])
   for a in s:
       dic[a] = [x[0] for x in testlist if x[-1] == a]

   print(dic)

Posted by: c2h5oh 28 Feb 2019, 21:20
NinjaRacer

პითონის ფავოურით ბიბლიოთეკები ჩამოწერე რა smile.gif

Posted by: NinjaRacer 1 Mar 2019, 02:11
c2h5oh
import serial
import time
import multiprocessing
import re
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.websocket
import tornado.gen
from tornado.options import define, options
import os
import time
import worker
import multiprocessing
import json
import asyncio
import serial_asyncio
import serial
import sys
import websockets
import datetime
import random

ფავორიტი არაბოლო 2 დღე თავს ვურტყავ რაღაცეები არ გამომდის და ლამისაა ღამეები არ მძინავს ისე მომეშალა ნერვები. smile.gif
* * *
QUOTE
პითონის ფავოურით ბიბლიოთეკები ჩამოწერე რა

დამცინე თუ რაქენი
ეხლა თუ იტიპე?
თუ რამე მსგავსი გამოვლინე?

Posted by: ბუდა 1 Mar 2019, 07:20
NinjaRacer
ზდ ძმას ვეჭიდავე
execution ი ვარ

ჯერ რომ უპასუხე და მერე და მერე კითხე ეგ ღადაობაა lol.gif lol.gif lol.gif lol.gif
პროექტიდან ამოიღე იმპორტები პირდაპირ ხო? :დ
უსათაუროში აღარ ჩანხარ და აქ შემოგიარე mad.gif

Posted by: c2h5oh 1 Mar 2019, 07:33
QUOTE
დამცინე თუ რაქენი
ეხლა თუ იტიპე?


არა რა დაგცინე smile.gif
მივადგები და მეც დავამუღამებ ეხლა

აპ მულტიპროცესინგ ვერ გავუგე კაროჩე
პოპით ვუშვებ პროგრამას, თან ინპუთ აუთპუტში პაიპეს ვაძლევ
მარა მერე stdout.read ს რო ვაძლევ არაფერს არ აბრუნებს სანამ არ გავთიშავ
დაჟე stdout.flush იც მივე მარა ნწ sad.gif

Posted by: NinjaRacer 1 Mar 2019, 12:08
ბუდა
ზდ..ცოტა რო მძინავს ვერ ვამუღამებ ჰიუმორს ;///////////////////
.
დავაკოპირე. აბა ამდენი წერა სად შემიძლია user.gif

class SerialConnection (multiprocessing.Process)

ინიტში მაქვს Serial instance-ი გაკეთებული მაგრამ მიღებაზეც და გადაცემას ღლეზე კიდია სად უშვებს ხ.ი.ზ.
არასებული პორტი რომ მიუთითო მაინც ღლეზე კიდია ექსეფშენსაც არ აგდებს.

პროცესებს შორის კომუნიკაცი Queue

que.put
que.get მოგვარდა. ლოგინგი კარგიგამახსენე. std_out-შიუნდა გავაშვებინო ეხლა დებაგი.

ვინდოუსზე თუ პროცესები სხვანაირად მუშაობს. ლინუქსი საბპროცესებს უშვებს და გლობალ დატაზე აქვს წვდომა.
https://pymotw.com/2/multiprocessing/basics.html

https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing
ეს წასაკითხია. help.gif user.gif
* * *
აი მგონი ამის ბრალია

https://stackoverflow.com/questions/45977209/mixing-multiprocessing-and-serial-ports
* * *
გავაკეთე ძლიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიიივს.

ძილმა მიშველა.
ღამე სრედები მქონდა გაშვებლი ტვინში. დილით .join() გააკეთა თავისი ეტყობა.biggrin.gif

Posted by: Roy 1 Mar 2019, 17:51
QUOTE
def test():
   dic={}
   testlist = [
                  [name1,ip1,mask1,group1]
                  [name2,ip2,mask2,group1]
                  [name3,ip3,mask3,group2]
                  [name4,ip4,mask4,group2]
                 ]

ბევრი დღნაურის შემდეგ ბოლოს როგორც იქნა გავიგე როგორ უნდა ვქნა ეს.. სტაკოვერფლოუზეც ტვინი წავტყანი ცოტა და იქ მირჩიეს.. პროსტა ტუპად არ დამიკოპირებია.. მართლა გავიგე რა როგორ ხდება.

დედა#####ულის ერთი dic.comprehension უნდა რა biggrin.gif
CODE

dic = {a:[b[0] for b in testlist if a==b[3] ] for set(c[3]) for c in testlist}


ასე იწერება ეს როცა არ იცი რა უნდა ქნა..
CODE
dic = {a: [] for set()}

სეტში და დიქშენარის valueში რას დალუპავ ეგ დეტალებია უკვე.

და აქედან გამომდინარე ერთი რაღაც აღმოვაჩინე კიდე ჩემით უკვე biggrin.gif

როცა რაღაცა ლისტის ელემენტების ან დიქშენარი key/valueების დაპრინტვა მინდა მაგალითად,
ტრადიციული
for i in b:
print (i)

მაგივრად პირდაპირ {print(i) for i in b} biggrin.gif


ეხლა კლასებს, first class functi0nებს, დეკორატორებს და ეგეთებს გავარჩევ ნელნელა და მალე დედას #######ავ ისე მეცოდინება vik.gif

Posted by: NinjaRacer 1 Mar 2019, 18:08
Roy
QUOTE
დედა#####ულის ერთი dic.comprehension უნდა რა


ეგ 1 აღარაა უკვე დედა#####ულის ორია tongue.gif

QUOTE
ეხლა კლასებს, first class functi0nებს, დეკორატორებს და ეგეთებს გავარჩევ ნელნელა და მალე დედას #######ავ ისე მეცოდინება 

sa.gif

გენერატორები კორუტინები, ესინქი სრედინგი. მულტიპროცესინგი ესაა რეალურად გადგება.
https://www.ibm.com/developerworks/library/ba-on-demand-data-python-3/index.html ეს უნდა შევიწოვო კარგააააად

stackowerflow love.gif

ვიცი დაგუგლული მოხვიდოდი მაგრამ გიტჰაბზე python + asa კაი რაღაცეებს აგდებს.
https://github.com/xpac1985/pyASA



პ.ს დეკორატორები @ რაცააქვს აი ეგ არის ყველაზე გამოყენებადი და სასარგებლო ფიჩა.
ყველგან გხვდება აბსოლუტურად. რაც ონდავ რამე პრაქტიკულია.

{} გენერატორ ექსპფრეშენებზე ამბობ ხო up.gif მართლა მაგარია.
ეგ yield ეხლა მიწევს ასინქრონულად სერიალით გაგზავნა/მიღება რაღაცეების. ჰოდა ვამუღამებ კარკაზ.

Posted by: Roy 2 Mar 2019, 00:23
NinjaRacer
QUOTE
პ.ს დეკორატორები @ რაცააქვს აი ეგ არის ყველაზე გამოყენებადი და სასარგებლო ფიჩა.
ყველგან გხვდება აბსოლუტურად. რაც ონდავ რამე პრაქტიკულია.

ხოო.. ფუნქციის ფუნქციაში გადაცემა და მერე იქიდან საერთოდ სხვა რაღაცის დაბრუნება არის ზე Fიჩა კიბატონო.. ნელნელა აზრზე მოვდივარ ისე .. ეხლა კლასებს რო მივხვდები მერე წავა კარგად ყველაფერი იმიტო რო ყველაფერი კლასია პიტონში .. ობჯექტია კაი მარა ეგ ობჯექტი სხვადასხვა კლასებისგან შედგება საბოლოო ჯამში.
user posted image

Posted by: NinjaRacer 2 Mar 2019, 12:44
Roy
QUOTE
ზე


+2

პირველი კლასი რაც დაწერე მართლა საკაიფოა. პრაკტიკულად რაც გჭირდება იმის წერა კარგია.


QUOTE
ფუნქციის ფუნქციაში გადაცემა და მერე იქიდან საერთოდ სხვა რაღაცის დაბრუნება არის ზე Fიჩა კიბატონო


ხო მაგარი. სულ სხვა რაღაცას აბრუნებს მაგრამ ფუქნციას (id-ს) იგივეს უფრო სწორედ ფუნქციას არ ეხება ვრაპერია.

რო გავამარტივოთ
CODE

def wrapper:
   do_wrapper_logic
   return original_func(**args)


მაქსიმუმ შეუძლია არგუმენტების ინტერსეფთი გააკეთოს. მაგრამ ფუნქცია ხელუხლებელი რჩება. შეგიძლია ზედდააშენო ლოგიკა მაგრამ პირვანდელი ფუნქცია/ობიექტი/მისი ID ხელუხლებელია მაინც და იგივე ID ექნება რაც მანამდე ქონდა.


მაგალითად
CODE


def check_num(func):
       def inner_func(first, second):
           a, b = first, second
           if b < 0 or a < 0:
               raise ValueError('must be positive')
           else:
               return func(first, second)
       return inner_func


@check_num
def adder(firstarg,secondarg):
   return firstarg + secondarg


result = adder(2,34)
print(result)

#print(adder(39,-2))  #ეს ველიუ ერორს გამოიტანს


შეგეძლო იგივე ლოგიკა ფუნქციაში ჩაგეტენა მაგრამ დეკორატორს სხავაგანაც გამოიყენებ. code reuse და DRY
პრინციპია. იგივე კლასებზეც.

კიდევ getter, setter და deleter არის @ სინტაქსით. ძალიან საკაიფო რამეა.
მანდ შეგიძლია მაგალითად რომელიმე ატრიბუტის
x = value
ინტერსეფტი გააკეთო. value ვალიდეიშენი გააკეთო.
მაგალითი კოდის;

CODE

class Person(object):
   def __init__(self, first_name, last_name):
       self.first_name = first_name
       self.last_name = last_name

   @property
   def name(self):
       return self.first_name + ' ' + self.last_name

   @name.setter
   def name(self, value):
       first_name, last_name = value.split(' ')
       if 'Frank' in first_name:
           print('he is a rat')
       self.first_name = first_name
       self.last_name = last_name

   @name.deleter
   def name(self):
       del self.first_name
       del self.last_name


person = Person('bob', 'sullivan')

print(person.name)

person.name = 'Frank Costello'

print(person.name)

person.name = 'Billy Costigan'
print(person.name)


მარტივი მაგრამ შესაძლებლობები იმის დედა #####ან იმხელა აქვს.


პახოდუ აქ ენკაპსულაციას იყენებ.
ეგ რა არის და:

print(person.name) -წერ მაგრამ რეალურად self.full_name-იდან მოგაქვს მნიშვნელობა. გეთერი უბრუნებს name-ს return self.full_name-ს. პირდაპირი წვდომა შეგიძლია შეზღუდომ მაგ ცვლადზე ინიტში self.full_name-ის ნაცვლად self.__full_name-ით დაწერო (წინ __რასაც აქვს დახურული ცვლადია) და შენი გეთერის ავლით ვეღარავინ მიწვდება. გეთერის გავლა უეჭველი მოუწევს.

შეგიძლია გაფილტრო ყოველი აქსესი ცვლადზე, ან ცვლადის მინიჭებაც გაფილტრო. როგორც setname-ზე გავაკეთე. თუ ვთქვათ ვინმე შეეცდება სახელის მოძიებას რომელშიც sally ურევია რამე მესიჯი გამოუტანოს ან რამე სხვა ფუნქცია გაუშვას პარალელურად ან უბრალოდ შეუზღუოდს წვდომა.
რადგან self.full_name მნიშვნელობამდე სანამ მივა getter ვრაპერი უნდა გაიაროს.

ამას რამე პრაქტიკულ ტულის წერის დროს რომ გამოიყენებ დაინახავ რომ ძალიან მარტივია და სასარგებლოა.

პ.ს იგულისხმება რომ getter და @property ერთიდაიგივეა. პროფერთის ნაცვლად getter-ს ვამბობ.

Posted by: AnEeEeE=]] 2 Mar 2019, 13:25
CODE
import matplotlib.pyplot as plt
import numpy as np
import urllib
import matplotlib.dates as mdates

def bytespdate2num(fmt, encoding='utf-8'):
   strconverter = mdates.strpdate2num(fmt)
   def bytesconverter(b):
       s = b.decode(encoding)
       return strconverter(s)
   return bytesconverter


def graph_data():
   stock_price_url = 'https://pythonprogramming.net/yahoo_finance_replacement'
   source_code = urllib.request.urlopen(stock_price_url).read().decode()

   stock_data = []
   split_source = source_code.split('\n')

   for line in split_source:
       split_line = line.split(',')
       if len(split_line) == 7:
           if 'Volume' not in line:
               stock_data.append(line)

   date, openp, highp, lowp, closep, adjustedp, volume = np.loadtxt(stock_data,
                                                         delimiter=',',
                                                         unpack=True,
                                                         converters={0: bytespdate2num('%Y-%m-%d')}            )
   plt.plot_date(date, closep, '-')

   plt.xlabel('date')
   plt.ylabel('price')
   plt.title('Interesting graph\nCheck it out')
   plt.legend()
   plt.show()


graph_data()

ესკოდი ნახეთ ვინმემ და უშველეთ რამე user.gif ყველაფერი ვიდეოს მიხედვითაა , გრაფიკი უნდა დახატოს

Posted by: NinjaRacer 2 Mar 2019, 14:13
AnEeEeE=]]


აი https://pastebin.com/pHKu1w7X

ხატავს. ბოლოში სფეისი გქონდა ცუდად ერთი.

Posted by: AnEeEeE=]] 2 Mar 2019, 14:26
NinjaRacer
შენ ხარ გადამრჩენელი biggrin.gif

Posted by: NinjaRacer 3 Mar 2019, 01:36
AnEeEeE=]]
QUOTE
გადამრჩენელი

user posted image

შენ საფორტს უთხარი ეს დაგიყენოს ჰომფეიჯად.
https://www.youtube.com/watch?v=QJtWxm12Eo0





აუ ტიპმა რა მარტივად იშოვა მილიონები. lol.gif 20 წუთში 50$K მოხსნა.

მოვიფიქრე როგორ ვიშოვო პითონით ფული yes.gif lol.gif

facepalm.gif

ცოტა ტვინის განძრევაა საჭირო და შეიძლება ფულის შოვნა. თან ძალიან მარტივად gigi.gif

სინამდვილეში ბევრი გზა არსებობს )

თუ გამომივა მერე თქვენც გასწავლით gigi.gif
* * *
https://www.google.com/search?q=Julien+Lavall%C3%A9e&source=lnms&sa=X&ved=0ahUKEwjf9YP4yOTgAhWLzaQKHUFwBoEQ_AUICSgA&biw=1366&bih=639&dpr=1

lol.gif

Posted by: AnEeEeE=]] 4 Mar 2019, 15:30
NinjaRacer
QUOTE
თუ გამომივა მერე თქვენც გასწავლით 

გელოდებით lol.gif

Posted by: c2h5oh 5 Mar 2019, 00:06
NinjaRacer

python ში gui ს თვის რომელ ბიბლიოთეკას იყენებ ?

Posted by: NinjaRacer 5 Mar 2019, 00:08
c2h5oh
tkinter

pyqt

30 pyqt

Posted by: c2h5oh 5 Mar 2019, 00:19
ამ სამიდან ყველაზე უკეთესად რომელი მიგაჩნია?

აუ მოკლედ ვერ გავიგე რომელი დავამუღამო
თან არმინდა რო ვეწვალო და ბოლოს უარესი შემჩეს

Posted by: NinjaRacer 5 Mar 2019, 00:28
c2h5oh


არ ვიყენებ ხშირად შესაბამისად ვერ ვერკვევი კარგად.

მაგრამ pyqt-ი უფრო დიდია. 500 კლასი აქვს და 3000 ფუნქცია.

tkinter-ში გავაკეთე ადრე. მაილ სერვერის კლიენტი. ტექსტ ედიტორი და საათი.

უფრო მარტივია.

pyqt კროსპლათფორმულია და c++ qt ფრეიმვორკის ბაინდინგია.

Posted by: c2h5oh 5 Mar 2019, 00:43
აი მაქ ვიჭედები. დაან დიდია და მგონი ჯობია ტკინტერით ვიმაიმუნო

anyway მადლობა smile.gif

Posted by: NinjaRacer 5 Mar 2019, 00:44
c2h5oh
მაგაში მაიმუნობა თუ გინდა david beazley -ს programming python-ში აქვს რამოდენიმე მაგალითი.

ვსეგდა პაჟალუსტა up.gif

Posted by: RedShark 5 Mar 2019, 01:15
c2h5oh

ტკინტერი ქტ - სთან შედარებით სათამაშოა smile.gif

ქტ არის უსერიოზულესი ფრეიმვორკი, რომელსაც ბევრი დიდი კომპანია და კორპორაცია იყენებს, ტკინტერი მარტივი გუი აპლიკაციებისთვის არის, უფრო სასწავლო დანიშნულებით...

პითონისთვის ორი ბაინდინგია გაკეთებული - PyQt5 და PySide2.
ორივე ერთანირად გამოიყენება (მცირეოდენი სხვაობებია ფუნქციების დასახელებებს და ა.შ. შორის), განსხვავება ის არის, რომ PyQt5 - ის ლიცენზია მისი მთლად თავისუფლად გამოყენების ნებას არ გაძლევს, უფასო ოპენსორს პროგრამები შეგიძლია უფასოდვე წერო, მაგრამ თუ გაყიდი, მაშინ მის მწარმოებელ კომპანიასაც (Riverbank Computing) უნდა გადაუხადო.

PySide2 - ს თვითონ Qt აკეთებს ( https://wiki.qt.io/Qt_for_Python ) და გასულ წელს დაიდო პირველი სტაბილური ვერსია. ამ შემთხევაში ლიცენზიით სრული თავისუფლება გაქვს, გამოიყენე და გაყიდე როგორც გინდა.

Posted by: NinjaRacer 5 Mar 2019, 01:16
RedShark
QUOTE
ორივე ერთანირად გამოიყენება (მცირეოდენი სხვაობებია ფუნქციების დასახელებებს და ა.შ. შორის), განსხვავება ის არის, რომ PyQt5 - ის ლიცენზია მისი მთლად თავისუფლად გამოყენების ნებას არ გაძლევს, უფასო ოპენსორს პროგრამები შეგიძლია უფასოდვე წერო, მაგრამ თუ გაყიდი, მაშინ მის მწარმოებელ კომპანიასაც (Riverbank Computing) უნდა გადაუხადო.


gpl -ით შეგიძლია დაალიცენზიო და გაყიდო მე მგონი.

2 ნაირი ლიცენზირება შეგიძლია.

ნუ რას გაყიდი ღია თუა. მაგრამ შეგიძლია საფორტი გაყიდო ან CD-ში ჩაწერო ან რამე სხვა მედიაში და ეგრე გაყიდო.

Posted by: RedShark 5 Mar 2019, 01:19
NinjaRacer
QUOTE
gpl -ით შეგიძლია დაალიცენზიო და გაყიდო მე მგონი.


გპლ აქვს უკვე და სწორედ ეგ გაძლევს უფასოდ გავრცელების შესაძლებლობას, მაგრამ თუ გაყიდი მერე უკვე სხვა - კომერციული ლიცენზია ამოქმედდება.

Posted by: NinjaRacer 5 Mar 2019, 01:20
RedShark
QUOTE
გპლ აქვს უკვე და სწორედ ეგ გაძლევს უფასოდ გავრცელების შესაძლებლობას, მაგრამ თუ გაყიდი მერე უკვე სხვა - კომერციული ლიცენზია ამოქმედდება.


კოდს თU დახურავ ხო.

მაგრამ ვერავინ ამიკრძალავს GPL-ლიცენზიით დაწერილი კოდის დისტრიბუციაში ფულის აღებას.

მაგალითად რედჰატი აიღე.

Posted by: RedShark 5 Mar 2019, 01:21
NinjaRacer
QUOTE
ნუ რას გაყიდი ღია თუა.


გაყიდვაში კოდი იგულისხმება, მაგ ფრეიმვორკით შექმნილი კოდი და არა თვითონ ფრეიმვორკი.

Posted by: NinjaRacer 5 Mar 2019, 01:21
QUOTE
გაყიდვაში კოდი იგულისხმება, მაგ ფრეიმვორკით შექმნილი კოდი და არა თვითონ ფრეიმვორკი.

და შენ რა გგონია მე რა ვიგულისხმე ?


დავწერ კოდს. ჩავტენი ბევრ TRADEMARK-იან კონტენტს შიგნით.
შევკრავ რამე დისტრიბუტივის პორმატში.

დავადებ GPL-ს. მთელი კოდი იქნება ღია. მაგრამ გარკვეულიკონტენტის უფასოდ გავრცელება აღარ შეგეძლება. მაგალითად ლოგოები და ა.შ

და ფულს იმაში ავიღებ რომ გავავრცელებ დისტრიბუტივს 1 შეკრულ პროდუქტში.

აფდეითები და მაინტანანსი იქნება ფასიანი.

ძალიან კარგი ბისნეს მოდელია.

Posted by: RedShark 5 Mar 2019, 01:24
NinjaRacer
QUOTE
მაგრამ ვერავინ ამიკრძალავს GPL-ლიცენზიით დაწერილი კოდის დისტრიბუციაში ფულის აღებას.

თუ მაგ კოდში pyqt5 - გამოიყენებ და არ გადაიხდი სასამართლოებზე მოგიწევს სიარული biggrin.gif

Posted by: NinjaRacer 5 Mar 2019, 01:29
RedShark

ჩემს კოდს თუ GPL 2.1 ლიცენზია ადევს.


ვისი კოდიც არ უნდა იყოს შემეძლება გაყიდვა (მხოლოდ დისტრიბუტივის სახით)

უფრო გასაგები რომ იყოს

If you don't have a commercial license you have to release you application under a GPL3-compatible license. That means for example that you can charge as much for your application as you want, but everybody else can do that too or distribute it for free.


ზემოთ რაც დავწერე. everyone can distribute for free პრობლემებასაც ხსნის. trademark-იანი კონტენტის ჩატენვას ვგულისხმობ.


და ძალიან წარმატებული ბიზნეს მოდელია.
კიდევ ერთხელ გავიმეორებ.

არსად არ მომიწევს სირბილი თუ GPL ლიცენზია ადევს.

ზოგადად რასაც GPL ლიცენზია ადევს არავის არასდროს არსად სირბილი არ მოუწევს.

ამიტომ მიყვარს copyleft ლიცენზია

კოდი უფასო და ღია იქნება ყოველთვის (copyleft) მაგრამ მე შემიძლია მის გავრცელებაში ავიღო ფული.

ასევე შემძლია ჩემს დისტრიბუტივში ჩავტენო ჩემი სავაჭრო ნიშნები რაც ჩემი პროდუქტის ავტენტურობას და ცნობადობას/ბრენდობას დაიცავს. ლოგოები ეტც. რაც სხვა მის გავრცელებას შეუღუდავს. კი შეუძლია დაშალოს კოდი ამოიღოს ლოგოები და ა.შ

მაგრამ როგორც ვთქვი თუ რამე სერიოზულს ქმნი შეგიძლია აააწყო ისეთი მოდელი რომელიც იქნება კომერციულად მომგებიან. საფორთით, დისტრიბუტივის გავრცელებით და ადეითით შეგიძლია მოითხოვო იმდენი ფული რამდენიც გაგიხარდება.

აიღე რედჰატი. მილიარდები ღირს (თვითონ კომპანია) და open source არის.

და ზოგადად მიმაჩნია რომ ყველა სოფთი ოუფენ სორსი უნდა იყოს.

Posted by: RedShark 5 Mar 2019, 02:02
NinjaRacer

ვიცი ეგ ბიზნეს მოდელი, მაგრამ ამ შემთხვევაში კონკრეტულად მაგ ფრეიმვორკზე ვსაუბრობთ, რომელიც არის ნახევრად თავისუფალი და მის პროპრიეტარულ ლიცენზიაში წერია, რომ მისი გამოყენება ნებისმიერი სახის ფინანსური მოგების მიზნით არის ფასიანი...

რავი, მე მაინც მგონია რომ გაასაჩივრებენ... და ისე ასეთი სასამართლოები საკმაოდ ხშირად იმართება smile.gif

Posted by: NinjaRacer 5 Mar 2019, 02:05
QUOTE
რავი, მე მაინც მგონია რომ გაასაჩივრებენ... და ისე ასეთი სასამართლოები საკმაოდ ხშირად იმართება


რავი თუ გინდა ეგრე გეგონოს.


მაგრამ GPL-ით ლიცენზირებული თუა დუდღნონ.

ვერავინ დედამიწის ზურგზე ვერ გადაგიღუნავს GPL ლიცენზიაში წერია რომ გაქვს ფულის მიღების უფლება.

ამიტომ აქვთ 2 ნაირი ლიცენზია. ერთი 'კომერციული' მეორე 'ღია'

მაგრამ ეს ღია ლიცენზია არ კრძალავს ფულის კეთებას.

ეგრეა და ამას 100% დაგიდასტურებს ნებისმიერი იურისტი.ყველაზე უცოდინარი და გამოუცდელიც კი.
* * *
https://www.elastic.co/products

აი ეს აიღე ოუფენსორსია. მაგრამ ყიდიან თავის პროდუქტებს.
https://www.youtube.com/watch?v=55YJxJbeznQ&feature=em-uploademail

ლოგინგისთვის ვიყენებდი. logstash kibana redis elastic search ამათნ. ძალიან სწრაფია და იმ მოცულობის ლოგები გვქონდა რომ ვერცერთი სხვა სერჩი ვერ უმკავდებოდა.

ეს კიდევ ულაგოდ აკეთებდა ყველაფერს.
მართალია მაშინ ვერ ვერკვეოდი რომ JVM-ის მუშაობაში და პარამეტრების წიუნინგი ჭირდება და ხშირად ეკიდებოდა.

რათქმაუნდა მე ამ ყველაფერში ფული არ გადამიხდია.
* * *
ნებისმიერი მათი პროდუქტი რომელიც gpl ლიცენზიითა შემიძლია ავირო გადავაკეთო.
ისევ GPL ლიცენზია უნდა დავადო ამას gpl მაიძლებს.

მაგრამ მაინც შემიძლია გავყიდო როგორც დისტრიბტივი. აი როგორც ამათ აქვს. siteSearch Security analytics. metrics.

და ა.შ
* * *
ყველაზე წარმატებული სწორი და სამართლია მოდელია სოფთ ბიზნესის.

მაიკროსოფთივით არ აიძულებ რაღაცეებს და ნაგავ გადირკულ მახინჯ სოფთში არ ახევ ფულს. მონოპოლი ხარ. ჩვეულებრივ მომხმარებლების ექსპლუატაციას ახდენ და როგორ არის დღემდე ეგ კანონიერი არ ვიცი.

იყო ღია კოდზე და მიანც აკეთებდე ბევრ ფულს ნიშნავს იყო ის რაც უნდა იყო. ნიშნავს რომ შენ ფულს იღებ დამსახურებულად იმ პროდუქტში რომელიც შექმენი და არა დაძალებით, მარკეტინგით და სხვა ალტერნატივის ჩახშობის გზით ყველგან რო თხრი შენ ფასიან ნაგავ. პროდუქტს.

შეგიძლია დახურო კოდი და ისე გაყიდო. მაგრამ დღეს მემგონი ეგ მოდელი უკვე მოძველდა.
* * *
ყველაფერი საუკეთესო რაც არის არის ღია კოდზე.

Posted by: NinjaRacer 6 Mar 2019, 14:04
გუშინ დამჭირდა წრფივი რეგრესიის ანალიზი smile.gif

ამპერებიდან ვოლტაჟი რო დაედგინა მიახლოებით smile.gif

math ბიბლიოთეკაც კი დამჭირდა.

Posted by: NinjaRacer 10 Mar 2019, 16:49
CODE

import logging
import random
import threading
import time

logging.basicConfig(level=logging.DEBUG,
                   format='%(asctime)s (%(threadName)-2s) %(message)s',
                   )

class ActivePool(object):
   def __init__(self):
       super(ActivePool, self).__init__()
       self.active = []
       self.lock = threading.Lock()
   def makeActive(self, name):
       with self.lock:
           self.active.append(name)
           logging.debug('Running: %s', self.active)
   def makeInactive(self, name):
       with self.lock:
           self.active.remove(name)
           logging.debug('Running: %s', self.active)

def worker(s, pool):
   logging.debug('Waiting to join the pool')
   with s:
       name = threading.currentThread().getName()
       pool.makeActive(name)
       time.sleep(0.1)
       pool.makeInactive(name)

pool = ActivePool()
s = threading.Semaphore(2)
for i in range(4):
   t = threading.Thread(target=worker, name=str(i), args=(s, pool))
   t.start()


ამ კოდს ამიხსნის ვინმე?

კერძოდ semaphore რას აკეთებს?

ანუ აკონტროლებს სრედების რაოდნებას ხო? 2 ერთდროულ სრედზე მეტს არ გაუშვებს. დააყენებს რიგში ხო? ეგ კაი მაგრამ
ინიტში super-ს რატო იძახებს ასე სტრანნად. ვერ ვიპოვე მაგის დოკუმენტაცია. ძველი სინტაქსია. სუპერი მესმის მაგრამ როცა ასე იძახებენ. super(CallingClass, self).__init__() უკვე აღარ. პიდაპირ super(CallingClass) არა?

თანაც ამ კლასში თავის თავს იძახებს. ეგ პირველად ვნახე fingal.gif

კიდევ ამ სემაფორის კლასს აქვს aquire მეთოდი რომელსაც აქვს bloking=False ფლაგი.
და ვერ გავიგე. რადგან არ მესმის ამდენი ინგლისური.

acquire(blocking=True, timeout=None)¶
Acquire a semaphore.

When invoked without arguments:

If the internal counter is larger than zero on entry, decrement it by one and return true immediately.
If the internal counter is zero on entry, block until awoken by a call to release(). Once awoken (and the counter is greater than 0), decrement the counter by 1 and return true. Exactly one thread will be awoken by each call to release(). The order in which threads are awoken should not be relied on.
When invoked with blocking set to false, do not block. If a call without an argument would block, return false immediately; otherwise, do the same thing as when called without arguments, and return true.

When invoked with a timeout other than None, it will block for at most timeout seconds. If acquire does not complete successfully in that interval, return false. Return true otherwise.

Changed in version 3.2: The timeout parameter is new.

ანუ თუ ყველა 10-ვე სრედი დაკავებულია. შენ დაუბლოკავად გინდა aquire() გააკეთო უბრალოდ ფალს გიბრუნებს და მომავალშიც არ დაგიბრუნებს semaphore -ობიექტს უფრო სწორედ True/False-სს? თავიდან უნდა გააგზავნო?

ტაიმატუის შემთხვევაში თუ ვთქვათ დაკავებულია false-ს გიბრუნებს და მერე ხელით ამოწმებ is_alive() მეთოდით და თუ ცოცხალია ესეიგი დაკავებული იყო გებულობ, მაგრამ nonblocking შემთხვევაში რას აკეთებ.
რა დროს გამოიყენება?

დაუბლოკავი მე მესმის როგორც ქოლბექი. ანუ aquire() როცა გათავისუფლდება და მეშლება რამე?
* * *
გაიღვიძეთ ექსპერტებო bis.gif ნუ ძინავთ tongue.gif

CODE

from multiprocessing import Process, Queue, Pipe, Lock, Pool
import os

def pinfo(title):
   print(title)
   print('module name ', __name__)
   print('Parent process ', os.getppid())
   print('process id: ', os.getpid())

def hello(name):
   pinfo('hello functi0n')
   print('hello ', name)

def fill_que(q, i, l):
   with l:
       q.put,i
   print('Added i= ', i, 'to que ', q)

def exponent(i):
   return i*i

pool = Pool(4)
print(pool.map(exponent, range(10)))

lock = Lock()
q = Queue()

for i in range(10):
   Process(target=fill_que, args=(q, i, lock)).start()

pin, pout = Pipe()

pin.send('hi')
x = pout.recv()
print(x, 'received')
q.put([1,2,3])
print(q.get(), 'in que')

p1 = Process(target=hello, args=('bob',))
p1.start()
p1.join()



* * *
ძაან საკაიფოდ გადაურბინა პითონის დოკუმენტაციას




Posted by: AnEeEeE=]] 11 Mar 2019, 13:32
NinjaRacer


CODE

import copy
class Text(object):
   def __init__(self, current_text=""):
       self.current_text = current_text
   def getx(self):
       return self.current_text
   def write(self,newtext):
       if '[' in self. current_text:
           number=self.current_text.rindex('[')
           self.current_text= self.current_text[0:number]+newtext+self.current_text[number::]
       else:
           self.current_text=self.current_text+newtext
       return self.current_text
   def set_font(self, font):
       self.current_text="["+font+"]"+self.current_text+"["+font+"]"
       return self.current_text
   def show(self):
       return self.current_text
   def restore(self, version):
        self.current_text =  version
        return  self.current_text
   def __str__(self):
       return str(self.current_text)
 
class SavedText(object):
  def __init__(self, saved=[]):
      self.saved =[]
  def getu(self):
      return self.saved
  def save_text(self, document):
      Originator.set(copy.copy(document))
      self.saved.append(Originator.save_to_memento())
     
  def get_version(self, number):
      return self.saved[number]
  def __str__(self):
       return str(self.saved)
       
class Memento(object):
   def __init__(self, state):
       self._state = state

   def get_saved_state(self):
       return self._state
   def __str__(self):
       return '"' +str(self._state) +'"'

class Originator(object):
   _state = ""

   def set(self, state):
       self._state = state

   def save_to_memento(self):
       return Memento(self._state)

   def restore_from_memento(self, memento):
       self._state = memento.get_saved_state()
       

Originator=Originator()
       


if __name__ == '__main__':
   #These "asserts" using only for self-checking and not necessary for auto-testing

   text = Text()
   saver = SavedText()
   
   text.write("At the very beginning ")
   saver.save_text(text)
   text.set_font("Arial")
   saver.save_text(text)
   text.write("there was nothing.")

   assert text.show() == "[Arial]At the very beginning there was nothing.[Arial]"
   
   text.restore(saver.get_version(0))
   assert text.show() == "At the very beginning "

   print("Coding complete? Let's try tests!")

ნახეთ რა რატო არ გამოდის ვერ გავიგე user.gif]

TypeError: <class 'dict'> is wrong data type
ამას მიწერს

Posted by: NinjaRacer 11 Mar 2019, 22:03
AnEeEeE=]]
ეგ ამოცანა გამიჭირდა ყველაზე მეტად ბევრი გუგლაობის და დცების მერე დავწერე.

აი ძალიან ცუდი კოდი დავწერე. არ მისდევს ამ დიზაინ პატერნს შეიძლება.
არც გამოყენებადია შეიძლება მაგრამ აბა ცადე თუ იმუშავებს.

CODE

import copy


class Saver:

  saved = []
  version = 0

  @staticmethod
  def save(obj):
     Saver.version += 1
     Saver.saved.append(copy.copy(obj))

  @staticmethod
  def restore(version):
     return Saver.saved[version]

class Writer:
  def __init__(self, text):
     self.text = text


  def get_text(self):
     return self.text

  def add_text(self, text):
     self.text += ' ' + text

  def save_state(self):
     Saver.save(self.text)

  def restore(self, version):
     self.text = Saver.restore(version)

  def __str__(self):
     return str(self.text)




edit = Writer('hi')
edit.save_state()
edit.add_text('there')
print(edit)
edit.add_text('how are you')
edit.save_state()
edit.restore(1)
print(edit)
edit.restore(0)
print(edit)


პირველჯერზე უკეთესი კოდი მქონდა. მაგრამ ეს უფრო ადვილია.

შეეშვი ამ ამოცანას მე მგონი დროს გაკარგვინებს. მე დამაკარგვინა.
ეს დრო კოდის წერაში დახარჯო უკეთესია.
რაც მეტ კოდს დაწერ ფიზიკურად მითუფრო მალე ისწავლი.
* * *
აი კიდევ

https://gist.github.com/fabiobatalha/5404977
ეს ჩემი კოდი არაა
* * *
ეხლა გადავწერე და ყველა ტესტი გაიარა

CODE

import copy


class SavedText:
  def __init__(self):
     self.saved = []

  def save_text(self, obj):
     self.saved.append(copy.copy(obj.text))

  def get_version(self, version):
     return self.saved[version]


class Text:
  def __init__(self):
     self.text = []
     self.font_set = False

  def set_font(self, font):
     self.font_tag = ('[%s]') % font

     if not self.font_set:

        self.text.insert(0,self.font_tag)
        self.text.append(self.font_tag)
        self.font_set = True
     else:
        self.text[0] = self.font_tag
        self.text[-1] = self.font_tag

  def show(self):
     return ''.join(self.text)

  def write(self, text):
     if self.font_set:
        self.text.insert(-1, text)
     else:
        self.text.append(text)
  def restore(self, saver):

     self.text = saver

* * *
აი ეს უკვე ნაღდად უნდა დამილაიქონ.

მეც მომწონს.

Posted by: AnEeEeE=]] 12 Mar 2019, 09:12
NinjaRacer
QUOTE
@staticmethod

აი ეს რას ნიშნავს?

პ.ს გავასწორე ჩემი კოდი ვერჟონს წინ სტრინგი დავუწერე და იმუშავა

You're on your way to a board game convention. Chances are there’ll be some stiff competition, so you decide to learn more about dice probabilities since you suspect you'll be rolling a lot of them soon.

Typically, when using multiple dice, you simply roll them and sum up all the result. To get started with your investigation of dice probability, write a functi0n that takes the number of dice, the number of sides per die and a target number and returns the probability of getting a total roll of exactly the target value. The result should be given with four digits precision as ±0.0001. For example, if you roll 2 six-sided dice, the probability of getting exactly a 3 is 2/36 or 5.56%, which you should return as ≈0.0556.

distribution
For each test, assume all the dice are the same and are numbered from 1 to the number of sides, inclusive. So a 4-sided die (D4) would have an equal chance of rolling a 1, 2, 3 or 4. A 20-sided die (D20) would have an equal chance of rolling any number from 1 to 20.

Tips: Be careful if you want to use a brute-force solution -- you could have a very, very long wait for edge cases.

Input: Three arguments. The number of dice, the number of sides per die and the target number as integers.

Output: The probability of getting exactly target number on a single roll of the given dice as a float.
probability(2, 6, 3) == 0.0556 # 2 six-sided dice have a 5.56% chance of totalling 3
probability(2, 6, 4) == 0.0833
probability(2, 6, 7) == 0.1667
probability(2, 3, 5) == 0.2222 # 2 three-sided dice have a 22.22% chance of totalling 5
probability(2, 3, 7) == 0 # The maximum you can roll on 2 three-sided dice is 6
probability(3, 6, 7) == 0.0694
probability(10, 10, 50) == 0.0375

აი ეს საინტერესოა როგორ უნდა გაკეთდეს user.gif როგორ უნდა დავწერო კოდი რომელიც განსაზღვრავს შესაკრებთა რაოდენობას

Posted by: NinjaRacer 12 Mar 2019, 12:57
QUOTE
აი ეს საინტერესოა როგორ უნდა გაკეთდეს   როგორ უნდა დავწერო კოდი რომელიც განსაზღვრავს შესაკრებთა რაოდენობას


CODE

The sum of two dice:

     1  2  3  4  5  6
   +-------------------
 1 | 2  3  4  5  6  7
 2 | 3  4  5  6  7  8
 3 | 4  5  6  7  8  9
 4 | 5  6  7  8  9 10
 5 | 6  7  8  9 10 11
 6 | 7  8  9 10 11 12

36 კომბინაციაა სულ.

ვთქვათ 3 შეიძლება სულ 2-ჯერ დაჯდეს
4- 3-ჯერ და ა.შ

გაყავი ეს კომბინაციების რაოდენაბოზა და ვუალა.

პრობაბილითი არის რაღაცის მოხდენის შანსი გაყოფილი/რაოდენობაზე რამდენჯერაც შესაძელებელია რომ მოხდეს. ანუ პიქირქით. რაოდენობა შანსზე

როცა ეგეთ ამოცანებს გაძლევენ + გაძლევენ იმდენად გასაგებ პირობას და + სურათებს და + ვიკიპედიას გვერდს ან რამე ეგეთს რომ წაიკითხო რომ ამოხსნა შესაძლებელი ხდება და მარტივიც თუ კარგად შეისწავლი პირობას.

Posted by: AnEeEeE=]] 12 Mar 2019, 12:59
NinjaRacer
ეგენი ვიცი კაცო რაც არი, კოდის დაწერაა პრობლემა თორე ამოცანის ამოხსნა კი ვიცი lol.gif მანდ არი შემთხვევები მარტო ორი კამათელის შემთხვევა არაა, შეიძლება სმაი იყოს ან ოთხი და კოდში ეგ როგორ უნდა ასახო ეგაა საინტერესო

Posted by: NinjaRacer 12 Mar 2019, 13:01
QUOTE
ეგენი ვიცი კაცო რაც არი, კოდის დაწერაა პრობლემა თორე ამოცანის ამოხსნა კი ვიცი  მანდ არი შემთხვევები მარტო ორი კამათელის შემთხვევა არაა, შეიძლება სმაი იყოს ან ოთხი და კოდში ეგ როგორ უნდა ასახო ეგაა საინტერესო


მე პირადად ამოცანის პირობას რომ ვგებულობ კარგად მერე მიადვილდება უფრო კოდში გადაყვანა.

ამიტომ აგიხსენი. პირობაშივე გეუბნებიან როგორც უნდა დაწერო. ამიტომ გიხსნიდი პირობას.

Posted by: AnEeEeE=]] 12 Mar 2019, 13:08
NinjaRacer
QUOTE
ამიტომ აგიხსენი. პირობაშივე გეუბნებიან როგორც უნდა დაწერო. ამიტომ გიხსნიდი პირობას.


კაი რამე იდეა თუ გექნება მითხარი user.gif

Posted by: NinjaRacer 12 Mar 2019, 13:18
AnEeEeE=]]

რაც დაგიხატე ეგ რას გაგობნებს. პითონის მონაცემთა რომელ სრუქტურას?
მე მაგალითად 2 განზომილებიან მასივს მაგონებს...

CODE

The sum of two dice:

    1  2  3  4  5  6
  +-------------------
1 | 2  3  4  5  6  7
2 | 3  4  5  6  7  8
3 | 4  5  6  7  8  9
4 | 5  6  7  8  9 10
5 | 6  7  8  9 10 11
6 | 7  8  9 10 11 12



მასივს ხო? პირობაში რა გითხრეს რო brute force არ გამოიყენოო. ანუ პირდაპირ მიგანიშნეს რომ data structure გამოიყენეო ისეთი რომელში ყველა არსებული კომბინაცია გექნება. ფორმულაც გითხრეს.

დალშე ეს უკვე კოდში უნდა მოიფიქრო როგორმე გადაიყვანო.

Posted by: AnEeEeE=]] 12 Mar 2019, 13:24
NinjaRacer
QUOTE
მასივს ხო? პირობაში რა გითხრეს რო brute force არ გამოიყენოო. ანუ პირდაპირ მიგანიშნეს რომ data structure გამოიყენეო ისეთი რომელში ყველა არსებული კომბინაცია გექნება. ფორმულაც გითხრეს.

ორ კამათელზე ადვილია, როცა 10 ია რთულია უკვე

Posted by: NinjaRacer 12 Mar 2019, 13:26
AnEeEeE=]]
ხო მამენტ არ მიფიქრია არ მინდა მთელი დღე მაგას დავუთმო.

თუმცა პირობაზე დაფიქრებით იწყება.
შენ არ გაქვს რამე იდეა?

Posted by: AnEeEeE=]] 12 Mar 2019, 13:28
QUOTE
შენ არ გაქვს რამე იდეა?

სიმულაციების გაკეთება იქნებოდა ადვილი მარა ზუსტი პასუხი არ დაჯდება user.gif

Posted by: NinjaRacer 12 Mar 2019, 13:31
AnEeEeE=]]
აი მართლა

არუნდა ამდენი ფიქრი რა

http://www.mamicode.com/info-detail-2348094.html

ლისტებით გააკეთა ადვილად.


პ.ს collections მოდულე Counter-ი <3 ითვლის ლისტში არსებულ ელემენტს უბრალოდ...

easy

Posted by: AnEeEeE=]] 12 Mar 2019, 13:45
NinjaRacer
შენ რაიცი მაგან რამდენი იფიქრა lol.gif

Posted by: NinjaRacer 12 Mar 2019, 14:07
QUOTE
შენ რაიცი მაგან რამდენი იფიქრა 

რაც დავწერე თავიდან ზუსტად იგივე იდეაა.

და კოდის წერას რამდენი ხანი მოუნდა ეგ ნაღდად არ ვიცი. შენსავით idle-ში თუ წერდა დიდხანს მოუნდებოდა lol.gif

p.s გულთმისანი არ ვარ.

+ 1 საათი მეფიქრა იგივეს დავწერდი. დაჟე ბევრად უკეთესად.

დააყენე pycharm-ი vik.gif




ჰო numpy რო გამოიყენო ზე სწრაფად იმუშავებს. C-ში არის ეგ დაწერილი და ზიპინით მუშაობს.
factorial და math უნდა გამოიყენო შენ.

შენს ადგილზე რამე მათემატიკური გზით დავწერდი. linear რომ არ ყოფილიყო.
დიდი მასივები თუ იქნება შენელდება. ჩემი მეთოდი ექსპონენტურად ნელი იქნება.

https://stackoverflow.com/questions/50690348/calculate-probability-of-a-fair-dice-roll-in-non-exponential-time

არ არის ეს სასაცილო ამბავი. სერიოზული პრობლემაა. პრაკტიკულიც ძალიან და მნიშვნელოვანიც.
რომელსაც რეალურად გამოიყენებ სადმე. ამიტომ სწორად ამოხსნა ჯობია.
* * *
https://codereview.stackexchange.com/questions/212930/calculate-probability-of-dice-total

აი ეს გამოგდაგება.

50ms ქვემოთ იღებ პასუხს რაც
ძალიან კარგია.

Posted by: AnEeEeE=]] 12 Mar 2019, 16:39
NinjaRacer
CODE

   pro3 = [x + y for x in pro1 for y in pro1]
    for i in range(dice_num - 2):
        pro3 = [x + y for x in pro1 for y in pro3]
    return pro3


აი ეს ნაწილი ვერ მოვიფიქრე როგორ გამეკეთებინა, კარგად აქვს გაკეთებული

Posted by: NinjaRacer 12 Mar 2019, 16:43
AnEeEeE=]]
უფრო კარგია functools-იდან product-ის გამოყენება.

https://docs.python.org/2/library/itertools.html#itertools.product

ეგ მაინც ნელი იქნება. ლისტებზეა დაფუძნებული ყველა ეგენი. ერთის გარდა.

ეს პროდუქტი გენერატორს იყენებს და ბევრად სწრაფი იქნება.

გენერატორო პროსტა ლისტ კომპრეჰეშენზე ბევრად სწრაფი იქნება და ნაკლებ მეხსიერებასაც დაიკავებს ბევრად.
მაგრამ მაინც ძალიან დიდი რიცსვი რომ მისცე მაგალითად 100 კამათელი 100 მხარით. მეხსიერებას გაადავსებს.
ჩეკიოს კი ეყოფა მაგრამ ზოგადად
რამე ალგორითმი ჯობია დაწერო.

კარგად ვერ ჩავწვდი და არც გამირჩევია. მაგრამ მგონი ესაა ყველაზე კარგი
https://codereview.stackexchange.com/a/213000

Posted by: AnEeEeE=]] 12 Mar 2019, 16:55
NinjaRacer
QUOTE
ეგ მაინც ნელი იქნება. ლისტებზეა დაფუძნებული ყველა ეგენი. ერთის გარდა.

ეს პროდუქტი გენერატორს იყენებს და ბევრად სწრაფი იქნება.

კი ნელია, უბრალოდ არ გამივლია გენერატორები და არ ვჩქარობ ჯერ, მივალ მადამდეც

QUOTE
კარგად ვერ ჩავწვდი და არც გამირჩევია. მაგრამ მგონი ესაა ყველაზე კარგი
https://codereview.stackexchange.com/a/213000

ვნახავ ამასაც

Posted by: NinjaRacer 12 Mar 2019, 17:02
AnEeEeE=]]
გენერატორებით თუ გააკეთებ. არ იქნება. ნელი.

QUOTE
კი ნელია, უბრალოდ არ გამივლია გენერატორები და არ ვჩქარობ ჯერ, მივალ მადამდეც


გენერატორებზე არის დაფუძნებული async რაც არის პინთონის ნახევარზე მეტი.
multiprocessing, threading და asyncio.

ამიტომ გენერატორები არის ძალიან მნიშვნელოვანი. ამ ამოცანასაც კი ამოვხსნი ლისტები+ გენერატორებით და იქნება 1 წამზე ნაკლები ამის გამოთვლის დრო.

ამიტომ გენერატორები არის ძააააააააააააააააააააააააააალიან მნიშვნელოვანი რამ.

მანდ ჩეკიოზე ვინც არიან უმეტესობას ენა აქვთ დამუღამებული. ჩვენ რაზეც დროს ვკარგავთ ბევრს იმათმა იციან როგორ უნდა გააკეთონ და ჰობის პონტში უზიან.

ამიტომ თოერიის ნაცვლად მგონი ჯობია უბრალოდ ადგე და აირჩიო საკითხები ვთქვათ twisted გაარჩიო და დაწერო ბევრი რამე თვისთიდზე. მერე threading, მერე ვებ სოკეტებზე. ნახო ენის რა ტექნოლოგიებს იყენებს თვისთიდი და მერე ოფიციალურ პითონის დოკუმენტაციაში წაიკითხო მაგაზე + იუთუბზე ნახო რამე პრაქტიკული ტუტორიალი რაც დაგამუღამებინებს ამ საკითხს.

და არ გეგონოს რომ ეს თემები სხვა პროგრამირების ენებში არაა. ამ ყველაფერს იყენებს ყველა ენა. სახელები აქვთ სხვადასხვა.
ამიტომ ჩათვალე რომ ადვანსდ საკითხებია და ნაწილ-ნაწილ უნდა მიადგე და ნაბიჯ-ნაბიჯ გაიარო. აქამდე რაც ვისწავლეთ იყო ენის 30%-ი და ყველაზე მარტივი ნაწილი.

ჩეკიო მაგას ვერ გასწავლის. უკვე დამოუკიდებლად უნდა იკვლიო და წერო და რაც გაქვს დამუღამებული ეგ თემები აკეთო ჩეკიოზე უკვე სკილების ალესვის მიზნით.
* * *
twisted ან tornado ცუდი მაგალითია.

თუ network programming არ გიანტერესებს და ცოტა უნდა ერკვეოდე კიდეც ნეტვორქში.
https://www.amazon.com/exec/obidos/ASIN/1449326110/jpcalsjou-20

აი რაც გაინტერესებს იმ განხრით უნდა წახვიდე რა. სტატიკა და ML თუ გაინტერსებს წიგნები აიღე პითონის მაგ თემაზე და გაყევი. ჩეკიო პერიოდულად ამოცანები აკეთე იმ თემებზე რაც გაიარე უკვე და ეგრე.

მე ძალიან მაინტერესებს network programiing რადგან ბევრ რამეს მოიცავს.
პარალელიზმი. ასინქრონულობა. yield, გენერატორები და სხხვადასხვა ფრეიმვორკები.

მაგრამ რაც არ უნდა გაინტერესებდეს. coroutine-ები რა არის. iter პროტოკოლი როგორ მუშაობს პითონში და ეგეთი რაღაცეები აუცილებლად გამოგადგება. მითუმეტრეს თუ აპირებ მსგავსი ტიპის ამოცანების ამოხსნას.
სადაც ამოცანები რთულდება გიწევს, წარმადობაზე და რესურსების მაქსიმალურად გამოყენებაზე ფიქრი.

არსებობს ენის რაღაც ბაზისები რომელის სიღრმისეულად გარკვევა დაგეხმარება. ყველაფერს ერთად ვერავინ ისწავლის. მაგრამ yield iter და ა.შ კორუტინები, დეკორატორები და ა.შ უნდა აითვისო.

ცოდოები ვართ ყველაფერს ვერ მივედებით. ამიტომ შენ განხრას უნდა მიაწვეე. მაგრამ იმ ბაზისების გარკვევა რაზეც ენა მუშაობს. მე მგონი ძალიან წაგადგება.
* * *
იმენა შენთვისაა

ეს ერთი

https://www.datacamp.com/courses/python-data-science-toolbox-part-2


და ეს მეორე
https://www.datacamp.com/community/tutorials/python-iterator-tutorial

Posted by: AnEeEeE=]] 13 Mar 2019, 12:35
NinjaRacer
QUOTE
გენერატორებით თუ გააკეთებ. არ იქნება. ნელი.

აჰა გავერკვიე და ეხლა ვცდილობ დავწერო ეგ პროგრამა დდ ჯერჯერობით არ გამომდის lol.gif

Posted by: NinjaRacer 13 Mar 2019, 14:39
AnEeEeE=]]
ყველა ფუნქცია სადაც yield არის გენერატორია.
https://wiki.python.org/moin/Generators

ეს კორუტინებზეა
https://effectivepython.com/2015/03/10/consider-coroutines-to-run-many-functi0ns-concurrently/
http://book.pythontips.com/en/latest/coroutines.html

აი ესენი კი არავის გამოსდის.


https://habr.com/ru/post/337420/

http://lucumr.pocoo.org/2016/10/30/i-dont-understand-asyncio/
https://www.aeracode.org/2018/02/19/python-async-simplified/


აი რო შესცეს ამ ფიბონაჩის.

CODE

def fib():
   a, b = 0, 1
   while True:
       yield a
       a, b = b, a+b


ასე იწერება. მარტივად.

არც რეკურსია გინდა არც ლუპები და არც დიდი კოდი. თან პახოდუ უსწრაფესია და არც მეხსიერებს ტვირთავს არც პროცესორს და შეუძლია უსასრულო რიცხვების სიმრავლესთან მუშაობა. უსასრულოდ.

ჰოდა ზემოთ ჩამოთვლილიდან გამომდინარე დასვკა არის ის რომ სხვა ყველაფერი დანარჩენი არის არასწორი.

ჰოდა ენის ეს ფიჩა არ იცოდე. ბევრს კარგავ.

როგორც ფიბონაჩის მაგალითიდან მიხვდებოდი ბევრი რამე შეუძლია კორუტინას.
შესაბამისად როგორც მიხვდებოდი. ეს ფიჩა გატენეს იმდენ რამეში და იმდენი რამე დააშენეს ზედ
რომ ენა გახდა ბევრად უკეთესი. ამიტომ
პრობაბილითის ამოხსნა კი კარგია მაგრამ კორუტინაც უნდა გესმოდეს. რადგან გაძლევს ძალიან დიდ შესაძლებლობებს და გარდა მაგის ძალიან მნიშვნელოვანია მართლა. რადგან იძლევა საშუალებას გვერდი აუარო პითონის რთულ ნელ და არაეფიშენთ ფიჩებს და წერო ძალიან იოლი სწრაფი კარგი კოდი. რაც მთავარია ასინქრონული დაუბლოკავი კოდი.

რაც იმას ნიშნავს რომ სანამ შენი კორუტინა ითვლის შენ მანამდე სხვა კორუტინებსაც შეგიძლია მიმართო.

ჩვეულებრივი ფუნქციის შემთხვევაში. პითონი იბლოკება. ელოდება სანამ შენი ფუნქცია პასუხს დააბრუნებს არაფერი არ ხდება. მტლიანი პროგრამა გაჩერებულია. რაც არის კატასტროფულად ნელი თუ შენ პროგრამას 1 -ზე მეტი დავალება აქვს შესასრულებელი.
მაგალითად უნდა დაიკავშირდეს 10 კლიენტი ამ 10 კლიენტისთვის მონაცემთა ბაზას უნდა დაუკავშირდეს შენი პროგრამა მოძებნოს ინფორმაცია. გამოთვალოს მათთვის რაიმე და დაუბრუნოს პასუხი.

ჩვეულებრივი კოდის დაწერის შემთხვევაში ეს ყველაფერი იქნებოდა დაბლოკვადი დანელი. ანუ თითოეულ დავალებას თანმიმდევრულად ასრულებს + ელოდება სანამ 1 არ მორჩება მეორეს არ იწყებს.
კორუტინებით ყველაფერს ერთად აკეთებს პარალელურად თითქმის.

ნამდვილი პარალელიზმი ვერ ექნება პითონს რადგან თვითონ არის 1 პროცესში გაშვებული და ერთი პროცესი მართავ მთელ კოდს. ამიტომ ეს ფიჩები არის პითონისთვის ყველაზე მნიშვნელოვანი ფიჩები.
რადგან მთავარ სისუსტეს გვერდს უვლის. მთავარი სისუსტე კი არის რომ პითონი გაშვებულია 1 პროცესორზე მარტო. 1 პროცესში.. შენ პროცესორს 8 ბირთვის რომ ქონდა 1 გამოიყენებს მარტო და მთელ კოდს მიყვება ზემოდან ქვემოთ ნამიმდევრულად. ასინქრონული კოდის შემთხვევაში კი გაქვს საშუალება. გააპარალელო ამოცანები, არ და ელოდო ნელ ფუნცქიის პასუხს და ამოშავო პროცესორი მთელი დატვირთვით. ეს არის ყველაზე მნიშვნელოვანი რამ ამ ენაში...
* * *
მოკლედ guido van rossum გაგონილი გექნებათ. პითონის ავტორია. ჰოდა სადღაც 2015 წელს გაჭედა ამ ეისინქზე და მთელი თავის დრო ამ საკითხს დაუთმო და აქეთ წაიყვანა დეველოპმენტი.

ჰოდა შექმნა ძალიან კარგი ტუტორიალი

https://www.youtube.com/watch?v=f1cz9Ttq3nU&list=PLpEcQSRWP2IjVRlTUptdD05kG-UkJynQT&index=2


Posted by: RexxaR 14 Mar 2019, 13:31
tkinter-ში ვის გაქვთ გამოცდილება

მაინტერესებს საიკუეთესო პრაქტიკები თუ როგორ უნდა გაკეთდეს რომ ავტორიზაციის ფორმა იყოს პირველი და შემდეგ მთავარი აპლიკაცია.

როგორ დაწერდით OOP სტილში

Posted by: NinjaRacer 14 Mar 2019, 19:37
RexxaR
კარგი სიტყვა ახსენე ეხლა. საუკეტესო პრაქტიკები. best practices ასე იგუგლება. ერთ ძალიან კარგი პროგრამისტი თანამშრომელი მყავდა სულ ეგ ეკერა პირზე). აწი რამეს რომ ვსერჩავ best practices ავტომატურად ვაინსერტებ საძიებო ველში)

პარქტიკის და გამოცდილების რა გითხრა. მაგრამ აი რაღაც გავაკეთე. რატო გავაკეთე საბკლასით ვერ გეტყვი.
ალბათ აქვს თავის მეთოდები კარგი, რომელიც ჯერ არ მინახავს. ექნება ფანჯარის შექმნაზე და ა.შ აბსტრაქტ მეთოდები რომელიც სანახავია შეიძლება სასარგებლო იყოს.

CODE

from tkinter import *


class MainWindow(Tk):
   def __init__(self, title='User Authentication'):
       Tk.__init__(self)

       self.create_window()
       self.title(title)

   def create_window(self, geo='400x340'):
       self.geometry(geo)
       self.password_entry()
       self.create_button()


   def password_entry(self):
       self.user_box = Entry(self)
       self.user_box.grid(row=30, column=3, sticky='ES')
       self.user_box.insert(0, 'Enter Username')
       self.user_box.bind('<FocusIn>', self.clear_pass)
       self.user_box.bind('<FocusOut>', self.repopulate)
       self.user_box.bind('<Return>', self.login)

   def clear_pass(self, event):
       if self.user_box.focus_get() and self.user_box.get() == 'Enter Username':
           self.user_box.delete(0, END)

   def repopulate(self, event):
       print('repopulating defaults')
       if self.user_box.focus_get() and self.user_box.get() == '':
           self.user_box.insert(0, 'Enter Username')

   def create_button(self):
       btn = Button(self, text='Login', command=self.login)
       btn.bind('<Return>', self.login)
       btn.grid(row=30, column=20, sticky='NESW')

   def login(self, event):
       print('Impletement Logic here')
       print('User:\t', end='')
       print(self.user_box.get())






win = MainWindow()


mainloop()


Posted by: RexxaR 14 Mar 2019, 23:29
NinjaRacer

აუ რაღაც მაქვს გასაკეთებელი და ხანდახან რომ ჩამერთვება ეს პერფექციონიზმი მყინავს ადგილზე

აი რამოდენიმე დღეა იმას ვფიქრობ რომელი ჯობია Tk() შვილად შევქმნა მთავარი აპლიკაციის კლასი თუ გარეთ დავტოვო და როგორც სტანდარტულად შვებიან Frame() კლასზე დავამყნო

თუ საერთოდ არ გავაკეთო ინჰერიტენსი არსაიდან და მთავარ კლასში, ცვლადში დავაინსტანტიეიტო ტკინტერი


მოკლედ მინდა ასეთი რაღაც.

პროგრამამ გაშვებისას ავტორიზაციის ფორმა აჩვენოს და მერე მთავარი ფრეიმი რა

მოკლედ ვერაფრით დავალაგე სტრუქტურა გონებაში რომელიც იდეალური იქნებოდა

პროგრამის მთავარი კლასი ხომ ლოგიკურად ტკინტერის რუთზე უნდა იყოს
არადა პროგრამა ასევე ლოგიკურად კიდევ უფრო ფართო ცნებაა რომელიც გრაფიკულ გარსსაც მოიცავს ამიტომ არ უნდა იყოს პირდაპირ ტკინტერის რუთის შვილი



რა მზეობებზე ვფიქრობ არა?
cry.gif cry.gif

Posted by: NinjaRacer 15 Mar 2019, 01:54
RexxaR
QUOTE
რა მზეობებზე ვფიქრობ არა?

საერთოდ არა. საინტერესოა. პროცესი მე პირადად მისწორდება)


QUOTE
აუ რაღაც მაქვს გასაკეთებელი და ხანდახან რომ ჩამერთვება ეს პერფექციონიზმი მყინავს ადგილზე

კარგია თუ მარტო ეგ გყინავს smile.gif პერფექციონიზმი, შორს წაგიყვანს. მაგრამ ზოჯგერ კონტრპროდუქტიულიცაა და დაწყება გიჭირს.

დიზაინის სტადიაზე თუ ხარ. რა პრობლემაა.

ეგრე ვარ როცა რამე დავალებას მომცემენ უცებ გავაკეთებ და მერე ტვინს ვიბურღავ იქნება უკეთესი გზები არსებობს და ვერ ვისვენებ smile.gif ღამე შეიძლება მაგაზე ფიქრში გავატარო) ერთი 2 დღე ვიფიქრებ და თავიდან ვწერ. კლასებით მეტი სტრუქტურა ექნება კოდს. ჩემი აზრით უფრო წაკიხთვადი და მართვადი ხდება და კოდის რეფაქტორზეც არ იწვალებ როცა დაგჭირდება.

RexxaR

https://pythonprogramming.net/organizing-gui/?completed=/embedding-live-matplotlib-graph-tkinter-gui/

აგერ აქვს ისე. შენ რომ ამბობ. Tk-ს შვილია და შემდეგ ფრეიმს აინსტანსებს კლასში და ამ კონტეინერში ტენის ყველაფერს. რას ერჩი ნორმალურია.

მე პირადად არ მესიამოვნა კლასის გარეთ რომ იყო ყველაფერი. ლამაზად არ ჩანს და მგონია რო პახოდუ შრომატევადია უფრო.
ყველაფერი ობიექტია ობიექტია. ფაჯანრაც, ღილაკიც, ლიფტიც და ა.შ. ჰოდა ბარემ იყოს კლასში ხო?

აი პირველი ფანჯარა როგორ უნდა აჩვენოს ავტორიზაციის და მერე როგორ გააგრძელოს აი როგორ უნდა ქნა საიანტერესო იქნება. მეც ვერ მოვიფიქრე. უფრო სწორედ არასდროს მიქნია. საინტერესო იქნება რას იზამ.

Posted by: che_che_n 15 Mar 2019, 12:19
RexxaR

ორი ფანჯარა შექმენი, ერთი პაროლის შესაყვანად მეორე მთავარი. მთავარი ფანჯრის შექმნისთანავე სანამ რამე ვიჯეტს დაამატებ გაუკეთე withdrawn ( window.withdrawn () ) ეს გააქრობს მთავარ ფანჯარას და უსერს არ შეეძლება რომ რამე გააკეთოს მანდ.

CODE

class MainWindow(Tk):
  def __init__(self, title='User Authentication'):
      Tk.__init__(self)

      self.create_window()
      self.withdrawn()
      self.title(title)


პაროლის ფანჯრის ენთრის გაუკეთე კონფიგურაცია show=*, ესე აღარ გამოაჩენს შეყვანილ ტექსტს.

CODE

  def password_entry(self):
      self.user_box = ttk.Entry(self, show='*')


აუტენტიკაციის გავლის შემთხვევაში მოკალი პაროლის ფანჯარა და მთავარს გაუკეთე window.deiconify() რაც გამოაჩენს მთავარ განჯარას.

CODE

  def login(self, event):
      mainWindow.deiconify()


ხო და ttk widget_ები შექმენი, რომ native look ქონდეს ttk.Entry(parent)

https://tkdocs.com/tutorial/index.html

Posted by: NinjaRacer 15 Mar 2019, 19:43
che_che_n
up.gif


Rexxxar რაც თქვა კიდევ. frame-ებიც უნდა ჩიატენოს withdrawn/deiconify ამ ფრეიმზე უნდა გაკეთდეს მგონი ხო? ან კლასშივე self-ის ახალი ინსტანსი გააკეთოს რამე ატრიბუტში. მეორე ფანჯარისთვის. სწორი როგორ იქნება ?

აი კარგი ვქენი რომ Tk-ს შვილი გავაკეთე. რადგან self-ისგან შეუძლია ახალი ფანჯარის შექმნა პირდაპირ. კლასში კიდევ ახალი კლასი რომ არ დაადეკლაირორს და ბევრი nesting-ი არ მოუწევს.
self.new_win = self და ეგაა.

და კიდევ


<Return> უნდა მიებას ან ქოლბექი ან currying უნდა გაკეთდეს ან მაგისთვის ცალკე მეთოდი უნდა დაიწეროს
რადგან კლავიატურის ივენთებს ავტომატურად event პარამეტრები გადაეცემა და ღილაკებს არა. მე კიდევ ორივე handleEvent-ზე მქონდა დასმული. თუ რაც ქვია.

კიდევ show='*' კარგი იყო დანარჩენს შეკრავს და რაღაც გამოუვა up.gif
საინტერესო იყო. მეც აღვიდგინე Tk-ი ცოტა.

Posted by: AnEeEeE=]] 18 Mar 2019, 13:54
NinjaRacer
CODE
def checkio(number):
   listfornumbers=[]
   FIRST_TEN = ["one", "two", "three", "four", "five", "six", "seven",
            "eight", "nine"]
   SECOND_TEN = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
             "sixteen", "seventeen", "eighteen", "nineteen"]
   OTHER_TENS = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy",
             "eighty", "ninety"]
   HUNDRED = "hundred"
 
   n = number // 100
   t = [FIRST_TEN[n-1], HUNDRED] if n > 0 else []

   n = (number // 10) % 10
   t += [OTHER_TENS[n-2]] if n > 1 else []

   n = number % (10 if n > 1 else 20)
   t += [(FIRST_TEN+SECOND_TEN)[n-1]] if n > 0 else []
   answer=' '.join(t)
   listfornumbers.append(answer)
print(checkio(45))
   

რო გეცლება ამ კოდს შეხედე რა, ვერ გავიგე ბოლო ტ სადაც წერია FIRST_TEN და SECOND_TEN დან როგორ არჩევს რომელი უნდა აიღოს cry.gif

Posted by: NinjaRacer 18 Mar 2019, 16:16
AnEeEeE=]]
ვერც მე გავიგე.
აჯამებს მგონი. თუ N დადებიტითია.

Posted by: RexxaR 18 Mar 2019, 17:30
QUOTE (NinjaRacer @ 18 Mar 2019, 16:16 )
AnEeEeE=]]
ვერც მე გავიგე.
აჯამებს მგონი. თუ N დადებიტითია.

აერთიანებს ლისტებს

პლიუს ოპერატორით 1 ლისტი იქმნება

[1, 2] + [3, 4] = [1, 2, 3, 4]


QUOTE
რო გეცლება ამ კოდს შეხედე რა, ვერ გავიგე ბოლო ტ სადაც წერია FIRST_TEN და SECOND_TEN დან როგორ არჩევს რომელი უნდა აიღოს 


და მერე ამ გაერთიანებული ლისტიდან ინდექსით იღებს ელემენტს ჩვეულბერივად

Posted by: AnEeEeE=]] 18 Mar 2019, 20:25
RexxaR
გასაგებია, მადლობა 2kiss.gif

Posted by: NinjaRacer 19 Mar 2019, 03:08
space shooters დაწერა ვებში რთული იქნება?
http://www.lessmilk.com/tutorial/pixel-art-tips


Posted by: robox 1 Apr 2019, 12:33
გამარჯობა.
გვჭირდება ორი დამწყები პითონშიკი ჯანგოზე სამუშაოთ.
ცვ გააგზავნეთ აქ db@innotec.ge

Posted by: Definitely_Maybe 17 Apr 2019, 09:39
მცირე იძულებითი შესვენების მერე დავუბრუნდი ისევ პითონს. ვიხსენებ ძველებს და ამ მარტივმა ამოცანამ სისხლი გამიშრო. იქნებ რამე მირჩიოთ.

Given a string that may or may not contain the letter of interest. Print the index location of the second occurrence of the letter f.
If the string contains the letter f only once, then print -1, and if the string does not contain the letter f, then print -2.

ეს დავწერე მაგრამ თუ f f მიყოლებით არაა არ მუშაობს .
CODE

s=input()
if s.find('f')==-1:
   print ('-2')
elif s.find('ff')==-1:
   print ('-1')
else:
   print (s.find('ff')+1)

Posted by: AnEeEeE=]] 17 Apr 2019, 10:24
Definitely_Maybe

CODE
s=input()

if s.find("f") == -1:
   print(-2)
elif s.find("f") != s.rfind("f"):
   print(s.rfind("f"))
elif s.find("f") == s.rfind("f"):
   print("-1")


აი ესე კეთდება

Posted by: Definitely_Maybe 17 Apr 2019, 10:59
AnEeEeE=]]

'ffffffffffffffffffffffffffffff' და 'ofofofofofofof' ზე არ მუშაობს,

Posted by: AnEeEeE=]] 17 Apr 2019, 11:17
Definitely_Maybe
QUOTE
ffffffffffffffffffffffffffffff' და 'ofofofofofofof' ზე არ მუშაობს,

აა მეორე უნდა უეჭველი ჩემი კოდი პირველს და ბოლოს ადარებს , მოიცა შევცვლი კოდს

.......


CODE
a = s.find("f")
b = s.find("f", a+1)

if a  == -1:
  print(-2)
elif a != b:
  print(b)
elif a == b:
  print("-1")

Posted by: Definitely_Maybe 17 Apr 2019, 11:32
AnEeEeE=]]
მადლობა მუშაობს,

ეს პასუხი მომცა საიტმა.


CODE
s = input()
if s.count('f') == 1:
   print(-1)
elif s.count('f') < 1:
   print(-2)
else:
   print(s.find('f', s.find('f') + 1))

* * *
არ ვიცოდი ამ მეთოდის სინტაქსი. str.find(str, beg=0, end=len(string))

Posted by: AnEeEeE=]] 17 Apr 2019, 11:38
Definitely_Maybe
QUOTE
არ ვიცოდი ამ მეთოდის სინტაქსი. str.find(str, beg=0, end=len(string))

არც მე ჯავაში ვისწავლე და და დავსერჩე პითონსაც თუ ქონდა დ

Posted by: NinjaRacer 17 Apr 2019, 11:44
არც მე ჯავაში ვისწავლე და და დავსერჩე პითონსაც თუ ქონდა დ


მე ვიცოდი smile.gif
ჯავაში რაც ნახავ სტრინგ მეთოდებს ჩათვალე პითონსაც ექნება მსგავსი ან ზუსტად იგივე.

იგივეა regexp-ებზე.

კიდევ ჯავასაც აქვს super მეთოდი მაგრამ განსხვავდება

Posted by: AnEeEeE=]] 17 Apr 2019, 15:42
QUOTE
a = s.find("f")
b = s.find("f", a+1)

if a  == -1:
  print(-2)
elif a != b:
  print(b)
elif a == b:
  print("-1")

აქ ისე ბოლო ტოლობა არასდროს არ შესრულდება და ამოსაშლელია, და წინა ტოლობაც არ უნდა მარტო ბე უნდა დააბრუნო

CODE

a = s.find("f")
b = s.find("f", a+1)

if a  == -1:
  print(-2)
else:
  print(b)

Posted by: NinjaRacer 1 Jun 2019, 13:04
ამის გაზერპირება მნიშვნელოვანი და საჭირო ყოფილა.
sTrategy Pattern:
CODE

from abc import ABC, abstractmethod
from collections import namedtuple


Customer = namedtuple('Customer', 'name fidelity')


class LineItem:
   def __init__(self, product, price, quantity):
       self.product = product
       self.price = price
       self.quantity = quantity

   def total(self):
       return self.price * self.quantity

class Order:
   def __init__(self, customer, cart, promotion=None):
       self.customer = customer
       self.cart = list(cart)
       self.promotion = promotion

   def total(self):
       if not hasattr(self, '__total'):
           self.__total = sum(item.total() for item in self.cart)
       return self.__total
   def due(self):
       if self.promotion is None:
           discount = 0
       else:
           discount = self.promotion.discount(self)
       return self.total() - discount

   def __repr__(self):
       repr_str = 'Order total: {:..2f} due: {:.2f}>'
       return repr_str.format(self.total(), self.due())

class Promotion(ABC):

   @abstractmethod
   def discount(self, order):
       '''return a discount as a postivie dollar amount'''


class Fidelity(Promotion):
   '''first concrete strategy
   5% discount for customers with 1000 or more points'''

   def discount(self, order):
       return order.total() * 0.5 if order.customer.fidelity > 1000 else 0


class BulkPromo(Promotion):
   '''10% for each LineItem with 20 or more units'''

   def discount(self, order):
       discount = 0
       for item in order.cart:
           if item.quantity > 20:
               discount += order.total() * 0.1
       return discount


class LargeOrderPromo(Promotion):
   '''7% discount with 10 or more distinct items'''

   def discount(self, order):
       distinct_items =  { item.product for item in order.cart }
       if len(distinct_items) > 10:
           return order.total() * 0.7
       return 0



QUOTE
>>> joe = Customer('John Doe', 0)
>>> ann = Customer('Ann Smith', 1100)
>>> cart = [LineItem('banana', 4, .5),
...
LineItem('apple', 10, 1.5),
...
LineItem('watermellon', 5, 5.0)]
>>> Order(joe, cart, FidelityPromo())
<Order total: 42.00 due: 42.00>
>>> Order(ann, cart, FidelityPromo())
<Order total: 42.00 due: 39.90>
>>> banana_cart = [LineItem('banana', 30, .5),
...
LineItem('apple', 10, 1.5)]
>>> Order(joe, banana_cart, BulkItemPromo())
<Order total: 30.00 due: 28.50>
>>> long_order = [LineItem(str(item_code), 1, 1.0)
...
for item_code in range(10)]
>>> Order(joe, long_order, LargeOrderPromo())
<Order total: 10.00 due: 9.30>
>>> Order(joe, cart, LargeOrderPromo())
<Order total: 42.00 due: 42.00>

Posted by: RedShark 11 Jun 2019, 15:28
NinjaRacer
QUOTE
ამის გაზერპირება მნიშვნელოვანი და საჭირო ყოფილა.

არამარტო მაგის. ძირითადი სტანდარტული პატერნები ყველა საჭირო და კარგია... გაზეპირება არ არის აუცილებელი, საკმარისია მაგალითები გეწეროს და გესმოდეს როგორ მუშაობს.

ერთ -ერთი ხშირად გამოყენებადი - Builder

CODE
class Animal:                       # აბსტრაქტული ცხოველი
   legs = 0
   tail = False
   roar = ''

class Mutator:                      # პასუხისმგებელია გამრავლებაზე
   def mutate(self):
       self.animal = Animal()

class Cat(Mutator):                 # კატა
   def create_legs(self):
       self.animal.legs = 4

   def create_tail(self):
       self.animal.tail = True

   def create_roar(self):
       self.animal.roar = "meowww!"

class Dog(Mutator):                 # ძაღლი
   def create_legs(self):
       self.animal.legs = 4

   def create_tail(self):
       self.animal.tail = True

   def create_roar(self):
       self.animal.roar = "woffff!"

class AnimalOwner:                  # ცხოველების მფლობელი
   __mutator = ''

   def set_animal(self, mutator):
       self.__mutator = mutator

   def create_an_animal_for_me(self):
       self.__mutator.mutate()
       self.__mutator.create_legs()
       self.__mutator.create_tail()
       self.__mutator.create_roar()

   def get_animal(self):
       return self.__mutator.animal


if __name__ == "__main__":
   c = Cat()
   d = Dog()
   ao = AnimalOwner()

   ao.set_animal(c)
   ao.create_an_animal_for_me()
   animal = ao.get_animal()
   print(animal.roar)

   ao.set_animal(d)
   ao.create_an_animal_for_me()
   animal = ao.get_animal()
   print(animal.roar)  

Posted by: NinjaRacer 12 Jun 2019, 00:48
RedShark
QUOTE
არამარტო მაგის. ძირითადი სტანდარტული პატერნები ყველა საჭირო და კარგია... გაზეპირება არ არის აუცილებელი, საკმარისია მაგალითები გეწეროს და გესმოდეს როგორ მუშაობს.

ერთ -ერთი ხშირად გამოყენებადი - Builder

ეგ ვიგულისხმე მეც რაც დაწერე.

სულ 20+ რაღაც პატერნია და კარგია გქონდეს არსენალში.
გაზეპირებაც არაა რთული(შინაარსის)

სამწუხაროდ პითონისთვის ცოტა რთულია ამ პატერნების მოძიება (ერთად)

ცოტა ინფორმაციაა ამაზე.

Posted by: RedShark 12 Jun 2019, 01:18
NinjaRacer
QUOTE
სამწუხაროდ პითონისთვის ცოტა რთულია ამ პატერნების მოძიება (ერთად)

აგერ გაჰყევი, ყველა პოპულარულ ენაზეა მაგალითები --> https://ru.wikipedia.org/wiki/Design_Patterns

Posted by: NinjaRacer 12 Jun 2019, 01:21



კი კაია ეგ მადლობა.
აგერ კონკრეტულად პითონის პრობლემატიკაზეა. არ უნდა იყოს ცუდი. კი დავიწყე ყურება და გადასარევია up.gif

RedShark

Posted by: RedShark 26 Jun 2019, 00:11
user posted image

Posted by: @Schizophrenic 26 Jun 2019, 10:41
RedShark
ეგ ციკლიდან არ გამოვა და ვერ გვქონია კარგად საქმე lol.gif lol.gif

Posted by: NinjaRacer 15 Jul 2019, 23:39
https://www.youtube.com/watch?v=4T5Gnrmzjak

მაგარი ძმა სკრიპტი რესტფულ აპიას რა ადვილად ქმნის ფლასკით <3

100 ლაინიც არაა.

Posted by: NinjaRacer 23 Jul 2019, 01:56
user posted image








Posted by: RexxaR 23 Jul 2019, 21:48
QUOTE (RedShark @ 26 Jun 2019, 00:11 )
user posted image

უვიცი biggrin.gif

მუდამ while loop-შია და თუ ოდესმე პუტინი შეიცვალა იმ პიროვნებას გადააყენებს.

მე მგონი ეს რუსების მოგზავნილი აგენტია და პუტინი თუ შეიცვლება მის დაბრუნებას უჭერა მხარს lol.gif

Posted by: C17H19NO3 25 Jul 2019, 15:42
CODE
#!/usr/bin/python3

list = ['ორშაბათი', 'სამშაბათი',
       'ოთხშაბათი', 'ხუთშაბათი', 'პარასკევი', 'შაბათი', 'კვირა']
try:
day = int(input('day = '))

if day == 1:
 print('კვირის პირველი დღე არის', list[0])
elif day == 2:
 print('კვირის მეორე დღე არის',list[1])
elif day == 3:
 print('კვირის მესამე დღე არის',list[2])
elif day == 4:
 print('კვირის მეოთხე დღე არის',list[3])
elif day == 5:
 print('კვირის მეხუთე დღე არის',list[4])
elif day == 6:
 print('კვირის მეექვსე დღე არის',list[5])
elif day == 7:
 print('კვირის მეშვიდე დღე არის',list(6))
else:
 print("გამოიყენეთ რიცხვები 1 დან 7 ს ჩათვლით")
except:
print('გამოიყენეთ რიცხვები 1 დან 7 ს ჩათვლით')


აი ეს ელემენტარული ამბავია და როგორ გააუმჯობესებდით??
რამე მარტივად უფრო რანაირად უნდა იწერებოდეს, სწორ წერას რომ მივეჩვიო

Posted by: @Schizophrenic 25 Jul 2019, 17:14
C17H19NO3
dictionary-თ გააკეთე
ენამები რომ იყოს კაია ასეთი რაღაცეებისთვის გასაკეთებლად

Posted by: unixxx 25 Jul 2019, 19:36
C17H19NO3
@Schizophrenic

https://www.python.org/dev/peps/pep-0435/

Posted by: @Schizophrenic 25 Jul 2019, 19:40
unixxx
არვიცოდი, ჩემით დავწერე ერთხელ რომ დამჭირდა lol.gif lol.gif

Posted by: NinjaRacer 25 Jul 2019, 20:20
CODE

def f(x):
   return {
       'a': 1,
       'b': 2
   }.get(x, 9)

მე ეს მომწონს ყველაზე მეტად.

და თუ იმენა case გინდა.

CODE

def func(string):
   print(string)

class Switch:
   def __init__(self):
       pass

   def first_switch(self, case):
       return {
            '1': func('I am case 1'),
            '2': func('I am case 2'),
            '3': func('I am case 3'),
            }.get(case, func('default'))


switch = Switch()
switch.first_switch('2')


როგორც გიწერია ეგ არის ყველაზე სწორი და სწრაფი გზა. მაგრამ მეტი კოდია.

elif-ებით ჯობია. მარტივია და სწრაფი.
* * *
ყველაზე ჩახლართული და რთული მეთოდი თუ გინდა რომელიც

ზუსტად ერთიერთში სხვა ენების case-ს გაიმეორებს
http://code.activestate.com/recipes/410692/

Posted by: C17H19NO3 26 Jul 2019, 13:44
unixxx
QUOTE
C17H19NO3


https://www.python.org/dev/peps/pep-0435/


კარგია smile.gif დასაწყისთვის იყოს ასე ჯერ ვეწვალო ვწერო ... მერე გავართულებ..

NinjaRacer

ეგ უკანასკნელი ყველაზე მეტად მერთულება ამ ეტაპზე :/ case ვგულისხმობ ..

----------------
ეხლა Flask გავუშვი დავზბორე და რაც თავში კოდი დავწერე ეგ მინდა რომ ვებ ზე ავამუშავო :/ ნეტავ რამე *ლეობებს ხო არ ვაკეთებ biggrin.gif biggrin.gif
* * *
კარგად ჩაიარა ამ ამბავმაც.. გაეშვა სკრიპტი ჯიგრულად smile.gif

Posted by: NinjaRacer 26 Jul 2019, 17:45
C17H19NO3
კარგია მიდი.

მეც გუშინ მთელი დღე ვებრძოლე ფლასკს და დავწერე GSM გაითვეი.
რომელიც ასინქრუნულად უკვაშირდება სოკეტებით serial კონსოლს.
აგზავნის ბრძანებებს ვებიდან და უკან პასუხსაც ვებშივე წერს. თან სრედებში აქვს გაშვებული ეს პროცესები და que-ებსაც იყენებს მესიჯების კოორდინირებისთვის. მარტივი იყო იმიტომ რომ გამზადებული ბიბლიოთეკები და სხვისი კოდი გამოვყენე 98%, მაგრამ მიუხედავად ამისა მომიწია ბევრი რამის გარჩევა. დაჟე 0-დან გადაწერაც ვიფიქრე რაღაც ეტაპზე.



Posted by: C17H19NO3 27 Jul 2019, 22:30
@Schizophrenic
QUOTE
dictionary-თ გააკეთე
ენამები რომ იყოს კაია ასეთი რაღაცეებისთვის გასაკეთებლად


ასეთ რამეს ამბობ??
if elif მაინც იგივე მრჩება, სხვანაირად როგორ იწერება?
user posted image

Posted by: RexxaR 27 Jul 2019, 22:41
QUOTE (C17H19NO3 @ 27 Jul 2019, 22:30 )
@Schizophrenic
QUOTE
dictionary-თ გააკეთე
ენამები რომ იყოს კაია ასეთი რაღაცეებისთვის გასაკეთებლად


ასეთ რამეს ამბობ??
if elif მაინც იგივე მრჩება, სხვანაირად როგორ იწერება?
user posted image

პირდაპირ რო print(week[day]) ქნა არ გინდა?

და წაშლი ყველა იფ ელიფებს

სტრინგი თუ გინდა რო იყოს კიდე წინ str() მიუწერე day-ს

ასე: str(day)

Posted by: @Schizophrenic 27 Jul 2019, 22:44
C17H19NO3
QUOTE
პირდაპირ რო print(week[day]) ქნა არ გინდა?

და წაშლი ყველა იფ ელიფებს

+
ეს ვიგულისხმე

Posted by: C17H19NO3 27 Jul 2019, 23:10

RexxaR
აუ ეგ როგორ ვერ მივხვდი :/ თან წიგნს მივყვები, dictionary ზე რომ მივედი იქიდან გამომდინარე უცბად დავწერე და თურმე აქვე არაა ეგ მამაძაღლი ეგაა smile.gif


Posted by: @Schizophrenic 28 Jul 2019, 00:15
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Posted by: NinjaRacer 28 Jul 2019, 00:23
და import calendar რო დააიმპორტო უფრო მარტივად იზამ smile.gif

Posted by: C17H19NO3 28 Jul 2019, 07:11
QUOTE (NinjaRacer)
და import calendar რო დააიმპორტო უფრო მარტივად იზამ


არაფერში არ მჭირდება, უბრალოდ კოდს ვწერ შესაბამის საკითხზე.. კალენდარსაც კარგად გავეცნობი.
ეხლა math ის ოპერატორებს ვსწავლობ..

რა მაინტერესებს ხოდა, ძალიან ბევრია ყოველშემთხვევაში დასაწყისისთვის, სიმბოლოები, ეს იმპორტები, იმპორტის ოპერატორები.. რაღაც ისეთები რაც საზეპიროებს გავს. ამ ყველაფერს როცა სწავლობდით იზეპირებდით თუ ნელ ნელა პრაქტიკაში დაიხვეწა? user.gif user.gif user.gif



Posted by: NinjaRacer 28 Jul 2019, 11:06
C17H19NO3
math, numpy, random
ეს ბიბლიოთეკები გამომიყენებია და დამამახსოვრდა.

დანარჩენი არაფერს ვიზიპერებ არასდროს.
დაზეპირება რომ შემძლებოდა ახლა უკვე ფროფესორი ვიქნებოდი smile.gif

უფრო სწორედ არაფერი არ უნდა დაიზეპირო. გუგლი და სტაკოვერფლოუ რისთვის არსებობს.
ყველა მეთოდს და ბიბლიოთეკას კიდე ვერ დაიზეპრიებ. უამრავია. standard library-ში რაცაა კიდე ჰო.

ნუ პითონის keyword-ები შეგიძლია დაიზეპრო https://www.w3schools.com/python/python_ref_keywords.asp
რომ ცვლადს არ მიანიჭო სახელი თორე კონფლიქტში მოვლენ.

Posted by: RexxaR 28 Jul 2019, 11:36
C17H19NO3

ზოგადად არაფრის დაზეპირება არ არის საჭირო.

რაც დასამახსოვრებელია პრაქტიკაში ავტომატურად მოვა

რაც მთავარია პრობლემის სწორად დაშლის გზები უნდა დაამუღამო (უმთავრესი სკილია) და გადაჭრის გზების მოძიების უნარი კიდე გუგლი სტაკოვერფლოუ როგორც ზემოთ გირჩიეს

საუკეთესო პრაქტიკებიც მნიშვნელოვანია, თუმცა ზოგადად შენ თვითონ რომ ეჯახირები და გზას იკვლევ ეგეც ძაან მნიშვნელოვანია იმიტო რო ჩემ შემთხვევაში ხშირად მივსულვარ იმ საუკეთესო პრაქტიკების შესაბამის გადაწყვეტამდე და მერე აღმომიჩენია, თუმცა ბევრი რამ მისწავლია ამით რასაც პირდაპირ ვერ გაიაზრებ

Posted by: C17H19NO3 28 Jul 2019, 20:18
QUOTE (NinjaRacer)
უფრო სწორედ არაფერი არ უნდა დაიზეპირო. გუგლი და სტაკოვერფლოუ რისთვის არსებობს.
ყველა მეთოდს და ბიბლიოთეკას კიდე ვერ დაიზეპრიებ. უამრავია. standard library-ში რაცაა კიდე ჰო.



QUOTE (RexxaR)
ზოგადად არაფრის დაზეპირება არ არის საჭირო.


ძალიან კარგი, ზუსტად მაგ გზაზე ვარ მეც smile.gif
წინ ბევრ სირთულეს ვხედავ, რომ გავყვები ხოლმე სხვა მასალებს, რაღაც ძაან არეულად მეჩვენება კოდი :/
ფუნქციებს ვაკეთებ კლასები მიჭირს, და სულ 1 კვირა იქნება რაც ვუზივარ... მამენტ არაა სანერვიულო ვგონებ..

1.Data science / Machine learning
2.Mobile apps
3.Websites
4.Games
5.Hardware / Sensors / Robots
6.scr1pts to automate your work

აქედან ყველაზე ახლოს რომელთან ხართ smile.gif

Posted by: NinjaRacer 28 Jul 2019, 20:22
3,5,6

QUOTE
არაა სანერვიულო ვგონებ..

მეც ვგონებ რომ არაა. არადა სულ ნერვიულობაში ვარ თანაც როგორში :დ

Posted by: RedShark 28 Jul 2019, 20:35
QUOTE
აქედან ყველაზე ახლოს რომელთან ხართ

QUOTE (C17H19NO3)

5.Hardware / Sensors / Robots
6.scr1pts to automate your work

მეხუთეზე პითონი ასე ვთქვათ დამხმარე ენაა (ძირითადად ალგორითმების გასატესტად და სხვადასხვა პროცესების მოდელირებისთვის გამოიყენება), მაგ სფეროში C/C++ - ის გარეშე ბევრს ვერაფერს იზამ.

Posted by: NinjaRacer 28 Jul 2019, 20:56
ხო ნუ მიკროპითონს და რასპბერის სამყაროს თუ არ ჩავთვლით. მანდ ყველაფერს იზამ.
მაგრამ C/C++ ბევრად ჯობია რათქმაუნდა.

Posted by: RedShark 28 Jul 2019, 21:07
QUOTE (NinjaRacer)
ხო ნუ მიკროპითონს და რასპბერის სამყაროს თუ არ ჩავთვლით. მანდ ყველაფერს იზამ.

ყველაფერს ვერა, მხოლოდ სადაც სიჩქარე და უსაფრთხოების მაღალი სტანდარტები არ მოითხოვება, მაგალითად ე.წ. "ჭკვიანი სახლის" ან სათბურების პროექტებში, უბრალო სათამაშო რობოტებში და ა.შ...

Posted by: NinjaRacer 28 Jul 2019, 22:04
RedShark
ნუ ჰო გარდა რაკეტების და უპილოტო რაღაცეების ბევრ რამეში გატენი.

smile.gif
* * *
როცა იაფად გინდა, ძალიან მცირე დროში ეგაა კარგი. სხვადანარჩენისთვის C/C++
* * *
როცა სერიალთან მუშაობთ selinux არ დაგავიწყდეთ თორე შეიძლება 2 დღე ადებაგოთ სანამ თმები ყალყზე არ დაგიდგებათ და ვერ იპოვოთ პრობლემა. შემთხვევით შევეჩეხე ახლა ლოგებში. მთელი დღე შევალიე.მაგის დებაგს თურმე სელინუქსი არ უშვებდა.

Posted by: RedShark 29 Jul 2019, 00:29
QUOTE (NinjaRacer)
როცა იაფად გინდა, ძალიან მცირე დროში ეგაა კარგი. სხვადანარჩენისთვის C/C++

უფრო იაფად როგორ, როცა მიკროპითონის ბორდების ფასი 40+$-დან იწყება?
მაშინ, როცა 32 ბიტიან STM32 - ებს (ARM Cortex M3, M4 ბირთვებზე) ალიექსპრესზე 4+ ლარიდან იყიდი... რაც შეეხება მცირე დროს, არსებობს C++ - ის ძალიან მაგარი ჰაი ლეველ ფრეიმვორკ/რტოსი - MBED ( https://en.wikipedia.org/wiki/Mbed ) რომელსაც თვითონ ARM ანვითარებს და მის ბირთვებზე აგებულ თითქმის ყველანაირ პლატფორმაზე მუშაობს, მ.შ. ამ იაფიან ბორდზეც https://www.aliexpress.com/item/32583160323.html?spm=2114.search0604.3.107.233f4af3KSb4am&ws_ab_test=searchweb0_0%2Csearchweb201602_3_10065_10068_319_10059_10884_317_10887_10696_321_322_10084_453_10083_454_10103_10618_10307_537_536%2Csearchweb201603_52%2CppcSwitch_0&algo_expid=d84952c1-9c2f-478f-af46-b3c19708d33d-18&algo_pvid=d84952c1-9c2f-478f-af46-b3c19708d33d&transAbTest=ae803_4

ნებისმიერ დამწყებს შეუძლია ამ ფრეიმვორკით უამრავი ( https://os.mbed.com/platforms/?_ga=2.113042116.1524189617.1564344328-1622331759.1564344328 ) სხვადასხვა პლატფორმის დაპროგრამება, ისე რომ თითოეულ მათგანზე ასობით გვერდიანი დოკუმენტაციის შესწავლა არ დასჭირდება... აბსტრაგირების დონე აქვს დაახლოებით როგორც არდუინოს, მაგრამ არდუინოსგან განსხვავებით ეს სტანდარტული C++ - ია და არა ვიღაც სტუდენტის უნიჭოდ შეთითხნილი ნიდო-სი, ნიდო-სიპპ, ნიდო-ჯავა ))) და კიდევ, ფრეიმვორკთან ერთად რტოს-იც არის (ბიბლიოთეკის სახით ერთვება ჩვეულებრივ) და პარალელური ნაკადებიც შეგიძლია გაუშვა...


Posted by: NinjaRacer 29 Jul 2019, 00:59
RedShark
იაფად და სწრაფად როცა გინდა smile.gif

ეხლა არსებული რო გადავწერო სიში მაგას დაჭირდება დრო + სის კარგი მცოდნე და პითონით 2 დღეში გამოვაცხობ.
არის პატარა ბორდები უნო და რაღაცეები რომელიც არ ღირს ძვირი.

კი კონტროლერით უფრო იაფია. განსაკუთრებით როცა დიდი რაოდენობაა. მაგრამ მცირე ზომის პროექტებისთვის და რაც ყველაზე მთავარია 2-3 დღეში გაკეთებული პითონი კარგია.


პასუხისთვის კიდე მადლობა smile.gif ზუსტად ეგ ინფო მჭირდებოდა ეხლა gigi.gif
ეხლა თემა რო გამეხსნა მაგაზე ხო ექნებოდა 0 გამოხმაურება.

აქ კი რაღაცეებზე კამათში და მტკიცებაში სიმართლე იწერება.

Posted by: RedShark 29 Jul 2019, 01:07
QUOTE (NinjaRacer)
იაფად და სწრაფად როცა გინდა

ასეთივე სწრაფად იქნება არდუინოთიც და ემბედითაც... მაგრამ არდუინოს ემბედი სჯობია ათასჯერ.

მიკროპითონი არის კომერციული ხრიკი პითონის ფანებისთვის მეტი არაფერი smile.gif)))

Posted by: NinjaRacer 29 Jul 2019, 01:10
QUOTE
ასეთივე სწრაფად იქნება არდუინოთიც და ემბედითაც... მაგრამ არდუინოს ემბედი სჯობია ათასჯერ.

არდუინოებიც გვაქვს კაცო რაღაცა იქნება. უბრალოდ არ ვიცი ეს სი და არც სიპიპი, ვისწავლი მეთქი და არაო. არადა პითონი მაშინ smile.gif

Posted by: robox 29 Jul 2019, 10:13
RedShark
QUOTE

უფრო იაფად როგორ, როცა მიკროპითონის ბორდების ფასი 40+$-დან იწყება?


არ იწყება 40 დოლარიდან,ეგ ოფიციალური ბორდებია თორე აგერ esp8266 და esp32 ზეც არი მიკროპოთონი და საკმაოდ იაფიც ღირს

Posted by: NinjaRacer 29 Jul 2019, 15:06
robox
კარგია რომ დაწერე.



OFFTOPIC:

QUOTE

We found a vulnerable dependency in a repository you have security alert access to.
@gurguration  gurguration/flask_serial_gsm
Known high severity security vulnerability detected in Jinja2 < 2.10.1 defined in requirements.txt.
requirements.txt update suggested: Jinja2 ~> 2.10.1.
Always verify the validity and compatibility of suggestions with your codebase.




გიტჰაბი ასდრეც ამოწმებდა კოდს თუ ეხლა დაიწყეს vulnerability გაქვსო. თანაც სერიოზული.

Posted by: where_security_fails 29 Jul 2019, 20:25
QUOTE (NinjaRacer @ 29 Jul 2019, 15:06 )
robox
კარგია რომ დაწერე.



OFFTOPIC:

QUOTE

We found a vulnerable dependency in a repository you have security alert access to.
@gurguration  gurguration/flask_serial_gsm
Known high severity security vulnerability detected in Jinja2 < 2.10.1 defined in requirements.txt.
requirements.txt update suggested: Jinja2 ~> 2.10.1.
Always verify the validity and compatibility of suggestions with your codebase.





გიტჰაბი ასდრეც ამოწმებდა კოდს თუ ეხლა დაიწყეს vulnerability გაქვსო. თანაც სერიოზული.

adre aramowmebda piradad maqvs sql bagebi nanaxi opensourcebze, sainteresoa ra doneze amowmeben apples dones tudadeben temaaa )

Posted by: NinjaRacer 29 Jul 2019, 21:04
where_security_fails
აპლს დონე არ ვიცი, აი გუგლს ყავს სერიოზული თიმი მაგ კუთხით.

გიტჰაბი ამ სორსებს იყენებს
QUOTE

Data sources for security alerts

GitHub uses the following sources to track vulnerabilities in packages from supported languages:

    MITRE's Common Vulnerabilities and Exposures (CVE) List
    A combination of machine learning and human review to detect vulnerabilities in public commits on GitHub
    Maintainer security advisories on GitHub
    WhiteSource


მონაცემთა ბაზებთან ძაან ჩოგანი ვარ. ინსტრუქცია რომ დამიწერო ინჯექშენსაც ვერ გავაკეთებ :დ


Posted by: where_security_fails 29 Jul 2019, 21:22
NinjaRacer
arc mevar sql developeri,sqlmap + burpit fuzzing + erti-ori command biggrin.gif


MITRE-s lists static analyzerebi iyeneben, saintetesoa false positive bagebtan rogor arian

Posted by: NinjaRacer 29 Jul 2019, 22:22
where_security_fails
ძალიან საინტერესოა მაგრამ ჩემთვის ეგ არის ვუდუ მეჯიქი სამწუხაროდ. უაღრესად სსაინტერესო სფეროა. მაგრამ ჩემთვის ზედმეტად მიუწვდომელი biggrin.gif ელემენტალურ დონეზეც რომ გამარკვიოს ვინმემ ნახევარ სამეფოს მივცემ

ცრუ დადებითი ალბათ მეტი ექნება ვიდრე უარყოფითი biggrin.gif ლოგიკურად რადგან საინფორმაციო შეტყობინებების სახე აქვს. ის კიარა უწერიათ კიდეც რომ პასუხს არ ვაგებთ რომ ყველა პოზიტივს აღმოვაჩენთო :დ
* * *
ჩემი ჩაის ჭიქა სავსეა








biggrin.gif

Posted by: C17H19NO3 30 Jul 2019, 15:32
user posted image

ცოტა ავირიე, ჩანიკურია ესეც და თუ მოიცლით ქართულად მითხარით :*

ანუ ხომ შევიტანე
printinfo ( name, age, born)

და ბოლოში კი სხვა სახელებით გამომაქვს,
saxeli
asaki
bday

გამოდის რომ ფუნქციაში ([0],[1],[2]) როცაა, ნებისმიერ შემთხვევაში
ფუნქცია იწყებს პირველი მნიშვნოლბიდან და ავტომატურად ცვლის?? აუ ვერც კითხვა ვერ დაწერე კარგად :/

ჩემი წარმოდგენით, როგორც ბაშს აქვს $# და უდრის 0 ადგილზე მყოფ ცვლადს.. ასე ხდება აქაც?

Posted by: NinjaRacer 30 Jul 2019, 15:39
ბოდიში მოიხადე biggrin.gif $# არ უდროს 0-არგუმენტს. $# უდროს ყველა არგუმენტის რაოდენობას. ანუ 3-ს ამ შემთხვევაში
შენ სწორად გაქვს წარმოდეგინილი ამიტომაც ქვიათ ეგეთ არგუმენტებს positional arguments. არის კკიდე keyword არგუმენტებიც.

CODE

def name(first='',age=0,birthdate=1909)
    return firs,age,birthdate


Posted by: C17H19NO3 30 Jul 2019, 15:53
NinjaRacer
უი არა მოიცა $1 უნდა მქონდეს, ეგ კითხვა 2 დღეა დაწერილია ერთ ტაბში და ეხლა ვნახე :/ $1 ხომ მაგას უდრის ? ანუ პირველივეს რა არგუმენტებში..

ე.ი გამოდის, რომ მე როცა გამოვიძახებ ფუნქციას, არგუმენტების მიხედვით 0, 1, 2 მიმდევრობით ამობეჭდავს...

აი როგორ იქნება ლისტის გაგებით რომ მივუდგეთ ფუნქციას

def printinfo(name, age, born)
და ეს რომ ამოვპრინტოთ ასე printinfo([$1],[$2},[$3]) (%s, %d, %f)

თუ სხვაგან ვარ ვაბშე პირდაპირ მითხარი და უბრალოდ მასალას გავყვები

Posted by: NinjaRacer 30 Jul 2019, 19:52
C17H19NO3
ვერ გიპასუხე ბოდიში.
ვერ მივხვდი რის გაკეთება გინდა სიმართლე გითხრა.

Posted by: RexxaR 31 Jul 2019, 12:06
QUOTE (C17H19NO3 @ 30 Jul 2019, 15:32 )
user posted image

ცოტა ავირიე, ჩანიკურია ესეც და თუ მოიცლით ქართულად მითხარით :*

ანუ ხომ შევიტანე
printinfo ( name, age, born)

და ბოლოში კი სხვა სახელებით გამომაქვს,
saxeli
asaki
bday

გამოდის რომ ფუნქციაში ([0],[1],[2]) როცაა, ნებისმიერ შემთხვევაში
ფუნქცია იწყებს პირველი მნიშვნოლბიდან და ავტომატურად ცვლის?? აუ ვერც კითხვა ვერ დაწერე კარგად :/

ჩემი წარმოდგენით, როგორც ბაშს აქვს $# და უდრის 0 ადგილზე მყოფ ცვლადს.. ასე ხდება აქაც?

თუ სწორად მესმის (და მგონი მივხვდი რაც არის შენთვის ბუნდოვანი) ასეა:

user posted image

ანუ ფუნქციის დაწერის დროს შენ არჩევ ინტერნალ სახელს არგუმენტისას, ფუნქციის გარეთ არ აქვს მნიშვნელობა რა ქვია.

ეს სამი არგუმენტი არის პოზიციური არგუმენტები, რაც ნიშნავს რომ რა რიგითობითაც მიწერია ფუნქციის დაწერის დროს, იმავე რიგითობით უნდა მივაწოდო ფუნქციის გამოძახებისას არგუმენტების მნიშვნელობები.

მეც ვერ ვხსნი კარგად ახლა მარა თუ დაუკვირდები გაიგებ წესით

Posted by: C17H19NO3 31 Jul 2019, 13:58
NinjaRacer
მე მომიტევე, ისეთი დღე მქონდა აშკარად ამრია, ბაშიც და პითონიც ამერია ერთმანეთში და ასე შემდეგ biggrin.gif

RexxaR
მადლობა smile.gif
ჩემთვის ასეთ საკითხებში მთავარია შიგთავსი გავიგო, რომ დიდი ხნით ჩავდო გონებაში. დანარჩენი პრაქტიკის ამბავია
ეს საკითხიც გავიგე ამ ეტაპზე.

********
დღეს დავიწყე დავალებების კეთება აგერ პირველი, თავიდან ჯერ მარტივად დავწერე ანუ სათითაოდ დავყავი ყველაფერი და მერე კოდი გავამარტივე



» სპოილერის ნახვისთვის დააწკაპუნეთ აქ «


სადაც წითლად წერია 1, მანდ სპეისი როგორ მოვაშორო?? მაინც ეგრე იწყებს თითქოს მივაბჯინე ყველაფერი ერთმანეთს

Posted by: RexxaR 31 Jul 2019, 15:59
QUOTE (C17H19NO3 @ 31 Jul 2019, 13:58 )
NinjaRacer
მე მომიტევე, ისეთი დღე მქონდა აშკარად ამრია, ბაშიც და პითონიც ამერია ერთმანეთში და ასე შემდეგ biggrin.gif

RexxaR
მადლობა smile.gif
ჩემთვის ასეთ საკითხებში მთავარია შიგთავსი გავიგო, რომ დიდი ხნით ჩავდო გონებაში. დანარჩენი პრაქტიკის ამბავია
ეს საკითხიც გავიგე ამ ეტაპზე.

********
დღეს დავიწყე დავალებების კეთება აგერ პირველი, თავიდან ჯერ მარტივად დავწერე ანუ სათითაოდ დავყავი ყველაფერი და მერე კოდი გავამარტივე



» სპოილერის ნახვისთვის დააწკაპუნეთ აქ «


სადაც წითლად წერია 1, მანდ სპეისი როგორ მოვაშორო?? მაინც ეგრე იწყებს თითქოს მივაბჯინე ყველაფერი ერთმანეთს

ეგ print() ფუნქციის დეფოლტ ბეჰავიორია, როცა პირდაპირ სხვა დელიმიტერს არ უთითებ იყენებს სფეისს.

ანუ print(1, 2) შვება შემდეგს:

ბეჭდავს "1 2" <<< ანუ გამოტოვება თვითონ დაამატა 1 და 2 შორის ფუნქციამ

თუ გინდა რომ სფეისები არ ჩაამატოს თითოეული პარამეტრისთვის შეგიძლია გამოიყენო sep პარამეტრი (keyword პარამეტრია ეს)

მაგალითი:

print('09','12', sep='-', end='-2016n')

დაბეჭდავს შემდეგს: 09-12-2016

ანუ sep-ში რასაც ჩაწერ იმას გამოიყენებს გამყოფად, end-ში რასაც ჩაწერ იმას მიაკერებს ბოლოს

Posted by: Definitely_Maybe 1 Aug 2019, 00:59
C17H19NO3
დაბეჭდვის დროს სტრინგში რომ მოათავსო ცვლადები უფრო მარტივი ხერხია წინადადების წინ f იხმარო, და ბრჭყალებს შორის დაწერო ის ტექსტი რაც გინდა და ცვლადები ჩასვა {} ფრჩხილებში (არ ვიცი რა ქვია ამათ smile.gif

user posted image

Posted by: NinjaRacer 1 Aug 2019, 01:27
https://docs.python.org/3/library/pprint.html

ესეც საკაიფო ვეშია. განსაკუთრებით როცა ჯეისონი მოგაქვს ან რამე ქრინჯი დატა წასაკითხი.

ან როცა os.environ-ის დაბეჭდვა გინდა. ან როცა ძააან დიდი ნესტინგი გაქვს.

width,depth,indent არის ძაან საკაიფო რამე.

Posted by: C17H19NO3 1 Aug 2019, 14:56
RexxaR
აუ ძაან ელემენტარული მქონია :/
print(name,"რადგანაც თქვენ ხართ", age,"წლის\n", "ასი წელი შეგისრულდებათ" , year_future , "წელს")

აი აქ: წლის\n კი არა შემდეგ "\nასი
უნდა მქონოდა :/

Definitely_Maybe
კი მაგასაც ვიყენებ და მეც უფრო მომწონს smile.gif

NinjaRacer
ვერ ვარ ჯერ მანდ, ფუნქციებს და კლასებს ვამხეცებ. თან სამსახური + პირადი საქმეები და რომ დავუჯდები ხოლმე 10 წუთი მიჩვევას ვანდომებ biggrin.gif

***

ჯანგოს მხარეს ვიხრები როგორც ვამჩნევ, ანუ ვებ პითონი რა, ხოდა რაც არ უნდაიყოს საბაზისო სწავლა ხო ყველა ვარიანტში ჩვეულებრივი პითონი უნდა ვიცოდე??

Posted by: RexxaR 1 Aug 2019, 23:18
QUOTE
ჯანგოს მხარეს ვიხრები როგორც ვამჩნევ, ანუ ვებ პითონი რა, ხოდა რაც არ უნდაიყოს საბაზისო სწავლა ხო ყველა ვარიანტში ჩვეულებრივი პითონი უნდა ვიცოდე??


თავისთავად უნდა იცოდე პითონი

ამასთანავე უნდა იცოდე მთრლი ცებ კომპლექტიც თუ დამოუკიდებლად შეეცდები პროექტის გამართვას

ანუ ჰტმლ ცსს ჯავასკრიპტი მინიმუმ

QUOTE
აუ ძაან ელემენტარული მქონია :/
print(name,"რადგანაც თქვენ ხართ", age,"წლის\n", "ასი წელი შეგისრულდებათ" , year_future , "წელს")


ხოო მაგის დაწერა კი დამავიწყდა რის გამოც ეგეთი აუთპუთი გქონდა მარა ახანა მოიცავდა თავის თავDი

Posted by: C17H19NO3 2 Aug 2019, 00:35
RexxaR
HTML, CSS, JS და ზოგადად ვებ საქმიანობა წლებია თან მდევს smile.gif
ოღონდ უკვე კაი ხანია ცოტ ცოტა ცოდნას ვიყენებ (საჭიროებისამებრ).

ასაკში ბექენდი უფრო მომეწონა და სერვერული მხარე... ხოდა რომ რამე სამსახური შევიცვალო მსგავსი განხრით უკვე კაი გულით და სულით ჩავუჯდები თან საბაზისო ცოდნა საკმარისი მექნება smile.gif

ვსწავლობ და ვისწავლი სულ ალბათ ხან რას და ხან რას, სიამოვნებას მაინც მანიჭებს მაგის დედაც ვატირე.

***
აი ეხლაც, დალევას და მაიმუნობებს რომ ავარიდე თავი ვუზივარ პითონს და ლინუქსს biggrin.gif

https://www.practicepython.org/ << აქედან ვიღებ სავარჯიშოებს და ამოვიდა ყელში ეს მათემატიკური თემები.



* * *
ერთი თქვენ გახარებას, ამ კითხვაზე მიპასუხეთ და სხვა კითხვებსაც გაეცემა პასუხი

user posted image

აი აქ ვცდილობ, როცა წაიკითხავს დირექტორიას თუ იპოვის ფაილს სახელად ( f/irst.txt ) p.s f და i ს ერთად ვერ ვწერ ფორუმზე კაი ხანია biggrin.gif
გახსნას და შიგთავსი გამოიტანოს.. ამ ეტაპზე შეცდომას არ აგდებს მართალია მაგრამ არც იმას აკეთებს რასაც ვგულისხმბ..
სადღაც მე 6 ხაზზე არის ეგ მოსაგვარებელი.. ანდაც მიდგომა შესაცვლელი smile.gif

user.gif user.gif user.gif user.gif user.gif
* * *
მე 6 კი არა მე 8 :/

Posted by: C17H19NO3 3 Aug 2019, 14:01
RexxaR
NinjaRacer
Definitely_Maybe
გამოჩნდით რომელიმე user.gif

Posted by: RexxaR 3 Aug 2019, 14:10
როგორც მახსოვს file. Filename an rame s
Msgavsi attibutit an metodit xdeba saxelis migeba


Posted by: @Schizophrenic 3 Aug 2019, 14:13
C17H19NO3
CODE

for root,dirs,files in os.walk(path):
for each in files:
           if each == 'first.txt':

ასე ვწერ ხოლმე მე, path-ში ჩასვი ის მისამართი სადაც გინდა მუშაობა
* * *
f = open(file, 'r')
ეს არ იმუშავებს იმიტომ რომ file-ში ზუსტი მისამართი უნდა ჩასვა (C://folder//filename) თორე სადაც დგას იქ დაიწყებს ფაილის ძებნას, მე როგორც დაგიწერე იქ დაუმატე
filename = root+"/"+each და f = open(filename, 'r') ასე გახსნის

Posted by: C17H19NO3 3 Aug 2019, 14:24
ფაილებს იძებს, იმ ფოლდერს აკითხავს და ყველაფერი ხუთიანზეა, თუ მინდა რომ ფაილი გავხსნა მაგასაც ვაკეთებ ცალკეულად..

მაგრამ ვერ ვაკეთებ აი ამ ეტაპს

if file (aq file me davarqvi araferi gansakutrebuli) == "first.txt"
ანუ ამ ფოლდერში თუ არის ფაილი სახელად firts.txt მაშინ უკვე გახსნას რა და ჩაიხედოს შიგნით...




Posted by: @Schizophrenic 3 Aug 2019, 14:27
QUOTE
ანუ ამ ფოლდერში თუ არის ფაილი სახელად firts.txt მაშინ უკვე გახსნას რა და ჩაიხედოს შიგნით...

ვერ გახსნის სრული მისამართი თუარ გადაეცი, მაგალითად ფაილი გაქვს დესკტოპზე სახელად first.txt, პითონის ფაილი სადაც კოდი გიწერია გაქვს სხვა დირექტორიაში(დესკტოპზე არ გაქ) ამ შემთხვევაში მარტო ფაილის სახელი არაა საკმარისი, მთლიანი მისამართი უნდა გადაცე მაგალითად C:/user/desktop/first.txt და არა მხოლოდ firts.txt
* * *
QUOTE
მაგრამ ვერ ვაკეთებ აი ამ ეტაპს

ციკლს რომ ატლიალებს მად file-ში მთლიანი სახელებია მისამართიანა თუ მხოლოდ ფაილის სახელი? ჯერ დაბეჭდე ფაილის სახელები სანამ ლოგიკას დაუწერ და ნახე რა შედეგს გაძლევს, იფ ამოიგე და პრინტი გაუკეთე file-ს

Posted by: RexxaR 3 Aug 2019, 14:31
C17H19NO3

დაგიწერა მაგაზე პასუხი ზემოთ

მოკლედ ეგ ფაილი არის დავუშვათ ამ მისამართზე: c:/desktop/folder1/file.txt

შენ როცა იტერაცია დაიწყე ამ ფოლდერში c:/desktop/folder1 და ამოიკითხე სახელები, დაგიბრუნა მხოლოდ file.txt მხოლოდ

შემდეგ ლაინზე უკვე ცდილობ გახსნა ფაილი ამ path-ით >>> file.txt, ჰოდა რადგანაც წინ არაფერი არ უწერია ავტომატურად ცდილობს მოძებნოს იმავე დონეზე სადაც თვითონ სკრიპტი დევს.

ანუ მაგალითად თუ სკრიპტი გიგდია დესკტოპზე ხოლო ეგ ფაილი არის დესკტოპზე მდებარე ფოლდერში განთავსებული, სკრიპტი მოძებნის დესკტოპზე, და არა დესკტოპზე განთავსებულ ფოლდერში, იმიტომ რომ შენ არ მითითებია ზუსტი მისამართი, მხოლოდ ფაილის სახელი უთხარი

Posted by: C17H19NO3 3 Aug 2019, 14:39
ბეჭდავს სახელებს
first.txt
first1.txt
და ჩერდება..
user posted image

მე-7 ხაზამდე აკეთებს ყველაფერს კარგად.. (მაგის მერე შეცდომას არ აგდებს უბრალოდ ჩერდება)

მე რეალურად file შევიტანე for ში..
და ამის მერე if file << სწორი მიდგომაა?? რაღაც სწორად უნდა წავაკითხო თორემ თუ მოვუშლი მაგას
მერე ეგრევე ხსნის ფაილს და შიგთავსი გამოაქვს...

Posted by: @Schizophrenic 3 Aug 2019, 14:44
QUOTE
მე-7 ხაზამდე აკეთებს ყველაფერს კარგად.. (მაგის მერე შეცდომას არ აგდებს უბრალოდ ჩერდება)

მე რეალურად file შევიტანე for ში..
და ამის მერე if file << სწორი მიდგომაა?? რაღაც სწორად უნდა წავაკითხო თორემ თუ მოვუშლი მაგას
მერე ეგრევე ხსნის ფაილს და შიგთავსი გამოაქვს..

გაჩერდება აბა რასიზამს მარტო ფაილის სახელებია, შენ გჭირდება მისამართიც სადაც ეგ ფაილია, პირველი პოსტი წაიკითხე რაც დაგიწერე კოდი რომ დაგიდე, root ამოიღებს მისამართს და მეორე ციკლის each-ში გექნება ფაილის სახელები root + '/' + each მოგცემს მთლიან სახელს და ეგ უნდა ჩასვა open-ში

Posted by: C17H19NO3 3 Aug 2019, 14:45
ვსოო გასაგებია ყველაფერი ..

მადლობელი.. user.gif


QUOTE
ჰოდა რადგანაც წინ არაფერი არ უწერია ავტომატურად ცდილობს მოძებნოს იმავე დონეზე სადაც თვითონ სკრიპტი დევს.

აი ეს ვერ გავიაზრე, ახლა გავიკვლელ გზას


@Schizophrenic
QUOTE
C17H19NO3
CODE


for root,dirs,files in os.walk(path):
for each in files:
           if each == 'first.txt':

ასე ვწერ ხოლმე მე, path-ში ჩასვი ის მისამართი სადაც გინდა მუშაობა
* * *
f = open(file, 'r')
ეს არ იმუშავებს იმიტომ რომ file-ში ზუსტი მისამართი უნდა ჩასვა (C://folder//filename) თორე სადაც დგას იქ დაიწყებს ფაილის ძებნას, მე როგორც დაგიწერე იქ დაუმატე
filename = root+"/"+each და f = open(filename, 'r') ასე გახსნის


კი ეგრეა smile.gif

Posted by: @Schizophrenic 3 Aug 2019, 14:53
C17H19NO3
CODE

for root,dirs,files in os.walk(target_path):
for each in files:
               if each == "first.txt":
                   file_name = root+"/"+each
                   with open(file_name,"r") as rf:
                       file = rf.read()
                       print(file)

with -ით გახსენი close აღარ დაგჭირდება თვითონ ხურავს სტრიმს

Posted by: NinjaRacer 4 Aug 2019, 00:04
აღარ ვპოსტავ აქ და ამას თავის მიზეზები აქვს სამსახურთან და სხვა რაღაცეებთან დაკავშირებით. მაგრამ ცოტა ხანში ჩემს მიერ დაწერილ კოდს დავდებს. 200
ხაზამდეა და სხვადასხვა თემებზე. ყველაფერი ერთ ფაილში მაქვს და დაკომენტარებულია. ძალიან საჭირო ბიბლიოთეკების და ხადავოი რაღაცეების სავარჯიშოებია რომელიც დავწერე როცა პითონის კურსს გავდიოდი.
ჯერ არ დამისრულებია და ამიტომ არ დავდებ. იმედია გამოადგება ვინმეს.
* * *
ახალი ბაზვორდი რომელიც რეალურად საინტერესოა და რაც მთავარია კარგად არი ახსნილი.
ვებასემბლიზეა.



* * *
path ობეიქტები უნდა შემქნა ხოლმე როცა ადვილად გინდა ფაილებთან მუშაობა.

object oriented file system paths

რასაც ობჯექტ ორიენტიდ ურევია და ფაილ სისტემას შეგიძლია ჩათვალო რო კარგია და ცხოვრება გიადვილებს.

https://docs.python.org/3/library/pathlib.html

Posted by: AnEeEeE=]] 4 Aug 2019, 16:32
NinjaRacer
თემაში შემოვედი დ ამივხვდი რო პითონის სინტაქსი სრულიად დავიწყებული მაქვს drug.gif

Posted by: NinjaRacer 5 Aug 2019, 00:53
AnEeEeE=]]
ვიცით ყველამ ეგ გრძნობა დაიკიდე. მეც ზუსტად ეგრე ვიყავი. 1 თვე გავეშვი ჯავასკრიპს ვსწავლობდი და რეაქტს მეგონა რო სრულიად დამავიწყდა.

თან შენ იმდენ რამეს ერთად სწავლობ რო არ არის გასაკვირი.
ნებისმიერ დეველოპერს კითხე ორი კვირის წინ რა დაწერა და ვერ გაიხსენებს biggrin.gif

როცა საჭიროა მაგას კიარა 10 წლისწინ რაღაც ყურმოკრული რო გქონდა ეგეც გაგახსენდება დამიჯერე :დ
საკმარისია 2-3 ჩაჯდომა ეგრევე გაიხსენებ. ეგ ეგრეა. კოდთან როცა არ მაქვს შეხება მეც 'მავიწყდება'
* * *
https://github.com/gurguration/python_course

Posted by: C17H19NO3 5 Aug 2019, 12:47
NinjaRacer
QUOTE
ცოტა ხანში ჩემს მიერ დაწერილ კოდს დავდებს. 200
ხაზამდეა და სხვადასხვა თემებზე. ყველაფერი ერთ ფაილში მაქვს და დაკომენტარებულია. ძალიან საჭირო ბიბლიოთეკების და ხადავოი რაღაცეების სავარჯიშოებია რომელიც დავწერე როცა პითონის კურსს გავდიოდი.
ჯერ არ დამისრულებია და ამიტომ არ დავდებ. იმედია გამოადგება ვინმეს.


ძალიან კარგი, მაინტერესებს.. გამომადგება დარწმუნებული ვარ smile.gif
QUOTE
path ობეიქტები უნდა შემქნა ხოლმე როცა ადვილად გინდა ფაილებთან მუშაობა.

კი გავერკვიე უკვე,

QUOTE
* * *
https://github.com/gurguration/python_course


ეს არის შენი კოდი ?? bis.gif bis.gif

text = Text("Pyhton") << ეს ჩაასწორე..

წინ რომ # ები აქვს ტერმინალით მოვაშორო ეგ თუ სად წერთ ასეთ კოდს popcorn.gif popcorn.gif

Posted by: NinjaRacer 5 Aug 2019, 15:37
C17H19NO3
QUOTE
text = Text("Pyhton") << ეს ჩაასწორე..


არ არის ეგ შეცდომა. პირიქით smile.gif ეგრე უნდა იყოს.

გაუშვი ეგ კოდი და ნახავ.
print(text)-იც ნახე რას დაგიწერს. პრინტი განახებს უფრო კარგად რახდება შიგნით.
იმიტომ დაგიწერს პითონს რომ Text კლასის მშობელი სტრინგია.
CODE

class Text(str):

ამიტომ როცა შენ სტრინგ ანიჭებ ამ კლასის ინსტანსს ანუ self -ს ჩვეულებრივად ენიჭება.
თუ დააკვირდები დუპლიკეიტიც self-ს აბრუნებს. self+self

ცოტა რთულა ეგ.

VSCODE-ით გახსენი, ყველაფერი მონიშნე CTRL+A და მერე CRTL+/
სხვა ედიტორებზეც იმუშავებს მაგალითად PYCHARM.

Posted by: C17H19NO3 5 Aug 2019, 16:50
NinjaRacer
ამმმ ... მე ვიგულისხმე Pyhton თვითონ სიტყვა წერია არასწორად თქო..

Posted by: AnEeEeE=]] 5 Aug 2019, 19:54
NinjaRacer
QUOTE

თან შენ იმდენ რამეს ერთად სწავლობ რო არ არის გასაკვირი.

ბიჭო აბა, დღეს დავიცავი სამაგისტრო, ეხლა დასასვენებლად წავალ და აი რო ჩამოვააალ, რო ჩამოვაააალ , აიძაან ბევრ კოდებს დავწერ biggrin.gif biggrin.gif

Posted by: NinjaRacer 5 Aug 2019, 21:15
QUOTE
სამაგისტრო

QUOTE
დავიცავი


user posted image

მაგარი ხარ!
QUOTE
ჩამოვააალ, რო ჩამოვაააალ , აიძაან ბევრ კოდებს დავწერ

გრევი გინდა? ჯავას კურსებს გიჯიგრებ აი სასწაულს biggrin.gif

ამ მათემატიკის და კომაროვის ხალხა ხო შეგვჭამაა რააა.

მართლა სასწაულ კოდებს წერენ ისე. კაკრაზ დღეს მაგაზე ვბაზრობდით სამსახურში :დ



C17H19NO3
ეგ კოდები არის კატასტროფულად არა დამწყებ ფრენდლი. მეც კურსიდან ამოვკიბე. მანდ თუ 99% ვერ გაიგებ არაუშავს მანდ არის მთავარი აი ეს ბიბილიოთეკების სია რომ მომავალში იცოდე რა არის ყველაზე ხადავოი ყოველდღიურობაში და აუცილებლად დაგჭირდება. ყველა არა მაგრამ...


აი მათემატიკური რაღაცეების და არამარტო numpy არის რაღაც სასწაული. ცალკე კურსი უნდა მიუძღვნა მაგას, თან C-ზე არის დაწერილი და ძალიან სწრაფია. C-ში დაწერილი პროგრამის პერფორმანსი გაქვს პითონში თითქმის და თან მართლა ძალიან ბევრი რამე შეუძლია ბევრად ადვილად. თუნდაც array index arithmetic operations რად ღირს. პითონში იგივე რომ დაწერო 10 ხაზი გინდა აქ 1.
QUOTE

abstract classes namdedtuples pathlib ZipFile csv json sqlite3 string time random datetime timedelta email.mime.multipart email.mime.text stmplib sys requests subprocess beautifulSoup selenium pyPDF2 openpyxl numpy

Posted by: AnEeEeE=]] 5 Aug 2019, 21:41
NinjaRacer


QUOTE
დავიცავი

ერთი სული მაქვს ქუდს როდის ავისვრი , მარა რა მიხარია ] მეორე მასტერს ვიწყებ ეგრევე lol.gif

QUOTE
ამ მათემატიკის და კომაროვის ხალხა ხო შეგვჭამაა რააა.

მართლა სასწაულ კოდებს წერენ ისე. კაკრაზ დღეს მაგაზე ვბაზრობდით სამსახურში :

კაია მერე, კაია რო ვიღაცა ამ ქვეყანაშ სასწაულ კოდს წერს , მთლად ჩამორჩენილები არ ვართ :დ
QUOTE
ჯავას კურსებს გიჯიგრებ აი სასწაულს

კი მინდა

Posted by: NinjaRacer 5 Aug 2019, 22:41
QUOTE
კი მინდა


up.gif
დაიც. მოვაგროვებ ერთ ადგილზე იმ კვირაში და ავყრი სადმე.
სუპერ კურსებია. ეგეთი ჯიგარი კურსი მე ჯერ არაფერზე არ შემხვედრია.
თანამშრომლის ყოფილ კომპზე ვწერდი ამ კოდს და გამეპარა ზედმეტი ინფო კოდში.

Posted by: RexxaR 6 Aug 2019, 01:46
QUOTE
https://github.com/gurguration/python_course


ეს რა არის

ანუ რაც გაიარე პრაქტიკაში რაღაც გამოსადეგი აბსტრაქციები შექმენი?

Posted by: NinjaRacer 6 Aug 2019, 08:59
RexxaR

მოკლედ ჰიბრიდია. აბსტრაქტციებიცაა.
ბილთინ დატა არასდროს დამიექსტენდებია თითქმია და ჩემთვის შპარგალკასავითაა.
აი ლისტის სტრინგის დაექსტენდება. კურსი მომცეს გაიარეო და გავიარე თან დავწერე კურსში რასაც ასწვლიან ხადავოის.
json path sqlite3 csv time timedelta ესენი იასნია მჭირდება.

smtplib-იც იასნა გამომიყენებია. როცა ბანძ სერვერებზე ვაგზავნიდი აგზავნიდა. mime-ები დავამუღამე და ehlo starttls ამეებს რო არ ვაძლევდი ზოგჯერ სპამში მაგდებდა. აქ კიდე მზა რეცეპტია. თვითონ string ბიბლიოთეკაც არ დამჭირვებია მაგრამ აშკარად ძაან სასარგებლოა.
ამის წერისას კიდე მივხვდი რომ ansible ძაან აქტიურად იყენებს subprocess მოდულს smile.gif პლატროფმის გარჩევაა. ვინ/ლინუქს ესეც საჭიროა.

ვებქრაულერი დამიწერია ადრეც beautifulSoup-ით. მაგრამ აქ რაღაცეები დავამუღამე + სელენიუმი დავუმატე რაც მე გამომადგა ძალიან რაღაცეებში.
pdf-ის დამერჯვა, xls დოკუმენტებიდან რაღაც ინფოს წამოღება შეიძლება ესეც გამომადგეს.

და numpy ყველაზე ძლიერი შტუკაა აქედან. იმიჯების პროცესინგზე ვიჩალიჩე ერთხელ რაღაც, ან დიდი ზომის ერეისთან თუ გაქვს შეხება ყოველთვის numpy უნდა გამოიყენო და კიდე ბევრი რამე შეუძლია.
მოკლედ შპარგალკაა თან რააღაცეების სწორად დაწერა ვისწავლე და უცებ დავურბინე ისეთ რამეებს რაც მავიწყდებასავით და არ მინდა სულ მეხსიერებაში მქონდეს.

Posted by: AnEeEeE=]] 6 Aug 2019, 09:25
NinjaRacer
იქეთ კვირას შვებულებაში გავდივარ უკვე, არ იჩქარო ჯერ biggrin.gif

Posted by: NinjaRacer 14 Aug 2019, 01:01
აბა პითონისტებო :დ

მაქვს დაახლოებით 5000-მდე ლინკი(ვიდეოებია). ლინკები ტექსტურ ფაილში და \n-ით არის გამოყოფილი თითოეული ლინკი ახალ ხაზზეა.

ხვალ უნდა დავწერო სკრიპტი რომელსაც ექნება რამოდენიმე სრედი 5 მაგალითად, ექნება ქიუ (queue), რომელიც არ გაადააჭრბებს ამ 5 სრედის რაოდენობას ანუ მაქს 5 ჩამოტვირთვა იქნება ერთდროულად დასაშვები, ყველა ამ ლინკს ჩამოტვირთავს და შეინახავს ფაილში.

ვინც მომეხმარება დასაჩუქრდება :დ
მოხმარება არ მჭირდება ჩემითაც დავწერ მომენტ.
დღეს ქრაულერი დავწერე რომელმაც მოაგროვა ეს ლინკები ხვალკი ჩამოვქაჩავ. უბრალოდ კარგი სავარჯიშო იქნება ყველასთვის))
პითონის მთავარი მუღამი ეგეთი რაღაცეებია (მომენტ)

Posted by: DoomDev 14 Aug 2019, 02:01
Nინჯაღაცერ

QUOTE
5 ჩამოტვირთვა იქნება ერთდროულად დასაშვები


ადრე ვცადე ამის გაკეთება და გავიქრაშე
თუ ჩამახედებ კოდის ამ ნაწილში დამავალებ alk.gif

უფრო კონკრეტულად
მქონდა ლისტი ლინკების
და ამ ლინკებიდან უნდა გადმოეწერა რესურსი
2-3 ერთდროულად და მთავარი აზრი იყო რომ დალოდებოდა სანამ done ს გააკეთება ჩაშვებული 3 დაუნლოადი მერე გაშვებულიყო შემდეგი იტერაცია
ერთგვარი ასინქრონული მოქმედება უნდა ყოფილიყო რა
სამწუხაროდ პითინის არცოდნის გამო გავიჭედე
ვიკითხე კიდეც ფბ რაღაც გვერდებზე და .... იგნორი მივიღე
აქ კიდე ბანი მედო და ვერ ვიკითხე lol.gif

Posted by: NinjaRacer 14 Aug 2019, 02:35
DoomDev

ჩაგახედებ კაცო :დ

ქრაულერიც და დაუნლოადერიც უნდა დავხვეწო. რაღაც ბაგები აქვს.

Posted by: RexxaR 14 Aug 2019, 11:17
NinjaRacer
მე შემიძლია მაგაში დაგეხმარო. მაგის მეტი რა მიკეთებია


Posted by: NinjaRacer 14 Aug 2019, 11:32
RexxaR
მშვენიერი. მაშინ კოდს დავდებ მოგვიანებით.
რა ბიბლიოთეკები გამოვიყენო არც ვიცი. მე ვფიქრობ.
multithreading, Queue

პროგრეს ბარიც მინდა ქონდეს. აი დაახლოებით როგორც yum მუშაობს.

გრევიც იქნება :-]

Posted by: RexxaR 14 Aug 2019, 12:24
NinjaRacer

ანუ GUI-ც გინდა?

მოკლედ სკრიპტი კლიენტს უნდა მისცე თუ მხოლოდ შედეგი აინტერესებს?

იმიტო რო თუ ერთჯერადი ტასკი არაა მაგ შემთხვევაში ცოტა სხვანაირად უნდა დაიწეროს.

Posted by: NinjaRacer 14 Aug 2019, 12:34
არა GUI არ მინდა.

მოკლედ მზა კოდებიც არის

pastebin.com/QrZG9e9T


და მუშაობს. მე უბრალოდ ჩემითაც ვწერ რო არ დამავიწყდეს და ვინახავ პახოდუ შპარგალკასავით.
შენ აშკარად იცი რომელი გზა ჯობია. როგორ ჯობია რა ბიბლიოთეკებით და ა.შ.

გუის მიბმა tk-თი საერთოდ არაა პრობლემა. მაგას მერე ვიზამ საღამოს საქმე რო არაფერი მექნება გასართობად smile.gif თუ გინდა ახლაც ვქნათ.

მოკლედ თავიდან ბოლომდე ჩემთვის ვაკეთებ და არავითარი კლიენტი არ მელოდება არსად smile.gif
მადლობა.

Posted by: C17H19NO3 14 Aug 2019, 17:21
მოკლედ რამდენიმე დღეა ამ საკითხებზე ვარ..


user posted image

https://github.com/c17h19no3/python3
ასე თუ ისე გამომდის მაგრამ კოდი არ მომწონს, დავამატებ ნელ ნელა ფუნქციებს
* * *
QUOTE
აბა პითონისტებო :დ

მაქვს დაახლოებით 5000-მდე ლინკი(ვიდეოებია). ლინკები ტექსტურ ფაილში და \n-ით არის გამოყოფილი თითოეული ლინკი ახალ ხაზზეა.

ხვალ უნდა დავწერო სკრიპტი რომელსაც ექნება რამოდენიმე სრედი 5 მაგალითად, ექნება ქიუ (queue), რომელიც არ გაადააჭრბებს ამ 5 სრედის რაოდენობას ანუ მაქს 5 ჩამოტვირთვა იქნება ერთდროულად დასაშვები, ყველა ამ ლინკს ჩამოტვირთავს და შეინახავს ფაილში.

ვინც მომეხმარება დასაჩუქრდება :დ
მოხმარება არ მჭირდება ჩემითაც დავწერ მომენტ.
დღეს ქრაულერი დავწერე რომელმაც მოაგროვა ეს ლინკები ხვალკი ჩამოვქაჩავ. უბრალოდ კარგი სავარჯიშო იქნება ყველასთვის))
პითონის მთავარი მუღამი ეგეთი რაღაცეებია (მომენტ)


ვა ეს ეხლა ვნახე ..
კარგია, რომ გააკეთებთ მეც გავარჩევ თუ რამეში დაგხმარებით აქ ვარ smile.gif smile.gif

Posted by: Lilith 14 Aug 2019, 19:31
NinjaRacer
მე მაქ რაღაცა მსგავსი გაშვებული ქლაუდში, ოღონდ thread-ებს ვერიდები, იმიტომ რომ როგორც წესი API-ებსაც და ზოგადად ვებსაიტებსაც ლიმიტები აქვთ დაწესებული თუ რამდენი request-ის გაკეთება შეგიძლია დროის გარკვეულ მონაკვეთში. არ ვიცი შენ ზუსტად საიდან რის წამოღებას აპირებ, თუ სპორტული ინტერესი გაქვს thread-ების ეს ნახე - https://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes ძალიან მარტივია smile.gif

და ესეც : https://docs.python.org/2/library/multiprocessing.html#using-a-pool-of-workers
+ ესეც: https://stackoverflow.com/questions/35160417/threading-queue-working-example

Posted by: NinjaRacer 14 Aug 2019, 22:46
https://github.com/gurguration/Useful-Python-scr1pts/blob/master/threaded_downloader.py

Lilith
ყოჩაღ კარიგა up.gif ადრე თემა რომ გქონდა ძალიან მაგარი იყო.
მულტიპროცესინგი ბევრად ჯობია. უფრო სწრაფიცა და მარტივიცაა და უფრო წარმადიცაა, GIL-ს გვერდს უვლის. სრედები ცოტა საშაროა.

მე მომაქვს, react, angular, java, c#, asp.net, python, javascr1pt და კიდევ რამოდენიმე რაღაცის კურსები, ჯამში ალბათ 5000 ლინკი იქნება.
აი მარტივი უბრალო კოდია ბოლოს რაც დავწერე. პროგრეს ბარი დავუმატე უბრალოდ tqdm საკაიფო ვეშია.

დღეს მთელი დღე მივალიე ამ დებილობა სრედინგს. მაგრამ დავამუღამე. მაგას ჯობდა asyncio და multiprocessing-ს ჩავუჯდე.

C17H19NO3
კარგია რასაც აკეთებ. wsgi-არის ცოტა რთული, tk შედარებით მარტივი და pyqt უკვე საკაიფოა. მაგრამ რთულია.

CODE

#!/usr/bin/python3
from threading import Thread
from queue import Queue
import time
import requests
from tqdm import tqdm
import math


urls = open('links.txt').readlines()


class Threader(Thread):
   def __init__(self, queue):
       super().__init__()
       self.queue = queue

   def run(self):

       while True:
           url_inqueue = self.queue.get()
           self.download_worker(url_inqueue)
           self.queue.task_done()

   def download_worker(self, url_inqueue):
       response = requests.get(url_inqueue, stream=True)
       if response.status_code == 200:
           total_filelen = int(response.headers.get('Content-Length', 0))
           block_size = 1024 * 3
           written_size = 0
           file_name = response.headers.get('X-File-Name')
           print(file_name)
           with open(file_name, 'wb') as file:
               for data in tqdm(response.iter_content(block_size),
                       total=(total_filelen//block_size), unit='KB',unit_scale=True):
                   written_size += len(data)
                   file.write(data)
         
class Download:
   def __init__(self, num_ofthreads=3):
       self.num_ofthreads = num_ofthreads

   def start_download(self, urls):

       queue = Queue()
       for _ in range(self.num_ofthreads):
           t = Threader(queue)
           t.setDaemon(True)
           t.start()
       for url in urls:
           queue.put(url)
       queue.join()
       return


def main():
   donwload_manager = Download()
   donwload_manager.start_download(urls)


if __name__ == '__main__':
   main()


Posted by: @Schizophrenic 15 Aug 2019, 16:15
QUOTE
asyncio

+1

მე მაქვს მსგავსი გაკეთებული C#-ში 10-10 ლინკი მომქონდა, asyncio-ით უფრო მარტივია მე არც არაფერს ვიყენებ ამის მეტს

Posted by: RexxaR 15 Aug 2019, 20:28
QUOTE
მულტიპროცესინგი ბევრად ჯობია. უფრო სწრაფიცა და მარტივიცაა და უფრო წარმადიცაა, GIL-ს გვერდს უვლის. სრედები ცოტა საშაროა.



ვერ დაგეთანხმები როცა საქმე ეხება ვებ სქრეპინგს ზოგადად. თუმცა შენს შემთხვევაში პროცესები აჯობებს, იმიტო რო ცოტა რექუესტს აკეთებ და 1 რექუესტის ბოლომდე მისვლას გარკვეული დრო უნდა

პროცესების სპაუნინგი გაცილებით უფრო რესურსჰანგრია ვიდრე სრეადების ეს ერთი (მეტი ოპერატიული მიაქვს პროცესებს და პლიუს ამას კომუნიკაციის მოდელი გაქვს შესამუშავებელი

სრეადები კიდე უფრო სწრაფად სპაუნინგდება და იგივე მემორი ლოცაკიაში ფუნქციონირებენ და ადვილია კომუნიკაცია

და პრაქტიკაში 2 ვე მაქვს ნაცადი და ჯენერალ ვებ სქრეპინგისთვის ყველაზე სწრაფი და იდეალური არის ასინქრონული სქრეპინგი. მაგ: aiohttp

თუ ამ ასინქრონულობას მულტი პროცესინგსაც მიახმარ ვაფშე დედას უტირებ იმ საწყალს საიტს, შეიძლება წამში 1000+ რექუესტზე ახვიდე

Posted by: Lilith 15 Aug 2019, 22:10
RexxaR
QUOTE
ვაფშე დედას უტირებ იმ საწყალს საიტს, შეიძლება წამში 1000+ რექუესტზე ახვიდე

ხოდა როგორც მინიმუმ დაგბლოკავენ, მაქსიმუმ - შეუძლიათ გიჩივლონ DDOS ატაკისთვის და სერვერის მუშაობის განზრახ შეფერხებისთვის wink.gif

Posted by: RexxaR 16 Aug 2019, 12:20
Lilith

ჰო ეგ თავისთავად, უბრალოდ ინფორმაციულობისთვის ვამბობ თორე, ეგეთი რაღაცის გამიზნულად გაკეტება ძაან ცუდი რამეა
* * *
Lilith

ისე ადრე მქონდა შეკვეთა ჯამში 12 მილიონი რექუესტ მიწევდა რომ წამომეღო ყველა მონაცემი.

2 დღე ტყუილა ვიწვალე კოდზე, მერე დავთვალე რამდენ ხანში მოვარხერხებდი ამდენი რექუესტის გაკეტებას და რო მივხვდი რო რეალურად თვე ან თვეზე მეტიც (შეიძლება წელიც biggrin.gif) შეიძლებოდა დაჭირვებოდა და თან სულ პროქსი როტაციით და ა.შ. კი გავანებე თავი

თან 100 დოლარს იხდიდა თუ სწორად მახსოვს. ყოველ 10000 რექუესტზე 1 დოლარი რომ გადაეხადა კი დაუჯდებოდა 1200 დოლარი biggrin.gif

Posted by: DoomDev 17 Aug 2019, 14:13
CODE

page = ['url', 'url2']

for i in range(len(pages)):
   driver.get(pages[i])



აქ შეიძლება ინტერვალი გავაკეთო თითოეულ ინტერაციებს შორის?
იდეაში რისი გაკეთება მინდა ჩამოვაყალიბებ უკეთესად

pages[0] და pages[1] გავმიჯნო ცალცალკე თასკებად
მაგალითად

driver.get(pages[0])
find
fill
submit

driver.get(pages[1])
find
fill
submit

სანამ პირველი ელემენტები თავის თასქებით არ მორჩება მეორე არ გაეშვას

პ.ს. სელინიუმით ვჩალიჩობ პატარა ავტომატიზაცია მინდა გავაკეთო

Posted by: @Schizophrenic 17 Aug 2019, 15:47
QUOTE
აქ შეიძლება ინტერვალი გავაკეთო თითოეულ ინტერაციებს შორის?
იდეაში რისი გაკეთება მინდა ჩამოვაყალიბებ უკეთესად

QUOTE
სანამ პირველი ელემენტები თავის თასქებით არ მორჩება მეორე არ გაეშვას

რათქმაუნდა
არვიცი ეს როგორი გაკვეთილია მარა კარგი ტიპია ეს, თუარადა სხვა გაკვეთილებიცაა იუთუბზე https://www.youtube.com/watch?v=BI0asZuqFXM

Posted by: DoomDev 17 Aug 2019, 18:09
@Schizophrenic

მადლობა

time.sleep ით კი მივიღე შედეგი მაგრამ
არსტაბილურია
შეიძლება შეფერხება ქონდეს რექუესთს და ვერ მოასწროს
მიღებული ამოცანის დასრულება და სლიპის დასრულებისთანავე მეორე გაეშვება
დროს კიდე ზისტად ვერ განსაზღვრავ მაგ მომენტში

ამიტომ ასინქრონული ჯობია მოვუსმენ აუცილებლად
alk.gif

Posted by: RexxaR 17 Aug 2019, 19:21
QUOTE (DoomDev @ 17 Aug 2019, 14:13 )
CODE

page = ['url', 'url2']

for i in range(len(pages)):
   driver.get(pages[i])



აქ შეიძლება ინტერვალი გავაკეთო თითოეულ ინტერაციებს შორის?
იდეაში რისი გაკეთება მინდა ჩამოვაყალიბებ უკეთესად

pages[0] და pages[1] გავმიჯნო ცალცალკე თასკებად
მაგალითად

driver.get(pages[0])
   find
   fill
   submit

driver.get(pages[1])
   find
   fill
   submit

სანამ პირველი ელემენტები თავის თასქებით არ მორჩება მეორე არ გაეშვას

პ.ს. სელინიუმით ვჩალიჩობ პატარა ავტომატიზაცია მინდა გავაკეთო

ანუ სინქრონულად გინდა თუ ასინქრონულად?

სინქრონულად თუ გინდა და ყველა გვერდზე ერთი და იგივე მოქმედებების გაკეთება გიწევს, მაშინ შექმენი ფუნქცია სადაც ეგ მოქმედებები იქნება თავმოყრილი და იტერაციის დროს ეგ ფუნქცია გამოიძახე

მაგ:

CODE

import re
import selenium


URLS = ['url1', 'url2']
BROWSER = selenium.Browser()

def parse_page(page_content):
   result = r.findall(r'', page_content)

   return result

def scrape_page(url):
   page = BROWSER.get(url)

   # put your logic here
   # for example click on some button, input some values etc...
   # and collect desired data
   result = parse_page(page.page_source)

   return result

def main():
   results = {}
   for url in URLS:
       result = scrape_page(url)
       results[url] = result
   
   # when done do something


# call main functi0n
main()


კოდის სისწორეს არ მიაქციო ყურადღება ზეპირად არ მახსოვდა როგორ ხდება სელენიუმის ძრავის გამოძახწება და ა.შ.




ჰო მგონი ახლა მივხვდი რა გინდა უფრო.

ანუ როდესაც პირველ პეიჯზე დაასაბმიტებს მონაცემებს ეგრევე გადადის მეორე გვერდზე და ვერ ასწრებ ან გეკარგება წინა გაკეთებული საქმე ხო?

მგონი სწორად მივხვდი


ზუსტად ეგეთი შემთხვევებისთვის აქვს https://selenium-python.readthedocs.io/waits.html სელენიუმს

ანუ შეგიძლია მოაცდევიო მანამ სანამ ელემენტი არ არის დაკლიკებადი ან ელემენტი არ გამოჩნდება ან რაიმე კლასი არ აქვს ელემენტს ან რავი ყველაფერი შეგიძლია გაუწერო მაგ კონდიციებით და სანამ არ დაკმაყოფილდება წინ არ წავა პროცესი.

ანუ მაგალითად შენ რომ დაასაბმითე მონაცემები გინდა რომ დაელოდოს რესპონსს ალბათ (AJAX რექუესტს ხომ არ აკეთებს შემთხვევით) და რეალურად პირდაპირ მეორე გვერდზე გადადის ხო? ანუ უნდა იპოვო ის საიმედო რაღაცა რაც ხდება მაგ მოქედების შემდეგ რო დაალოდებიო ბრაუზერს და მერე გადავიდეს შემდეგზე

time sleep გამოყენებას არ გირჩევ თუ რაღაც უკიდურესად edge სიტუაცია არა გაქვს.


Posted by: DoomDev 17 Aug 2019, 20:17
QUOTE
ანუ როდესაც პირველ პეიჯზე დაასაბმიტებს მონაცემებს ეგრევე გადადის მეორე გვერდზე და ვერ ასწრებ ან გეკარგება წინა გაკეთებული საქმე ხო?

მგონი სწორად მივხვდი


yes.gif

ზუსტად აიაქს ქოლებია დასასრულებელი ამ იტერაციებს შორის სწორად მიხვდი yes.gif

ანუ უფრო კონკრეტულად რომ გითხრა(სრი თუ გაუგებრად გადმოვცემ)

თითოეულმა შესვლამ ლუპში
-უნდა გაიაროს ავტორიზაცია
-მერე გადავიდეს სხვა ლინკზე
-მერე იქ რაღაცეები იჩალიჩის
done

და წავა შემდეგ iteration ზე იგივე მოქმედებისთვი

მადლობა ჩავუჯდები საღამოს კიდე alk.gif


QUOTE
ანუ შეგიძლია მოაცდევიო მანამ სანამ ელემენტი არ არის დაკლიკებადი ან ელემენტი არ გამოჩნდება ან რაიმე კლასი არ აქვს ელემენტს ან რავი ყველაფერი შეგიძლია გაუწერო მაგ კონდიციებით და სანამ არ დაკმაყოფილდება წინ არ წავა პროცესი.


აი ეს ლოგიკა მომეწონა
ბოლო მოქმედებას დაუსატკავდეს
ჩემს შემთხვევაში ამას:
-მერე იქ რაღაცეები იჩალიჩის
და მერე გააკეთოს continue

მოკლედ დავალაგებ რამსებს
cry.gif

Posted by: RexxaR 17 Aug 2019, 20:38
QUOTE
მადლობა ჩავუჯდები საღამოს კიდე 


You are welcome


QUOTE
თითოეულმა შესვლამ ლუპში
-უნდა გაიაროს ავტორიზაცია
-მერე გადავიდეს სხვა ლინკზე
-მერე იქ რაღაცეები იჩალიჩის
done


თუ იმავე საიტზე ხდება ეს ყველაფერი ავტორიზაციის გავლა არ გჭირდება ყოველ ჯერზე. უბრალოდ მიაკითხე პირდაპირ ახალ გვერდს

Posted by: @Schizophrenic 17 Aug 2019, 21:24
exe ფაილად ყველაზე პატარა ზომაში რომელ კონვერტერს გადაყავს? pyinstaller-ით 5მბზე დაბლა არ შვება 1 ხაზ კოდსაც, პითონის ფაილი ვიცი რომ კილობაიტებად არ გადავა მარა, მაქსიმალურად პატარა ზომა მჭირდება თუ იცით რამე მასწავლეთ

Posted by: RexxaR 17 Aug 2019, 22:09
@Schizophrenic

არამგონია მეტად შეამცირო, მეც 5 მბ ნაკლები არ მქონია არასდროს

Posted by: DoomDev 17 Aug 2019, 22:45
QUOTE
თუ იმავე საიტზე ხდება ეს ყველაფერი ავტორიზაციის გავლა არ გჭირდება ყოველ ჯერზე. უბრალოდ მიაკითხე პირდაპირ ახალ გვერდს


no.gif
მულტი იუზერები არიან
და მიცემული თასქისთვის აუცილებელი
პირობაა ავტორიზებული იყოს

Posted by: RedShark 17 Aug 2019, 22:58
@Schizophrenic

გაითვალისწინე რომ ეგ კონვერტერები კოდთან ერთად ვირტუალურ მანქანასაც ფუთავს ერთ ფაილში. 5 მბ-ზე ქვემოთ არა მგონია გამოვიდეს.

Posted by: @Schizophrenic 17 Aug 2019, 23:49
QUOTE
გაითვალისწინე რომ ეგ კონვერტერები კოდთან ერთად ვირტუალურ მანქანასაც ფუთავს ერთ ფაილში. 5 მბ-ზე ქვემოთ არა მგონია გამოვიდეს.

C++ გადავწერე 80 კილობაიტია biggrin.gif

Posted by: NinjaRacer 18 Aug 2019, 10:44
@Schizophrenic
QUOTE
C++ გადავწერე 80 კილობაიტია biggrin.gif

ეს იბაზრე იმენა :დ


ეს დღეები ძალიან შორს ვიყავი კოდისგან :დ

სამსახურში დავტოვე რაღაც კოდები დავწერე ხუთშაბათს ორშაბათს უნდა მივამთავრო.

locking, IPC და ეგეთ თემებს ზოგადად გადავურბინე.

ეს კოდი წინა კვირისაა რომელიც ამ 5000-დან 200 ლინკი მოაქვს, ერთი ლუპია დასამატებელი და 5000-ვეს წამოიღებს. ოღონდ სწრაფი არანაირად არაა.
CODE

#!/usr/bin/python3

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import requests
from time import sleep
import selenium


url = 'https://codewithme.com/sign_in'


chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--start-maximized')
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get(url)
user_email = browser.find_element_by_id('user_email')
user_email.send_keys('your_username@email.com')
user_password = browser.find_element_by_id('user_password')
user_password.send_keys('your_password')
user_password.submit()
course_button = browser.find_element_by_link_text('Courses')
course_button.click()

react_course = browser.find_elements_by_class_name('course-box-image')
react_course[4].click()
browser.implicitly_wait(5)
each_video = browser.find_elements_by_xpath(
   "//span[@class='lecture-name']")

dl_links = []

for i in range(7,len(each_video)):
   browser.implicitly_wait(30)
   each_lecture = browser.find_elements_by_xpath(
       "//span[@class='lecture-name']")
   each_lecture[i].click()
   try:
       lecture_link = browser.find_element_by_class_name('download').get_attribute('href')  # working
       dl_links.append(lecture_link)
   except Exception as exc:
       continue
   browser.implicitly_wait(20)
   back_button = browser.find_element_by_class_name("fa-angle-left")
   back_button.click()
   browser.implicitly_wait(20)
   sleep(0.1)


with open('links.txt', 'w') as link_file:
   link_file.write('\n'.join(dl_links))

Posted by: @Schizophrenic 18 Aug 2019, 11:16
QUOTE
ეს იბაზრე იმენა :დ

პატარა კოდი მქონდა :დ

Posted by: NinjaRacer 18 Aug 2019, 11:51
QUOTE
პატარა კოდი მქონდა :დ


სწრაფი კოდი გინდა პითონში?

გადაწერე სი/სიპიპი-ში.

მარტივად biggrin.gif

Posted by: RexxaR 18 Aug 2019, 12:35
QUOTE
ეს კოდი წინა კვირისაა რომელიც ამ 5000-დან 200 ლინკი მოაქვს, ერთი ლუპია დასამატებელი და 5000-ვეს წამოიღებს. ოღონდ სწრაფი არანაირად არაა.


სწრაფი ფიზიკურად ვერ იქნება ვერასდროს სელენიუმის პონტში ვამბობ

პირდაპირი სქრეპინგი არ გიცდია? ხო არ დაგბლოკეს უკვე biggrin.gif


PS:

user posted image

implicit_wait-ი მხოლოდ ერთჯერადად უნდა გაიწეროს, შენ რომ რამოდენიმე ადგილას გიწერია ისე არ მუშაობს როგორც გგონია.

თუ რაიმეზე დალოდება გინდა https://selenium-python.readthedocs.io/waits.html მოდული გამოიყენე

user posted image

Posted by: NinjaRacer 18 Aug 2019, 13:38
QUOTE
implicit_wait-ი მხოლოდ ერთჯერადად უნდა გაიწეროს, შენ რომ რამოდენიმე ადგილას გიწერია ისე არ მუშაობს როგორც გგონია.

ვიცი ეგ

მანდ დაჟე თავში ერთი 300 წამიანი უნდა მიმეცა და ეგ იყო. პროსტა რაღაცეები რო არ მუშაობდა. იმის გამო რომ სწრაფად იტვირთებოდა და DOM არ იყო მთლიანად აგებული რაღაც დატაზე არ მქონდა წვდომა (ამიტომ დამჭირდა სლიფი 0.1 წამი) და დავიწყე ჩალიჩი რომ გამერკვია და მერე არ წავშალე.
ეგ როგორ მუშაობს მერე წავიკითხე და მივხვდი რომ ერთხელ უნდოდა.


ჰო მულტიპროცესინგზე რაც დაწერე არ მიპასუხია.

მულტისტრედინგი პროცესზე სწრაფი არის და შეარდ მემორიც აქვს და ამიტომ გინდა locking(mutex), ასევე race condition-ებისგანაც უნდა დაიცვა თავი
(ეს ვიგულისხმე შარში) მაგრამ მაგას აქვს ერთი დიდი ლიმიტი. GIL
ყველა სრედი მიდის არა პარალელურად არამედ მონაცვლეობით, პროცესებზე კიდევ:

1. იყენებ ყველა ქორს ბოლომდე. (სრედინგზე მარტო ერთ ქორს იყენებ რეალურად)
2. კონტექსტ სვიჩები ძალიან ძვირი ოპერაციაა. ძალიან ნელი და ძალიან არაეფიშენთი.
3. გაქვს ნამდვილი პარალელიზმი და არა მოჩვენებითი, როგორც სრედინგზე.


ამიტომ რაღაც შემთხევებში პროცესებს ვერანაირად ვერ აჯობებს.
დავანებოთ request-ების გაგზავნას თავი.
მაგას while ლუპით დავწერთ და წამში მილიარდ რექუესტს გავაგზავნი, სიტყვაზე ან რამე სხვა უკეთთესი მეთოდით.

ზოგადად ვამბობდი მე რომ პროცესინგი უფრო სწრაფია. იმიტომ რომ კი ბატონო მეტი მეხსიერება მიაქვს. კი არ აქვთ ერთმანეთის დატაზე წვდომა, ნუ თუ შვილი არაა იმ პროცესის. შვილებს პარენტის დატაზე აქვთ წვმოდა. კი გინდა IPC, მაგრამ რეალურად სრედინგი არის 1 ქორზე შეზღუდული, როცა მე 8 ქორი მაქვს

8 > 1

არა არავის დავუბლოკივარ.

თავიდან როცა დავწერე ცოტა სხვანაირად 300 რექუესტზე მეტი რომ გავუგზავნე წამში მითხრა სლოუ დაუნო და ცოტახანი ტაიმატუში გამიშვა სერვერმა მერე გადავაკეთე და გასწორდა gigi.gif

სკრეპინგით კი ვიფიქრე მარა ვერანაირად ვერ გამოვდიდა ეგ ამბავი (მე მგონი biggrin.gif)


მანდ ვიდეოზე თუ არ დააკლიკე და ეგ საიტი თუ არ გახსენი ლექცია ისე არამგონია გიახსნას ეგ ერთი და მეორე პროსტა სელენიუმით ჩალიჩის მურამი მქონდა. ტესტინგში გამოვიყენებ მერე რაღაცეებზე.

ეს ბოლო არის მუშა კოდი
https://github.com/gurguration/Useful-Python-scr1pts/blob/master/threaded_downloader.py

Posted by: RexxaR 18 Aug 2019, 14:19
QUOTE
დავანებოთ request-ების გაგზავნას თავი.


ზუსტად ვებ სქრეპინგის პონტში დავწერე რო thread-ები გაცილებით ეფექტურია, მილიონჯერ. თორე ზოგადად რასაც წერ მართალი ხარ, კონკრეტულად სქრეპინგ თასქებშია კარგი thread-ები

მიზეზი:

როდესაც რექუესტს აგზავნი საიტზე მომენტალურად არ ხდება რესპონსი ხო თავისთავად (ჭირდება მილიწამებიდან ზემოთ ძირითადად 1 წამის რეინჯში), შესაბამისად სრეადინგი (ან ასინქრონული სქრეპინგი) არის გაააცილებით ეფექტური და სწრაფი 1 კორზე ვიდრე მხოლოდ მულტიპროცესინგზე დაკიდებული სქრეპინგი თუნდაც 32 კორზე. იმიტო რო შეიძლება 100 და მეტი სრეადი მქონდეს გაშვებული პარალელურად.

ანუ შენს შემთხვევაში პროცესინგი ჯობდა ცალსახად იმიტო რო ვიდეოს იწერ თითო პროცესით და დაყოვნება ფიზიკურად არ გაქვს, აი მაგ შემთხვევაში რომ სრეადინგი გამოიყენო ვერანაირ ბენეფიტს ვერ მიიღებ გარდა ტასკიდან ტასკზე მოხტუნავე პროცესორისა, შესაბამისად ნელი იქნებოდა

QUOTE
მაგას while ლუპით დავწერთ და წამში მილიარდ რექუესტს გავაგზავნი, სიტყვაზე ან რამე სხვა უკეთთესი მეთოდით.


ვაილ ლუპით მილიარდ რექუესტს ვერ გააგზავნი 1 წამში შანსი არაა თუ ასინქრონულობა/პარალელიზმი არ ჩართე საქმეში

QUOTE
სკრეპინგით კი ვიფიქრე მარა ვერანაირად ვერ გამოვდიდა ეგ ამბავი (მე მგონი )


თუ გინდა მომე წვდომა და გამოვიყვან 99%

Posted by: NinjaRacer 18 Aug 2019, 14:28
RexxaR
QUOTE
როდესაც რექუესტს აგზავნი საიტზე მომენტალურად არ ხდება რესპონსი ხო თავისთავად (ჭირდება მილიწამებიდან ზემოთ ძირითადად 1 წამის რეინჯში), შესაბამისად სრეადინგი (ან ასინქრონული სქრეპინგი) არის გაააცილებით ეფექტური და სწრაფი 1 კორზე ვიდრე მხოლოდ მულტიპროცესინგზე დაკიდებული სქრეპინგი თუნდაც 32 კორზე. იმიტო რო შეიძლება 100 და მეტი სრეადი მქონდეს გაშვებული პარალელურად.

ჰო როცა ქსელთან გაქვს შემთხვევა 100% ეგრეა. ლეიტენსები გაქვს და ტყუილად პროცესების დასპაუნება რესურის ფლანგვაა.
როცა სტრიმი მოდის მანდ უკვე ხტუნაობა ზედმეტია ეგეც მართალია.


QUOTE
ვაილ ლუპით მილიარდ რექუესტს ვერ გააგზავნი 1 წამში შანსი არაა თუ ასინქრონულობა/პარალელიზმი არ ჩართე საქმეში



ზემოთ რაკოდიც დავდე კაკრაზ ვაილ ლუპი ამოძრავებს მაგათ მთელი სისწრაფით (1 ქორს რაც შეუძლია)
ანუ სანამ Queue-ში მაქვს დარჩენილი ლინკები მანამდე გიჟივით (100%-ით) ამოწურავს 1 ქორის შესაძლებლობებს ამ 3 სრედის მეშვეობით.

არ დამითვლია თანაფარდობა, რამდენი სრედი ჯობია რამდენს ქორზე და რამდენ პროცესზე სიმართლე გითხრა. კაკრაზ პროცესინგი გინდა როცა ბევრი რექუესტის გაგზავნა გინდა.
თითო ქორზე თითო while loop და 100% ამოწურავ ყველა ქორს. ეგრე არაა?

QUOTE
თუ გინდა მომე წვდომა და გამოვიყვან 99%

სამსახურის კომპზე აქვს თანამშრომელს ქრედენშალები თორე მოგცემდი smile.gif
თუ გამოყვანადია მეც გამოვიყვან 100% smile.gif უბრალოდ როგორც გითხარი არც სრედინგში არც პროცესინგში და არც ეისინქში.
კარგად არ მიმუშავია. ყველა გაომიყენებია. მარტივი კოდი დამიწერია დავალება შემმისრულებია მგრამ 100% რომ ამომეწურის ყველას შესაძლებლობა ეგრე არა. არც სქრეფინგი არ მიჩალიჩია ბევრი. ამიტომ არ ვიცოდი თუ გამოყვანადია.
მაგაზეც წავივარჯიშებ. ჰოდა ორშაბათი- თუმმოვიცალე ვიზამ ან სამშაფათს და წავივარჯიშოთ არ იქნება ნამდვილად ცუდი smile.gif

* * *
RexxaR
მადლობა ძალიან დამეხმარე ისე smile.gif <3
ანეეეს რო დავუწერე აქ ამ თემაში,
lambda, generator, asyncio, multithreading, multiprocessing კაი მეთქი ეგ დებილიბისთვისაა, MIT არ ასწავლისო biggrin.gif ჩეკიოზე კიდევ კარგი დამიჯერა givi.gif


მე კიდევ მგონი რომ მთელი პითონი asyncio-ს გარშემო დაიწყებს ტრუალს. ნუ კიდევ ბევრი რამეა რაც ამ ენას აცოცხლებს და ძალიან მაგარს ხდის მაგრამ ერთერთი ეგაა.



ეს კაცი ძაან ჯიგაროა. სრედებზე რო ჯოინს აკებთებ ან queue-ზე ამ კაცის დაწერილია ეგ API და არამარტო ეგ პითონის ალბათ 30% ამან დაწერა დანარჩენი Guido-მ (პითონის შემქნელმა მამამ givi.gif)

Posted by: RexxaR 19 Aug 2019, 11:38
QUOTE
მადლობა ძალიან დამეხმარე ისე  <3


რაში? biggrin.gif მეღადავები?

Posted by: NinjaRacer 19 Aug 2019, 11:40
RexxaR
QUOTE
რაში? biggrin.gif მეღადავები?

რას გეღადავები კაცო, ბევრი რამე გავიგე და გავიაზრე ახალი + თან გამოცდილებაც რო გაგვიზიარე კაია.

არ გეღადავები.

Posted by: NinjaRacer 20 Aug 2019, 19:03
https://docs.python.org/3/library/ipc.html


ამას ვუზივარ,

ადრე ტორნადოზე რაღაც დავწერე და გული გამისკდა თავიდან ისეთი რთული იყო. ახლა ბევრად დალაგებულად გავდივარ.

ეისინქი 50% მაინც არის ამ ენის. ჰოდა თავიდან ბოლომდე უნდა დავუთმო ერთი 10 დღე.

Posted by: Lilith 20 Aug 2019, 19:11
NinjaRacer
უჰ, ტორნადოს ენაცვალოს ჩემი თავი smile.gif სხვას არც ვიყენებ, flask-ის სწავლა მინდოდა რამდენჯერმე, მაგრამ ისევ და ისევ tornado forever bis.gif

Posted by: NinjaRacer 20 Aug 2019, 19:50
Lilith

YEP up.gif

ხო 1 თვე წავიმუშავე odoo-ზე, ცოტა ფლასკი, ცოტა ჯდანგო, ერთხელ wsgi მოდულითაც ვიჩალიჩე პატარა მეილ სერვერი, მე რავიჩალიჩე python cookbook 3-ში იყო მზა კოდი და სავარჯიშოსავით გადავწერე.
ყველა ფრეიმვორკი მომეწონა მაგრამ ტორნადო ძმაა. 10 000 req/sec შეუძლია გაატაროს. ერთი სრედშია ჩაკეტილი. ყველა asyncio-ს კოდი და ბიბლიოთეკის მხარდაჭერა აქვს. რა გინდა მეტი). დახასიათებაც ეგეთი უნდა.

ფბ-ს დაწერილია და მერე გააოფესნსორსა. სამწუხარდ კარგად არცერთზე არ მიმუშავია რა :/ პატარ-პატარა-რაღაცეები ვიჩალიჩე სხვისი კოდი გადავაკეთე და ა.შ აი 0 -დან ჯერ არა.

იქეთ თვეში მინდა დავწერო multicast igmp proxy router-ი, რომელიც რომელიმე არსებულ iptv-ს სერვისს დაუკავშირდება.
ექნება ჩენელების საბსქრიფშენი, ერთროულად რამდენიმე ჩენელის ნახვაც უნდა შეეძლოს და ეს ყველაფერი უნდა იყოს raspbery pi-ზე და ტორნადოს გამოვიყენებ ვებისთვის რათქმაუნდა და უნდა შეეძლოს რეტრანსალაცია/გასტრიმვა ამ ყველაფრის. ჯერ ვერ ჩამოვყალიბდი მეც smile.gif
* * *
საკუთარ myvideo-ს ვხსნი bis.gif


:dddddd

Posted by: RexxaR 22 Aug 2019, 09:52
QUOTE
საკუთარ myvideo-ს ვხსნი 


biggrin.gif

დაწერე რამე?

Posted by: NinjaRacer 22 Aug 2019, 10:05
RexxaR
არა დღეს მეორე დღეა ასინქიოს ვუზივარ. ცოტა კარგად და სიღრმისეულად მინდა გავერკვე.
gevent-იც მაინტერესებს. aiohttp და ყველაფერი რაც აისინქს ეხება. ცოტა ხადავოი რაცაა.

იმიტომ რომ მართლა საჭირო თემაა საინტერესოც და პითონს საერთოდ არ გავს.
უფრო სწორედ ზუსტად პითონიკ სტილშია გაკეთებული ძალიან რთული რაღაც. JS-ში სულ სხვანაირადაა.
call back ჰელები და რამეები :დ

პითონი უნდა ვისწავლო მაქსიმალურად ბოლომდე. მერე C-ი და დავაექსთენდებ ხოლმე ან კოდს ჩავასწორებ ქორში თუ დამჭირდა :დ

კაი ამბიციები მაქვს ხო? biggrin.gif'
ეურო პითონის ვიდეობს ვუყურებდი გუშინ დილამდე. ესინქზე ერთი 5 მოსაუბრეა.

არ მინდა ეს AI და მაშინ ლერნინგი არ მაინტერესებს და რავქნა. lol.gif
ჩავაცივდი რაღაცას ვსიო. პიზდეცი ექნება gigi.gif

Posted by: RexxaR 22 Aug 2019, 10:09
NinjaRacer
QUOTE
კაი ამბიციები მაქვს ხო?



თეთრი შურით მშურს შენი მიზანმიმართულობის.

ეგ ამბიციებია ზუსტად წარმატების და განვითარების მკვებავი

Posted by: NinjaRacer 22 Aug 2019, 10:12
RexxaR
QUOTE
თეთრი შურით მშურს შენი მიზანმიმართულობის.

მადლობა.
არაფერიც
ჩემი მკვებავი ქომუნითია!!! :DDDDD

თუნდაც ეს პატარა პითონიკ ქომუნითი და საინტერესო ხალხი თუნდაც შენნაირი wink.gif

და კიდევ OCD -ალბათ.
მადლობა.

Posted by: RexxaR 22 Aug 2019, 15:28
QUOTE
call back ჰელები და რამეები :დ


აი ეს 1.5 წლის წინ დავწერე მგონი და ახლა მომიწია რაღაცის გადახედვა და პირღია ვუყურებ როგორ დავწერე ეს თქო

ასინქრონული ჰელის გამოა ზუსტად ამხელა ჰენდლერები დანესტილი

CODE

var ACCR_DATE,
   START_TIME,
   REMAINING_ITEMS,
   ACCR_DATE_EXCHANGE_RATE = 0,
   PARENT_SITE = '/sites/accounting/Borrowings',
   PRINC_LEDGER = 'Principal Ledger',
   INT_LEDGER = 'Interest Ledger';

functi0n round(num) {
   return Math.round(num * 10 * 10) / 100;
}

functi0n num_to_str(num) {
   return round(num).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}

functi0n clone_date(date) {
   return new Date(date.getTime());
}

functi0n get_day_diff(old_date, new_date) {
   return (new_date - old_date) / 86400000;
}

functi0n date_to_str(date, format) {
   if (format === 'ddmmyyyy') {
       return ('0' + date.getDate()).slice(-2) + '' + ('0' + (date.getMonth() + 1)).slice(-2) + '' + date.getFullYear();
   } else if (format === 'dd-mm-yyyy') {
       return ('0' + date.getDate()).slice(-2) + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + date.getFullYear();
   } else if (format === 'iso') {
       return date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2) + 'T00:00:00Z';
   }
}

functi0n is_leap_year(year) {
   return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
}

functi0n get_month_days(month, year) {
   return [31, is_leap_year(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] || 0;
}

functi0n to_date(date_str) {
   date_str = date_str.split('/');
   if (date_str.length === 3 && date_str[1] > 0 && date_str[1] <= get_month_days(date_str[0]-1, date_str[2])) {
       return new Date(date_str[2], date_str[0]-1, date_str[1]);
   }
   return 0;
}

functi0n add_month(date) {
   var old_year = date.getFullYear(),
       old_month = date.getMonth(),
       old_day = date.getDate(),
       new_year = old_month === 11 ? old_year + 1 : old_year,
       new_month = old_month === 11 ? 0 : old_month + 1,
       new_month_days = get_month_days(new_month, new_year),
       new_day = old_day > new_month_days ? new_month_days : old_day;

   return new Date(new_year, new_month, new_day);
}

functi0n subtract_month(date) {
   var old_year = date.getFullYear(),
       old_month = date.getMonth(),
       old_day = date.getDate(),
       new_year = old_month === 0 ? old_year - 1 : old_year,
       new_month = old_month === 0 ? 11 : old_month - 1,
       new_month_days = get_month_days(new_month, new_year),
       new_day = old_day > new_month_days ? new_month_days : old_day;

   return new Date(new_year, new_month, new_day);
}

functi0n on_fail(sender, args) {
   document.getElementById('accr_btn').disabled = false;
   document.getElementById('passed_time').innerText = num_to_str((new Date() - START_TIME) / 1000) + ' წამი';
   document.getElementById('proc_state').innerText = 'დასრულდა ხარვეზით: ' + args.get_message() + args.get_stackTrace();
}

functi0n chk_rem_itms() {
   if (REMAINING_ITEMS === 0) {
       document.getElementById('accr_btn').disabled = false;
       document.getElementById('passed_time').innerText = num_to_str((new Date() - START_TIME) / 1000) + ' წამი';
       document.getElementById('proc_state').innerText = 'დასრულდა წარმატებით';
   }
}

functi0n add_int_ledger_item(vals) {
   var ctx = new SP.ClientContext(PARENT_SITE),
       lst = ctx.get_web().get_lists().getByTitle(INT_LEDGER),
       ici = new SP.ListItemCreationInformation(),
       itm = lst.addItem(ici);
   itm.set_item('Title', vals[0]);
   itm.set_item('Investor_x0020_Full_x0020_Name_x', vals[1]);
   itm.set_item('Investor_x0020_Full_x0020_Name_x0', vals[2]);
   itm.set_item('Transaction_x0020_Date', vals[3]);
   itm.set_item('Transaction_x0020_Type', vals[4]);
   itm.set_item('Currency', vals[5]);
   itm.set_item('Amount', vals[6]);
   itm.set_item('Memo', vals[7]);
   itm.set_item('Transaction_x0020_Code', vals[8]);
   itm.set_item('USD_x002f_GEL_x0020_Rate', vals[9]);
   itm.set_item('Amount_x0020_in_x0020_GEL', vals[10]);
   itm.update();
   ctx.load(itm);
   ctx.###cuteQueryAsync(
       functi0n() {
           REMAINING_ITEMS -= 1;
           chk_rem_itms();
       },
       on_fail
   );
}

functi0n set_daily_accr(itm) {
   var loan = itm.get_item('Title'),
       currency = itm.get_item('Currency'),
       accr_day = itm.get_item('Interest_x0020_Accrual_x0020_Day'),
       accr_type = itm.get_item('Interest_x0020_Accrual_x0020_Typ'),
       rate_gross = itm.get_item('Monthly_x0020_interest_x0020_rat'),
       investor_name_geo = itm.get_item('Investor_x0020_Full_x0020_Name_x'),
       investor_name_eng = itm.get_item('Investor_x0020_Full_x0020_Name_x0'),
       tr_code = loan + '_' + date_to_str(ACCR_DATE, 'ddmmyyyy');
   (functi0n() {
       var ctx = new SP.ClientContext(PARENT_SITE);
       var lst = ctx.get_web().get_lists().getByTitle(INT_LEDGER);
       var cq = new SP.CamlQuery();
       cq.set_viewXml("<View><Query><Where><Eq><FieldRef Name='Transaction_x0020_Code'/><Value Type='Text'>"+tr_code+"</Value></Eq></Where></Query></View>");
       var itms = lst.getItems(cq);
       ctx.load(itms, 'Include(ID)');
       ctx.###cuteQueryAsync(
           functi0n() {
               if (itms.get_count() === 0) {
                   (functi0n() {
                       var ctx = new SP.ClientContext(PARENT_SITE);
                       var lst = ctx.get_web().get_lists().getByTitle(PRINC_LEDGER);
                       var cq = new SP.CamlQuery();
                       cq.set_viewXml("<View><Query><Where><And><Eq><FieldRef Name='Title'/><Value Type='Computed'>"+loan+"</Value></Eq><Leq><FieldRef Name='Transaction_x0020_Date'/><Value Type='DateTime' IncludeTimevаlue='FALSE'>"+date_to_str(ACCR_DATE, 'iso')+"</Value></Leq></And></Where></Query></View>");
                       var itms = lst.getItems(cq);
                       ctx.load(itms, 'Include(Amount)');
                       ctx.###cuteQueryAsync(
                           functi0n() {
                               var itm,
                                   princ_bal = 0,
                                   i = itms.get_count();
                               while (i--) {
                                   itm = itms.getItemAtIndex(i);
                                   princ_bal += itm.get_item('Amount');
                               }
                               princ_bal = round(princ_bal);
                               if (princ_bal > 0) {
                                   (functi0n() {
                                       var ctx = new SP.ClientContext(PARENT_SITE);
                                       var lst = ctx.get_web().get_lists().getByTitle(INT_LEDGER);
                                       var cq = new SP.CamlQuery();
                                       cq.set_viewXml("<View><Query><Where><And><Eq><FieldRef Name='Title'/><Value Type='Computed'>"+loan+"</Value></Eq><Leq><FieldRef Name='Transaction_x0020_Date'/><Value Type='DateTime' IncludeTimevаlue='FALSE'>"+date_to_str(ACCR_DATE, 'iso')+"</Value></Leq></And></Where></Query></View>");
                                       var itms = lst.getItems(cq);
                                       ctx.load(itms, 'Include(Amount)');
                                       ctx.###cuteQueryAsync(
                                           functi0n() {
                                               var itm,
                                                   int_bal = 0,
                                                   i = itms.get_count();
                                               while (i--) {
                                                   itm = itms.getItemAtIndex(i);
                                                   int_bal += itm.get_item('Amount');
                                               }
                                               var int_calc_base = accr_type === 'Simple' ? princ_bal : princ_bal + int_bal;
                                               var next_pmt_date,
                                                   prev_pmt_date;
                                               if (accr_day > 28) {
                                                   if (ACCR_DATE.getDate() < 29 && ACCR_DATE.getDate() < accr_day) {
                                                       var accr_date_days = get_month_days(ACCR_DATE.getMonth());
                                                       next_pmt_date = accr_day > accr_date_days ? new Date(clone_date(ACCR_DATE).setDate(accr_date_days)) : new Date(clone_date(ACCR_DATE).setDate(accr_day));
                                                       prev_pmt_date = subtract_month(next_pmt_date);
                                                   } else {
                                                       prev_pmt_date = new Date(clone_date(ACCR_DATE).setDate(accr_day));
                                                       next_pmt_date = add_month(prev_pmt_date);
                                                   }
                                               } else {
                                                   if (ACCR_DATE.getDate() < accr_day) {
                                                       next_pmt_date = new Date(clone_date(ACCR_DATE).setDate(accr_day));
                                                       prev_pmt_date = subtract_month(next_pmt_date);
                                                   } else {
                                                       prev_pmt_date = new Date(clone_date(ACCR_DATE).setDate(accr_day));
                                                       next_pmt_date = add_month(prev_pmt_date);
                                                   }
                                               }
                                               var daily_rate = accr_type === 'Compounded 365' ? rate_gross / 365 : rate_gross / 12 / get_day_diff(prev_pmt_date, next_pmt_date);
                                               var int_charge = int_calc_base * daily_rate;
                                               if (int_bal < 0 && -int_bal > int_charge * 0.95) {
                                                   (functi0n() {
                                                       var ctx = new SP.ClientContext(PARENT_SITE);
                                                       var lst = ctx.get_web().get_lists().getByTitle(INT_LEDGER);
                                                       var cq = new SP.CamlQuery();
                                                       cq.set_viewXml("<View><Query><Where><And><And><Eq><FieldRef Name='Title'/><Value Type='Computed'>"+loan+"</Value></Eq><Eq><FieldRef Name='Transaction_x0020_Type'/><Value Type='Text'>Interest Payment</Value></Eq></And><Leq><FieldRef Name='Transaction_x0020_Date'/><Value Type='DateTime' IncludeTimevаlue='FALSE'>"+date_to_str(ACCR_DATE, 'iso')+"</Value></Leq></And></Where><OrderBy><FieldRef Name='Transaction_x0020_Date' Ascending='FALSE'/></OrderBy></Query></View>");
                                                       var itms = lst.getItems(cq);
                                                       ctx.load(itms, 'Include(Transaction_x0020_Date)');
                                                       ctx.###cuteQueryAsync(
                                                           functi0n() {
                                                               var itm = itms.getItemAtIndex(0);
                                                               var exch_rate_date = itm.get_item('Transaction_x0020_Date');
                                                               (functi0n() {
                                                                   var ctx = new SP.ClientContext('/sites/accounting');
                                                                   var lst = ctx.get_web().get_lists().getByTitle('Official NBG Rates');
                                                                   var cq = new SP.CamlQuery();
                                                                   cq.set_viewXml("<View><Query><Where><Eq><FieldRef Name='Date' IncludeTimevаlue='FALSE'/><Value Type='DateTime'>"+date_to_str(exch_rate_date, 'iso')+"</Value></Eq></Where></Query></View>");
                                                                   var itms = lst.getItems(cq);
                                                                   ctx.load(itms, 'Include(USD)');
                                                                   ctx.###cuteQueryAsync(
                                                                       functi0n() {
                                                                           var itm = itms.getItemAtIndex(0);
                                                                           var exchange_rate = itm.get_item('USD');
                                                                           var memo = accr_type === 'Compounded 365' ? '=' + int_calc_base + '*(' + rate_gross + '/365)' : '=' + int_calc_base + '*(' + rate_gross + '/12)/' + date_to_str(next_pmt_date, 'dd-mm-yyyy') + '-' + date_to_str(prev_pmt_date, 'dd-mm-yyyy');
                                                                           add_int_ledger_item([loan,investor_name_geo,investor_name_eng,ACCR_DATE,'Interest Accrual',currency,int_charge,memo,tr_code,exchange_rate,int_charge * exchange_rate]);
                                                                       },
                                                                       on_fail
                                                                   );
                                                               })();
                                                           },
                                                           on_fail
                                                       );
                                                   })();
                                               } else {
                                                   if (ACCR_DATE_EXCHANGE_RATE === 0) {
                                                       (functi0n() {
                                                           var ctx = new SP.ClientContext('/sites/accounting');
                                                           var lst = ctx.get_web().get_lists().getByTitle('Official NBG Rates');
                                                           var cq = new SP.CamlQuery();
                                                           cq.set_viewXml("<View><Query><Where><Eq><FieldRef Name='Date' IncludeTimevаlue='FALSE'/><Value Type='DateTime'>"+date_to_str(ACCR_DATE, 'iso')+"</Value></Eq></Where></Query></View>");
                                                           var itms = lst.getItems(cq);
                                                           ctx.load(itms, 'Include(USD)');
                                                           ctx.###cuteQueryAsync(
                                                               functi0n() {
                                                                   var itm = itms.getItemAtIndex(0);
                                                                   ACCR_DATE_EXCHANGE_RATE = itm.get_item('USD');
                                                                   var memo = accr_type === 'Compounded 365' ? '=' + int_calc_base + '*(' + rate_gross + '/365)' : '=' + int_calc_base + '*(' + rate_gross + '/12)/(' + date_to_str(next_pmt_date, 'dd-mm-yyyy') + ' - ' + date_to_str(prev_pmt_date, 'dd-mm-yyyy') + ')';
                                                                   add_int_ledger_item([loan,investor_name_geo,investor_name_eng,ACCR_DATE,'Interest Accrual',currency,int_charge,memo,tr_code,ACCR_DATE_EXCHANGE_RATE,int_charge * ACCR_DATE_EXCHANGE_RATE]);
                                                               },
                                                               on_fail
                                                           );
                                                       })();
                                                   } else {
                                                       var memo = accr_type === 'Compounded 365' ? '=' + int_calc_base + '*(' + rate_gross + '/365)' : '=' + int_calc_base + '*(' + rate_gross + '/12)/(' + date_to_str(next_pmt_date, 'dd-mm-yyyy') + ' - ' + date_to_str(prev_pmt_date, 'dd-mm-yyyy') + ')';
                                                       add_int_ledger_item([loan,investor_name_geo,investor_name_eng,ACCR_DATE,'Interest Accrual',currency,int_charge,memo,tr_code,ACCR_DATE_EXCHANGE_RATE,int_charge * ACCR_DATE_EXCHANGE_RATE]);
                                                   }
                                               }
                                           },
                                           on_fail
                                       );
                                   })();
                               } else {
                                   REMAINING_ITEMS -= 1;
                                   chk_rem_itms();
                               }
                           },
                           on_fail
                       );
                   })();
               } else {
                   REMAINING_ITEMS -= 1;
                   chk_rem_itms();
               }
           },
           on_fail
       );
   })();
}

functi0n run_AAE() {
   START_TIME = new Date();
   ACCR_DATE_EXCHANGE_RATE = 0;
   document.getElementById('passed_time').innerText = '';
   document.getElementById('proc_state').innerText = '';
   ACCR_DATE = to_date(document.getElementById('accr_date').value);
   if (ACCR_DATE && ACCR_DATE < new Date()) {
       document.getElementById('accr_btn').disabled = true;
       document.getElementById('proc_state').innerText = 'მიმდინარეობს, არ დახუროთ ბრაუზერის ფანჯარა დასრულებამდე!';
       var ctx = new SP.ClientContext(PARENT_SITE),
           lst = ctx.get_web().get_lists().getByTitle('Loans Received'),
           cq = new SP.CamlQuery.createAllItemsQuery(),
           itms = lst.getItems(cq);
       ctx.load(itms);
       ctx.###cuteQueryAsync(
           functi0n() {
               var i = REMAINING_ITEMS = itms.get_count();
               while (i--) {
                   set_daily_accr(itms.getItemAtIndex(i));
               }
           },
           on_fail
       );
   } else {
       document.getElementById('proc_state').innerHTML = '<span style="color: #cc6666;">თარიღის ფორმატი ან არასწორია ან არ არის მიმდინარე თარიღზე ნაკლები</span>';
   }
}

Posted by: @Schizophrenic 23 Aug 2019, 16:32
https://www.jobs.ge/ge/?view=jobs&id=232458&fbclid=IwAR1n6C4JnFnzDSPLNKvFaeKNjJIQo96LKiOkEuvS5agn3LWuKB9fTzp2Liw

ML ის უფასო კურსები MaxinAI-სგან lam.gif

Posted by: NinjaRacer 24 Aug 2019, 14:36
@Schizophrenic
აპირებ სიარულს?

აბა ეს კოდი რას იზამს.
სამივე შემთხვევაში
CODE

       # return_when="ALL_COMPLETED")
       # return_when="FIRST_COMPLETED")
       return_when="FIRST_EXCEPTION")



CODE


import asyncio
import time

async def waiter():
   print('hello from infinite sleeper')
   await asyncio.sleep(5000)
   print('waiting on infinity')

async def second_waiter():
   print('hello from second waiter')
   print('waiting to raise exception in 3 seconds...\n')
   await asyncio.sleep(3)
   raise
   print("this shouldn't print")

 
async def third_waiter():
   sleep_time = 2
   print(f"third waiter: sleeping for {sleep_time} seconds")
   await asyncio.sleep(sleep_time)
   print(f'third after {sleep_time} second sleep')


async def main():
   stime = time.time()
   newline = '\n\n\n'
   done,  pending = await asyncio.wait(
       {
           waiter(),
           second_waiter(),
           third_waiter()},
       timeout=10,
       # return_when="ALL_COMPLETED")
       # return_when="FIRST_COMPLETED")
       return_when="FIRST_EXCEPTION")
   print(f"{newline[:2]}Done tasks[{len(done)}]: {done}\n\n Pending tasks[{len(pending)}]: { newline.join([str(x) for x in list(pending)])}")
   print(f'main finished in: {stime - time.time()}')


asyncio.run(main())


f"" სტრინგები შემიყვარდა ძალიან. მაგრამ Perl-ს დაემსგავსა.
სულ პირველი სკრიპტების წერა რო დავიწყე პერლს ვსწავლობდი :დ მაგას გავს.

Posted by: @Schizophrenic 24 Aug 2019, 14:53
QUOTE
აპირებ სიარულს?

არვიცი :X 7-ზე იქნება დიდი ალბათობით ლექციებიო და 7ზე მეც ლექციები მაქ :X იქნებ მოვახერხო რამე, შენ ხოარ გინდა?

Posted by: NinjaRacer 24 Aug 2019, 15:18
@Schizophrenic
სწრაფი ტრანსპორტი არ მაქვს და ვერ ვიჯანჯღარებ 3 საათი გზაში ისედაც ბევრ დროს ვხარჯავ მაგაში.

თან კალკულუსი უნდა.

» სპოილერის ნახვისთვის დააწკაპუნეთ აქ «


თან მეორე სამსახურის მოხოდვას ვაპირებ ფული არ მყოფნის.
* * *
რთულია. წიგნი დამჭირდება ან პროექტი სადაც ვიმუშავებ ეისინქზე.
არაა ადვილი. სტრიმები ტრანპსორტები და პროტოკოლები რო გავმოიყენო დამჭირდება რამე ქუქბუქი.
დოკუმენტაცია მთლიანად წავიკითხე. არაა საკმარისი.

https://vimeo.com/49718712 აი ეგ თემა რაზეც წინა გვერდებზე ვბაზრობდით.

fluent python ეს წიგნი ვნახე ჯერჯერობით მხოლოდ (კაი წიგნია სხვათაშორის) თუ რამე უკეთესი რესურსი იცით სადაც პრაქტიკული და პრაგმატული რეცეპტები იქნება დალინკეთ.


Posted by: NinjaRacer 27 Aug 2019, 00:01
ოფტოპიკი კია მარა ეს ღმერთების ენაა რომ იცოდეთ smile.gif როგორ მომეწონა ჯიგარმაც დაწვა სიტუაცია დღეს და გავიჩალიჩე ერთი low-level ტასკი რაც მაგრად მისწორდება smile.gif givi.gif

CODE

/*
* Program for connecting to an Arduino running the i2c_read_eeprom.ino
*
* Reads the requested number of bytes from the eeprom and saves
* them in a file with the given name
*
* Execute with --help to see instructions.
*
* =============================================================================
*
* Original author(s):
*    Andre Richter, andre.o.richter a t gmail d o t com
*    Lorenzo Cafaro, lorenzo@interstella.net
*
* =============================================================================
*
* This version by me:
*    Diogo Rodrigues, https://github.com/DMRodrigues
*
*/

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#include <getopt.h>

#include "eeprom.h"

int print, ctrlc = 0;
char *file_name = NULL;

void handle_sig(int signum)
{
ctrlc = 1;
}

struct sigaction int_handler = {
.sa_handler = handle_sig,
};

int to_termios_baudrate(unsigned int baudrate)
{
switch (baudrate) {
 case 50:     return B50;
 case 75:     return B75;
 case 110:    return B110;
 case 134:    return B134;
 case 150:    return B150;
 case 200:    return B200;
 case 300:    return B300;
 case 600:    return B600;
 case 1200:   return B1200;
 case 1800:   return B1800;
 case 2400:   return B2400;
 case 4800:   return B4800;
 case 9600:   return B9600;
 case 19200:  return B19200;
 case 38400:  return B38400;
 case 57600:  return B57600;
 case 115200: return B115200;
 case 230400: return B230400;
 default:     return -1;
}
}

static void print_usage(const char *program_name, int flag_print_eeprom)
{
printf("\nUsage: %s [OPTIONS...]\n", program_name);
printf("\n");
printf("  -t, --tty=/dev/*         tty the arduino is connected to.\n");
printf("  -b, --baudrate=N         baudrate of tty. Default sketch is 115200.\n");
printf("  -n, --num-bytes=N[k]     the number of bytes or Kbytes to read from the tty.\n");
printf("  -d, --dev-type=type      read datasheet and see compatible type then set number 1 or 2 [REQUIRED IF NOT DEFAULT].\n");
printf("  -o, --output-file=FILE   name to save FILE. Default is \"eeprom.bin\".\n");
printf("  -f, --format=format      output format (a = ascii, d = dec, h = hex). Default is hexadecimal.\n");
printf("  -p, --print=y/n          print the read content to screen. Default is yes.\n");
printf("  -h, --help               print this screen.\n");
if(flag_print_eeprom)
 print_eeprom();
printf("\nExamples:\n");
printf("  %s -t /dev/ttyACM0 -n 2k -p n -d 1\n", program_name);
printf("  %s -t /dev/ttyACM0 -n 128k -o teste.bin\n", program_name);
printf("  %s -t /dev/ttyACM0 -n 128K -d 2 -o teste.bin\n", program_name);
printf("  %s -t /dev/ttyACM0 -n 256K -p n\n", program_name);
printf("  %s -t /dev/ttyACM0 -n 64k -p n\n", program_name);
printf("  %s -t /dev/ttyACM0 -n 64\n", program_name);
exit(EXIT_FAILURE);
}

int transmit_num_bytes(int fd, unsigned long num_bytes, unsigned char type)
{
unsigned int i;
unsigned char num_bytes_array[5];

/* we only need 4 bytes to send the size to read */
for (i = 0; i < 4; i++)
 num_bytes_array[i] = (unsigned char)((num_bytes >> (i * 8)) & 0xff);

/* and then put type of read/device */
num_bytes_array[i] = type;

return write(fd, num_bytes_array, sizeof(num_bytes_array));
}

unsigned long get_bytes(char* bytes)
{
unsigned long res = 0;
if((bytes[strlen(bytes) - 1] == 'k') || (bytes[strlen(bytes) - 1] == 'K')) {
 char temp_bytes[strlen(bytes) - 1];
 memcpy(temp_bytes, bytes, strlen(bytes) - 1);
 res = atoi(temp_bytes) * 1024; /* convert to bytes */
}
else
 res = atoi(bytes);
return res;
}

int print_option(char* option) {
if((strcmp(option, "y") == 0) || (strcmp(option, "yes") == 0))
 return 1;
return 0;
}

int eeprom_read(int fd, unsigned long num_bytes, char format)
{
errno = 0;
unsigned long i = 0;
unsigned char byte;
FILE *fp = fopen(file_name, "w");

while((i < num_bytes) && !ctrlc) {
 if (read(fd, &byte, sizeof(byte)) < 0) {
  printf("\nError while reading, errno: %s\n", strerror(errno));
  break;
 }

 if(print) {
  switch (format) {
   case 'a':
    printf("0x%06lx: %c\n", i, byte);
    break;
   case 'd':
    printf("0x%06lx: %02d\n", i, byte);
    break;
   case 'h':
    printf("0x%06lx: 0x%02x\n", i, byte);
    break;
   default:
    printf("0x%06lx: 0x%02x\n", i, byte);
    break;
  }
 } else printf("\r%ld %%", ((i*100)/(num_bytes-1)));
 
 if (fwrite(&byte, sizeof(byte), 1, fp) < 0) {
  printf("\nError while writing, errno: %s\n", strerror(errno));
  break;
 }
 
 i++;
}
if(!print)
 printf("\n");

fclose(fp);

return errno;
}

int main(int argc, char *argv[])
{
int fd, next_option, baudrate = B115200;
unsigned long num_bytes = 0;
char format = 0;
char *tty_name = NULL;
unsigned char dev_type = 0;
unsigned char baudrate_user = 0, format_user = 0, file_name_user = 0, print_user = 0;

struct termios tty_attr, tty_attr_orig;
speed_t i_speed, o_speed, user_speed;

extern char *optarg;
const char* short_options = "t:b:n:d:o:f:p:h";
const struct option long_options[] = {
 { "tty",          required_argument, NULL, 't' },
 { "baudrate",     required_argument, NULL, 'b' },
 { "num-bytes",    required_argument, NULL, 'n' },
 { "dev-type",     required_argument, NULL, 'd' },
 { "output-name",  required_argument, NULL, 'o' },
 { "format",       required_argument, NULL, 'f' },
 { "print",        required_argument, NULL, 'p' },
 { "help",         no_argument,       NULL, 'h' },
 { 0,              0,                 0,     0  }
};

/* no argument provided */
if(argc == 1) {
 printf("\n NO ARGUMENTS PROVIDED!\n\n");
 print_usage(argv[0], 0);
 return EXIT_FAILURE;
}

do {
 next_option = getopt_long(argc, argv, short_options, long_options, NULL);
 switch (next_option) {
  case 't':
   tty_name = optarg;
   break;
  case 'b':
   baudrate = to_termios_baudrate(atoi(optarg));
   baudrate_user = 1;
   break;
  case 'n':
   num_bytes = get_bytes(optarg);
   break;
  case 'd':
   dev_type = atoi(optarg);
   break;
  case 'o':
   file_name = optarg;
   file_name_user = 1;
   break;
  case 'f':
   format = optarg[0];
   format_user = 1;
   break;
  case 'p':
   print = print_option(optarg);
   print_user = 1;
   break;
  case 'h':
   print_usage(argv[0], 1);
   break;
  case '?':
   print_usage(argv[0], 1);
   break;
  case -1:
   break;
  default:
   abort();
 }
} while (next_option != -1);

/* check if setup parameters given and valid */
if (!tty_name) {
 printf("\nSorry, you did not provide the name of "
        "your arduino's tty device.\n\n");
 print_usage(argv[0], 0);
}

if (baudrate < 0) {
 printf("\nSorry, you did not provide a valid baudrate.\n\n");
 print_usage(argv[0], 0);
}
user_speed = (speed_t)baudrate;

if (!num_bytes) {
 printf("\nSorry, you did not provide how many bytes you "
        "want to read from the EEPROM.\n\n");
 print_usage(argv[0], 0);
}

if ((dev_type < 0) || (dev_type > 2)) {
 printf("\nSorry, invalid device type for reading.\n");
 print_usage(argv[0], 1);
}
else if((dev_type == 1) && (num_bytes > 2048)) {
 printf("ERROR: trying to read more than available memory!!!\n");
 print_usage(argv[0], 1);
}

if (!format)
 format = 'h';
else if (format != 'a' && format != 'd' && format != 'h') {
 printf("\nSorry, invalid output format specified.\n\n");
 print_usage(argv[0], 0);
}

if (!file_name)
 file_name = "eeprom.bin";

if (!print_user)
 print = 1;

/* After setup parameters print if any fallback to default */
if (!baudrate_user)
 printf("You did not provide a baudrate, defaulting to 115200.\n");
if (!file_name_user)
  printf("You did not provide a output name, defaulting to "
        "\"eeprom.bin\".\n");
if (!format_user)
 printf("You did not specified a output format, defaulting to "
        "h = hexadecimal.\n");
if(!print_user)
 printf("You did not provide a print option, defaulting to yes.\n");

/* Install CTRL^C signal handler */
sigaction(SIGINT, &int_handler, 0);

/* Open tty */
fd = open(tty_name, O_RDWR);
if (fd == -1) {
 printf("Error opening %s: %s\n", tty_name, strerror(errno));
 return EXIT_FAILURE;
}
printf("%s opened.\n", tty_name);

/* Get tty config and make backup */
tcgetattr(fd, &tty_attr);
tty_attr_orig = tty_attr;

/* Configure tty */
i_speed = cfgetispeed(&tty_attr);
if (i_speed != user_speed)
 cfsetispeed(&tty_attr, user_speed);

o_speed = cfgetospeed(&tty_attr);
if (o_speed != user_speed)
 cfsetospeed(&tty_attr, user_speed);

tty_attr.c_cc[VMIN]  = 1; /* Block reads until 1 byte is available */
tty_attr.c_cc[VTIME] = 0; /* Never return from read due to timeout */

tty_attr.c_iflag &= ~(ICRNL | IXON);
tty_attr.c_oflag &= ~OPOST;
tty_attr.c_lflag &= ~(ISIG | ICANON | IEXTEN | ECHO | ECHOE | ECHOK | ECHOCTL | ECHOKE);

if (tcsetattr(fd, TCSANOW, &tty_attr) == -1) {
 printf("Error while setting %s options: %s\n", tty_name, strerror(errno));
 close(fd);
 return EXIT_FAILURE;
}

printf("%s successfully configured.\n", tty_name);

sleep(3); /* Wait a second; Prevents that first byte send to arduino gets corrupted */
/* More time because UN0 resets on opening device
 * maybe using 10uF cap between reset and ground */

if ((transmit_num_bytes(fd, num_bytes, dev_type)) < 0) {
 printf("Error while transfering dump size to arduino: %s\n", strerror(errno));
 tcsetattr(fd, TCSANOW, &tty_attr_orig);
 close(fd);
 return EXIT_FAILURE;
}

if (eeprom_read(fd, num_bytes, format) != 0) {
 printf("Going to remove file with errors\n");
 if (remove(file_name) != 0)
  printf("Unable to delete %s: %s\n", file_name, strerror(errno));
}

/* Revert to original tty config */
if(tcsetattr(fd, TCSANOW, &tty_attr_orig) == -1)
 printf("Error while reverting original tty config: %s\n", strerror(errno));

close(fd);
return EXIT_SUCCESS;
}



i2c პროტოკოლით eeprom-ის დამპს აკეთებს. პროსტა ამ დამპში უნდა ვიპოვო ეხლა ის დატა როგორმე რაც მე მჭირდება რო პრინტერი დავჰაკო smile.gif
პირველად ვაკეთებ ასეთ რამეს სამწუხაროდ. ეს უნდა მექნა 10 წლის წინ. ბლიად ბლიად ბლიად.
* * *
ჯავასკრიპტი, ც და პითონი მკვლელი კომბოა...

[B]ყველაფრის[B] გაკეთებს შეძლებ ამეებით smile.gif

არ აქვს მნიშვნელობა, თუ ხარ გიკი ე.ი არ უნდა მოუსმინო არავის, განსაკუთრებით აროგანტ სირებს. თუ ხარ გიკი ეს სამი ენა უნდა ისწავლო. ვერ ვისწავლი ან რთულია ნახუიზე გაუშვა უნდა. თუ გიკი ხარ ე.ი უეჭველი გაგისწორდება ყველაფერზე მეტად.

You can do it put ur ass into it.


* * *
რადგან დროზე ასეთი დანძრეული მაქვს.
რადგან flow სტეიტი გვინდა ყველას დღეში 5-6 საათი შეუწყვეტლივ (შეუწყვეტლივ არ გამოვა) ამიტომ ეს სხვათაშორის
ისე
https://www.youtube.com/watch?v=IlU-zDU6aQ0

როგორი დაკავებულიც არ უნდა იყო, დრო ყოველთვის არსებობს, თუ არ გაქვს გამოყვან და რაც ძალიან გინდა იმასაც გააკეთებ

Posted by: robox 27 Aug 2019, 01:30
NinjaRacer
გილოცავ ლოუ ლეველ ტასკის მიღებას smile.gif.
მართლაც რომ მაგარ შედეგს იძლევა ც და პითონი ერთად.
თუ რამე გამიკეთებია ემბედიდზე ც ზე ან სხვა ენებზე,პითონს ყოველთვის მაინც ვიყენებ ხოლმე,ან უტილებისთვის ან კონტროლერათ და ასე შემდეგ.

რომელი პრნტერია თერმული პრინტერი ხომ არაა?თუ ეგაა სერიალ პორტზე შეგიძლია დააჯდე(იაფიანებს წესით ყველას ეს ააქვს) და სპეციალური ბრძანებები გაუგზავნო,დაბეჭვდის ,ქაღალდის მოჭრის ფიდლაინის და ასე შემდეგ

Posted by: NinjaRacer 27 Aug 2019, 01:41
robox
მადლობა შენგან გამისწორდა ეს სიტყვები.

პრინტერი მოდელი და რამე არ ვიცი არაა პაპსა მოკლედ და მისი ჩიპი ადვილად არ იჰაკება.

4 ფერი აქვს. იაფფასიანი logic ანალაიზერი მაქვს. რომელიც i2c პროტოკოლს სნიფავს + arduino-ებიც მაქვს ბევრნაირი, მაქვს ბრედბორდი. იმ ტონერის ჩიპზე ჩვენმა ნინჯა ინჟინერმა sdata, sclock-პინებზე მიმაერთა ისე რო პრინტერთან ჩალიჩი არ მომიწევს.

გარდა მაგისა ასევე შეიძლება usb-პორტსაც მოუსმინო tcpdump-ით ჩვეულებრივად ისნიფება. jsp თუ რაღაც პროტოკოლს იყენებენ უმეტესობა.
ეგ იმისთვისაა კარგი რომ მანდ შეიძლება გააგზავნოს, მოდელი, დაბეჭდილი ფურცლების რაოდენობა, და ბოლო გამოყენების თარიღი, რაც მერე ჰქსის დამპის გაანალიზება-დაჰაკვაში დამეხმარება. სტრინგები გამოჩნდება.

ვაფშე ვფიქრობ, ორჯერ ავიღო დამპი დაბეჭდვამდე და დაბეჭდვის მერე. მერე diff გავაკეთო და მერე ჩავასხა მოდიფიცირებული რომი.

ისე ძაან მუღამში ჩამაგდო და ისე უძაანესად გამისწორდა C ახლა და იმ ჯიგარმაც იმენა კოლბაში ჩამსვა ყველა ინგრედიენტი მომცა და ახლა ჩემზეა თუ არ გამოვიყვან და მომპარსე აი ულვაში.

Posted by: robox 27 Aug 2019, 12:33
NinjaRacer

რისთვის გინდა ისე პრინტერის "დაჰაკვა"? მაგის ფირმვეარი გინდა რომ დამოდინგო?რა მიზნით?

საინტერესო ტასკი ჩანს დიდი სიამოვნებით წავეთამაშებოდი მეც რო მქონდეს მსგავსი ტასკი biggrin.gif

Posted by: NinjaRacer 27 Aug 2019, 12:57
robox
QUOTE
საინტერესო ტასკი ჩანს დიდი სიამოვნებით წავეთამაშებოდი მეც რო მქონდეს მსგავსი ტასკი biggrin.gif

ჰმ smile.gif ითხოვე და მოგეცემაო smile.gif ახლა ერთი 3სკენ ჩავუჯდები და სანამ არ გავაკეთებ არ ავდგები.

თუ მოვრჩი ღამემდე. კაი პოსტს გავაკეთებ ისე რომ ორივე ჩავერთოდ და წავეთამაშოთ ასე რომ ზუსტად ვიცი გაგისწორდება, სტეი წიუნედ wink.gif დღეს თუარა ხვალ მაინც ვიზამთ

მიზანი რა არის. ზუსტად ასე მითხრეს. ლოუ ლეველში რო გაერკვეო ცოტა. ჯიგრები biggrin.gif
ის რომ ოთხივე კარტრიჯს აქვს ჩიპი, რომელშიც წერია პატარა რომი, რომელიც ითვლის დაბეჭდილი ფურცლების რაოდენობას. ერთგვარი მთველია ეს ცვლადი. counter. ზოგი დაბეჭდილი წერტილების რაოდენობას ითვლის. ნუ მარტივი ლოგიკაა და სხვადსხვა მწარმოებლები სხვადასხვანაირად აკეთებენ.

ეს იმისთვის ჭირდებათ რომ აღკვეთონ aftermarket ტონერები. ან შენით ტონერის დატენვა.
კარტრიჯი ღირს ლამის ახალი პრინტერის ფასი.

კაი ფასს დავანებოთ თავი, უბრალოდ არ იშოვება ამის არც ჩიპები, არც დაჰაკვის მანუალები და ა.შ. პრაგმატული კუთხე ესაა. მაგრამ ზოგადად C-ც დამჭირდება, I2C პროტოკოლთან მუშაობა და დასნიფვაც და ასევე eeprom-ის დადამპვა.
დადამპვა რას მაძლევს? როცა დამპს აკეთებ. რომს აქვს ჰედერი, სადაც წერია მოდელი, სერიალი და ა.შ აქვს ლოგიკა და აქვს data სადაც ცვლადები ინახება რომელსაც ლოგიკა იყენებს. ჩვენ გვჭირდება ვიპოვოთ ამ ჰექსში ის ვლადი რომელიც ამოძრავებს მთელი ამ პრინტერის ტონერის შემოწმების და კონტროლის ლოგიკა და დავაოვერრაიდოთ უნდა, დავარეზეტოთ.

reset toner chip with arduino რომ დაგუგლო უკეთ წარმოიდგენ რას ვაკეთებ. ტასკი ნამდვილად სასიამოვნო და საინტერესოა, პრაგმატულიცაა, მარტო პრინტერზე არაა. როცა eeprom-თან ჩალიჩს დავამუღამებ ძალიან ბევრი სხვა რამის გაკეთებაც შემეძლება smile.gif რაც ადრე წარმოუდგენელი მეგონა ახლა ბევრად უფრო ახლოა.

I2c პროტოკოლი იმითაა კარგი რომ მარტივია. სულ 2 არხი აქვს. clock და data. ერთ I2c არხზე ზის ოთხივე ტონერი.
ამ პროტოკოლის კომუნიკაციაზე წარმოდგენა რომ გქონდეს აქაა ახსნილი მარტივად.

http://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

ელემენტალურია. მაგალითად სმარტფონის პროცესორი იყენებს რომ თაჩსქრინი დააკავშიროს მიკროკონტროლერთან და აი თითქმის ვყელაფერში გამოიყენება ეს პროტოკოლი. რადგან მარტივია და შეუძლია ერთი არხით ბევრი 'მოწყობილობა' მართოს. აი თუნდაც პრინტერს შეუძლია მუშაობა მიატოვოს და გაიძულოს ახალი ტონერის ყიდვა თუნდაც არის იყოს დაცლილი ბოლომდე. 2000 გვერდს დაბეჭდავ სიტყვაზე და ჩიპმა თუ გადაწყვიტა რო დაიცალა დაიცალა wink.gif ამიტომ ვჰაკავ.
* * *
აუ ერთი დატაცენტრი დაგვებრიდა და მაგის დაფიქსვას ვჩალიჩობ და დღეს არამგონია პრინტერზე რამე ვიჩალიჩო.

Posted by: NinjaRacer 29 Aug 2019, 22:56
იტოგში დავშალე რომი biggrin.gif იმდენად მარტივი იყო რო დაწერაც არ ღირს.

მოკლედ 2K რომი იყო 4 ცალი.

სკანერით დაინახა I2C მისამართები დაინახა ოთხივე,

არდუინოზე a4,a5 აერთებ თუ Nano-ოა, 2560mega თუა მაგას აწერია პირდაპირ sdata, sclock პინებს.
და 3.3v კვება უნდა მისცე ამ პატარა ჩიპს. ნუ გრაუნდიც თავისთავად.

რო გეცოდინება მისამართი მერე პროსტა for loop-ით დაუვლი ყველა მისამართს. wire.h უნდა გამოიყენო, მზა ბიბლიოთეკა არის რომთან საკომუნიცკაციოდ. ძაან ლოუ ლეველში რო არ ჩაძვრე. 0-დან 256-მდე დაპრინტავ ყველა მისამართის შითავს შეინახავ .bin ფაილში და ეგაა.

ეს ოთხივე რომ რო დავდამპე, ჰექსი გადავიყვანე, int-ში და asci-ში xxd არის ასეთი ტული *nix-ებისთვის და გვერდიგვერდ რო დავაყენე,
პირველი ხუთი ბაიტი იყო ანალოგიური, მეექვს განსხვავდებოდა და მივხვდი რომ ეგ აგებდა პასუხს ფერზე.

ავიღე სავსეს რომელზეც მაჩვენებდა იმ ჩიპის რომი ეს მეექვსე ბაიტი ხელით გადავაკეთე და ჩავასხი იმუშავა.

გავეშვით მერე მეტი დროის კარგვა არ ღირს. მუშაუბს მარტივად.
სახალისო იყო ნამდვილად 1 საათში მოვრჩით ყველაფერს. გაასწორა მაგრად ცოტახნით თავი ჰაკერები გვეგონა lol.gif ბოსტონის ფილიალის facepalm.gif

Posted by: C17H19NO3 30 Aug 2019, 09:15
ვა აქ რამდენი რამე მომხდარა :/ ეხლაღა ვნახე,
NinjaRacer
საინტერესო რამე გქონია თან ისე კარგად ახსნი ხოლმე და საინტერესოდ, მევასება შენი პოსტები და საქმეები
bis.gif bis.gif
მაგ თემაზე გამახსენდა ბანდიტის სერიები არ ვიცი თუ ერთობოდი ამით https://overthewire.org/wargames/bandit/bandit13.html ამ ლეველზე შემხვდა პირველად.,
ინტერნეტში მოვიძიე რომ ვერ ვერკვეოდი.

ანუ გამოდის რომ პრინტერი დაკრეკე :დ
ჰექსდამპის შემდეგ რომ მიაგენი იმ ადგილს და ჩაასწორე საშენოდ, მერე როგორ მიაწოდე ისევ უკან ? xxd?


Posted by: NinjaRacer 30 Aug 2019, 09:40
C17H19NO3
არა არ ვერთობოდი.

იმ 'დამპლურ თამაშებში' რაც დალინკე string ბრძანებაცაა. ძალიან საჭირო რამეა, ბაინარში შეგიძლია სტრინგი დაგრეპო მაგით, მაგალითად შეგიძლია გაიგო აქვს თუ არა tcpwrapper-ების მხარდაჭერა.

strings $(which sshd)| grep libwrap

კიდევ ldd-ითაც შეგიძლია. მოკლედ კაი გასართობია. კიდევ ბევრი კარგი რამეა up.gif

არაფერი საქმეები ჯერ არ მაქვს. ძაან დიდი ხანი ვიყავი ჩამოშორებული.

იმ დამპს ისევე i2c-პროტოკლით ზედ ვასხამ უკან.
Wire.write() ეს ძალიან გიადვილებს საქმეს.

კარგი გამახსენე რაღაცეებს ჩავუჯდები ამ თვეში. უბრალოდ ძალიან დიდი ინფორმაციის ნაკადი მაქვს გადასამუშავებელი ტვინში. ამდენი რამე ერთად ცოტაარიყოს დაა დაძაბულს მხდის. დაძადაძაბულს. მაგრამ საკმაოდ დიადი მიზანი მაქვს რაც ამართლებს საშუალებას.

arduino IDE-ში გამოვიყენე სკეჩი რომელიც ამ ყველაფერს აკეთებს.

ასკანირებს, დამპავს და წერს. 3 ფუნქციაა

დავუბრუნდეთ ისევ პითონს რა gigi.gif

ვაგრძელებ ესიქნს ბოლომდე მაქვს მისაყვანი რამოდენიმე თემა.

Posted by: C17H19NO3 30 Aug 2019, 17:50
NinjaRacer
ხო მაგიტომაც რაც არ უნდა იყოს მაინც ვეძებ ხოლმე ინტერნეტში, რომ სხვადასხვა გზები ვნახო smile.gif
სტრინგსაც ვიყენებ.. მაგის წინა ამოცანაში იყო მგონი კაკრაზ სტრინგით უნდა ამოგეღო..

იცი რა ვერ გავიგე, რამდენიმე ვიდეოც ვნახე ამ საკითხზე და გულიანად ვერ ვიგებ
ეს
if [ $a -le $b ]; then
echo "....."
fi

და ეს

[[ ... ]]

და ესეც

(( ... ))

რა განსხვავებაა რომ ამიხსნათ ვინმემ user.gif

ხოდა კიდევ ერთ მაგალითში იყო exit 87, ვეძებე და ეს ლინკი ვნახე https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-

CODE
ERROR_INVALID_PARAMETER

87 (0x57)

The parameter is incorrect.


იქ რა ციფრებიც წერია ბაშიც მაგას აღიქვამს?

Posted by: NinjaRacer 30 Aug 2019, 21:30
C17H19NO3
(()) არის საბშელი, მაგალითად შეგიძლია არითმეტიკული ოპერაცია დაწერო

bash -c "echo $((3+5))"

POSIX სტანდარტია. http://pubs.opengroup.org/onlinepubs/9699919799/



[] პირობას ამწმებს. თუ პირობა სწორია აბრუნებს 1 თუ არასწორი 0, ბულეანს ანუ true/false იქნება
ამიტომ იყენებენ if სტეიტმენტებში

CODE

if [ 10 -lt  100]; then
echo "True"
else
echo "false"
fi


ეს ყველაფერი შეგიძლია ასეც გააკეთო
პირდაპირ შელში
CODE
test 10 -lt 100 && echo "True" || echo "False"

CODE
test 10000 -lt 100 && echo "True" || echo "False"



http://pubs.opengroup.org/onlinepubs/9699919799/
ეს კი ერორებზე. 0 არის უშეცოდმოდ გამოსვლა. დანარჩენი ზემოთ ზოგი რეზერვირებული, ზოგი შეთანხმებაზეა.


* * *
ლინკებს არ აკოპირებს სწორად.

მოკლედ ეგ სტანდარტი რო წაიკითხო shell & utilities მანდ წერია ყველაფერი..
* * *
ესენი სტაკ ოვერფლოუზე ეწერა დავაკპირე

QUOTE

'1' >>> Catchall for general errors

'2' >>> Misuse of shell builtins (according to Bash documentation)

'126'>>> Command invoked cannot execute

'127'>>>"command not found"

'128'>>> Invalid argument to exit

'128+n'>>>Fatal error signal "n"

'130'>>> scr1pt terminated by Control-C

'255'>>>Exit status out of range


სადღაც ადრე ქართული ბაშის ტუტორიალიც დავაგდე. მე მგონი.
* * *
მოდი შენც გთხოვ და ჩემს თავსაც ეს თემა აღარ გავაოფოთ.


* * *
თუ ვერ გიპასუხე და ესეიგი შელში ვარ შემძვრალი სადღაც და ვადებაგებ ძააალიან უცნაური პრობლემა მაქვს ერთერთ სერვერზე და სნიფერით ვუზივარ ტრაფიკს რო გავაკრვიო რატო გაუბერა heartbeats აღარ აგზავნის და სერვერი 3 სერვერი წაგვექცა ამის გამო :@
* * *
ასეც შეგილია პირდაპირ შელში დაწერო

CODE
[ "awesome" = "awesome" ] && echo $? || echo "not so much"



Posted by: robox 31 Aug 2019, 00:19
QUOTE (NinjaRacer @ 29 Aug 2019, 22:56 )
იტოგში დავშალე რომი biggrin.gif იმდენად მარტივი იყო რო დაწერაც არ ღირს.

მოკლედ 2K რომი იყო 4 ცალი.

სკანერით დაინახა I2C მისამართები დაინახა ოთხივე,

არდუინოზე a4,a5 აერთებ თუ Nano-ოა, 2560mega თუა მაგას აწერია პირდაპირ sdata, sclock პინებს.
და 3.3v კვება უნდა მისცე ამ პატარა ჩიპს. ნუ გრაუნდიც თავისთავად.

რო გეცოდინება მისამართი მერე პროსტა for loop-ით დაუვლი ყველა მისამართს. wire.h უნდა გამოიყენო, მზა ბიბლიოთეკა არის რომთან საკომუნიცკაციოდ. ძაან ლოუ ლეველში რო არ ჩაძვრე. 0-დან 256-მდე დაპრინტავ ყველა მისამართის შითავს შეინახავ .bin ფაილში და ეგაა.

ეს ოთხივე რომ რო დავდამპე, ჰექსი გადავიყვანე, int-ში და asci-ში xxd არის ასეთი ტული *nix-ებისთვის და გვერდიგვერდ რო დავაყენე,
პირველი ხუთი ბაიტი იყო ანალოგიური, მეექვს განსხვავდებოდა და მივხვდი რომ ეგ აგებდა პასუხს ფერზე.

ავიღე სავსეს რომელზეც მაჩვენებდა იმ ჩიპის რომი ეს მეექვსე ბაიტი ხელით გადავაკეთე და ჩავასხი იმუშავა.

გავეშვით მერე მეტი დროის კარგვა არ ღირს. მუშაუბს მარტივად.
სახალისო იყო ნამდვილად 1 საათში მოვრჩით ყველაფერს. გაასწორა მაგრად ცოტახნით თავი ჰაკერები გვეგონა  lol.gif  ბოსტონის ფილიალის  facepalm.gif


up.gif კარგათ გიჩალიჩია,თუ კიდე რამე ეგეთს გაჩითავ დაწერე ხოლმე smile.gif

Posted by: NinjaRacer 31 Aug 2019, 01:01
robox
კაი რა საერთოდ არი იყო არაფერი საჩალიჩო. მეღადავები მგონი smile.gif

იცი რა მაინტერესებს. ისე შენ მუღამს იკლავ თუ მუშაობ ჰარდთან და ნუ რახან კონტროლერებს წერ პითონში ე.ი ვერი ბიზი დეველოპერი ხარ და შენ ბევრად საინტერესო რამეებს ჩალიჩობ. ჰოდა სულ მაინტერესებდა ეგეთი რაღაცეები. შენ დადე რამეს რო იჩალიჩებ.

მე მაქსიმუმ C-ვისწავლო. არაფერი საინტერესო.

Posted by: robox 31 Aug 2019, 02:41
QUOTE (NinjaRacer @ 31 Aug 2019, 01:01 )
robox
კაი რა საერთოდ არი იყო არაფერი საჩალიჩო. მეღადავები მგონი smile.gif

იცი რა მაინტერესებს. ისე შენ მუღამს იკლავ თუ მუშაობ ჰარდთან და ნუ რახან კონტროლერებს წერ პითონში ე.ი ვერი ბიზი დეველოპერი ხარ და შენ ბევრად საინტერესო რამეებს ჩალიჩობ. ჰოდა სულ მაინტერესებდა ეგეთი რაღაცეები. შენ დადე რამეს რო იჩალიჩებ.

მე მაქსიმუმ C-ვისწავლო. არაფერი საინტერესო.


ლოუ ლეველზე მუშაობა ჩემი ჰობია და რეალურად ისაა რაც მაინტერესებს,სამსახურში ჯანგოზე ვმუშაობ.
თავისუფალ დროს ვარჩევ ხოლმე ჰარდზე რაღაცეებს,დიდი არაფერი,ჩემ ჭიას ვახარებ რა smile.gif
ეხლა fpga-ს ვარჩევ , ძაან საინტერესო რამეა,ცოტა ძნელია მაგრამ მაგარი მუღამი მაქვს საინტერესო რაღაცეების გაკეთების.

ბოლოს ეს გავაკეთე ფპჯიეიზე

https://www.youtube.com/watch?v=lHMueQKXJOU

ეხლა ცოტა დახვეწა მინდა ,ლინუქსი ან რამე მაგნაირი მინდა რო გავუშვა ჩემ "ცპუ"-ზე biggrin.gif

Posted by: RexxaR 31 Aug 2019, 14:47
robox

შენი მუსიკების ფლეილისტს ან რამეს ვერ დამილინკავ

მგონი კაი იქნება მუშაობის დროს

Posted by: NinjaRacer 31 Aug 2019, 14:53
RexxaR
QUOTE
შენი მუსიკების ფლეილისტს ან რამეს ვერ დამილინკავ


affirmative

+1
* * *
დეეეეზლი ნაუშნიკები უნდა მოვაგდოოოოოო ამის დედაააააააააააააააააც


აუ ფლეისტები დააყარეთ.

+ რჩევები პოდკასტები + ჯო როგანი რას ვუსმინო ტრანსპორტში

Posted by: robox 31 Aug 2019, 21:07
RexxaR
NinjaRacer


ტრანსის ტიპის ელექტორნული მუსიკა თუ მოგწონთ წესით უეჭველი მოგეწონებათ,ჩემი შეგროვებული და ნარჩევი ოქროს კოლეკქციაა biggrin.gif რომლის მოსმენაც ნებისმიერ სიტუაციაში მაგრად მშველის,ბებრი მაქ კიდე ასეთი მარა ატვირთვა დამეზარა,ეს ძველი დაბექაფებულია

https://drive.google.com/open?id=0BxAquwVuf6dJNU02NGNKcU9IRzA


https://mega.nz/#F!AdtlRSIY!EzvfjUyDbbs2cLTUKlD1ew

ზოგი ფაილი დუბლირებულია

თქვენებიც დაყარეთ,არჩეულები რომლებიც ყველაზე მეტად მოგწონთ

Posted by: @Schizophrenic 31 Aug 2019, 22:15
https://www.youtube.com/watch?v=iArXv64tCJA&list=PL5YM9F_MrXCT2Wp0JyxJ0D0U2_Baj8-YA&index=4&t=0s
აჰა ჩემი ფლეილისტი, ამოარჩევთ რამეს :დ

Posted by: NinjaRacer 1 Sep 2019, 00:21
bis.gif bis.gif bis.gif



C17H19NO3
სად დაიკარგა ეს კაი კაცი smile.gif

არ გავაოფოთ-ში ვიგულისხმე თუ კონკრეტულად გაინტერესებს რამე ცალკე თემა მიეცი პინგვინებში და იქ მცოდნე კამანდა ტასაობს.
იმიტომ გითხარი უნდა ჩავუჯდე რაღაცეებს მეთქი რო გასახსენებელი მაქვს რაღაცეები. რო ჩავუჯდები და დავცხებ 1 თვეში ბოლომდე გავიყვან და ყველაფერს გავიხსენებ ეს ვიგულისხმე. ამიტომ პინგვინებში უფრო დაგეხმარებიან და თან არც გაოფდება ეს თემა


Posted by: C17H19NO3 1 Sep 2019, 00:47
NinjaRacer
ვეღარ ვუზივარ ჯიგრულად, მანქანა მივატყანით და მაგ თემებზე დავდიოდი ეს დღეები :/ თავიდან დაჟე ისიც დავწერე ბაშზე სად ვიკითხო ხოლმე თქო და აქვე რომაა თემა იქ დავწერ თუ რამეა, თუ არადა პინგვინებში ახალი თემა მივუძღვნათ smile.gif

მოვიცლი იტოგში, ეხლა მიწევს ვინ სერვერების მოხოდვა :/ და გეფიცები რომ დავიწყე როგორ იცის გადაჩვევა, სულ მგონია რომ უცბად ვნახავ ფაილებს პერმიშენებს, რავიცი რაააა გადავიდეთ ნეტა ლინუქსზე ყველგან :დ


ხოდა უკვე ვაოფებთ, აწი პინგვინებში გადავალ :**** სიი იუ ლეითა გაიზ

* * *
@Schizophrenic
საკაიფო ფლეილისტია smile.gif

Posted by: @Schizophrenic 1 Sep 2019, 03:15
QUOTE
საკაიფო ფლეილისტია

აჰა მაშინ მეორეც
https://www.youtube.com/watch?v=Ha2lwrTc4Ag&list=PL5YM9F_MrXCTJclaLyvnCOYlwhx84kW2b&index=7&t=0s

Posted by: Definitely_Maybe 1 Sep 2019, 21:34
გამარჯობა. კაი მობილური აპლიკაცია ჰომ არ გეგულებათ მგზავრობისას პითონის სავარჯიშოები ან სასარგებლო ინფორმაცია რო მივიღო?

Posted by: @Schizophrenic 1 Sep 2019, 23:54
QUOTE
გამარჯობა. კაი მობილური აპლიკაცია ჰომ არ გეგულებათ მგზავრობისას პითონის სავარჯიშოები ან სასარგებლო ინფორმაცია რო მივიღო?

ვიდეოები უყურე ან ონლაინ წიგნი გადმოწერე
ისე ანდროიდზე შეგიძლია პითონის კოდი წერო მარა ძაან მოუხერხებელია, ვაბშე რატო მოუვიდათ თავში მაგის გაკეთება? :დ

Posted by: NinjaRacer 16 Sep 2019, 21:23
ზდ ბიჭებს.

მოკლედ მიწევს ძვეეეეეელი პითონის დაექსთენდება C-ში დაწერილი კოდით. რომელმაც უნდა იმუშაოს 1.5.2 პითონზე. ძაან legacy კოდია მოკლედ და გვინდა პატარა ფუნქციონალის დამატება. ეხლა რახდება.
პითონი 1.5.2 დაკომპილირდა, მაგრამ 3 ადგილზე მომიწია კოდის ჩასწორება. საღოლ ასეთი დაბაგული თუ იყო პითონი 20 წლის წინათ რომ არც კომპილირდება biggrin.gif

მოკლედ დაკოპილირდა და დაყენდა კიდეც მაგრამ make test-მა აი რა დაიჭირა.


make[1]: Entering directory '/home/gent/old_python/Python-1.5.2/Modules'
make[1]: 'add2lib' is up to date.
make[1]: Leaving directory '/home/gent/old_python/Python-1.5.2/Modules'
rm -f ./Lib/test/*.py[co]
PYTHONPATH= ./python ./Lib/test/regrtest.py
test_grammar
test_opcodes
test_operations
test_builtin
*** buffer overflow detected ***: ./python terminated
Aborted (core dumped)
Makefile:239: recipe for target 'test' failed
make: [test] Error 134 (ignored)
PYTHONPATH= ./python ./Lib/test/regrtest.py
test_grammar
test_opcodes
test_operations
test_builtin

*** buffer overflow detected ***: ./python terminated

Aborted (core dumped)
Makefile:239: recipe for target 'test' failed
make: *** [test] Error 134

ეს არის დეველოპინგ გარემო მკიდია ამის ბაფერ ოვერფლოუები ამაზე უბრალოდ C-ს პროგრამა უნდა დავბილდო რო იქაც იმუშაოს და გამოვა თუ დროს ვკარგავ??? ტყუილად არ მინდა დრო დავკარგო user.gif ეს ბაფერ ოვერფლოუ ხო არ გამჭედავს რამეში?

https://www.python.org/download/releases/1.5/
აი სორსი
და ორგან აქვს არასწორად type specifier %lx უწერია, მე %p ჩავუწერე რადგან პითონის ობიექტს გადასცემს.

ესეც გუიდოს დაწერილი დოკუმენტაცია.
მარა კატასტროფაა facepalm.gif ტოესწ ძველია და ვიდზეც ეტყობა რაცაა gigi.gif

https://docs.python.org/release/1.5.2p2/ext/ext.html

ვინმეს გაქვთ გამოცდილება რო დამაკვალიანოთ ცოტა?

ამდენ ჩალიჩს პირდაპირ 1.5-ზე დავწერო ის კოდი პითონში ჯობია მე მგონი cry.gif

5 წუთში მოვრჩები. ეს თუ არ გამოვიდა იმას ვცდი
* * *
1, 2, 3 C API ვაფშე განსხვავდება მე მომცეს სის კოდი რომელიც 3-ზეა და გადასაკეთებელია.

ეხლა უნდა ვეწვალო გადაკეთებას.
ხვალ აღმოჩნდება რო სტაკ ოვერფლოუზე ვიღაცას უდევს 1.5-ის კოდი და სულ 3 ხაზია მაგრამ ძაან მკიდია ეს უნდა გავაკეთო mad.gif და მივიყვანო ბოლომდე
* * *
გამომივიდა.

mad.gif

ხვალ მეტყვიან არაფერს არ აკეთებო.
ერთ საღამოში გავარჩიე სის ინეგრირება პითონში.

gigi.gif
* * *
სულ მაინტერესებს როგორ მუშაობს პითონი ანდერზიჰუდში

https://dzone.com/articles/python-internals-how-callables-0

Posted by: NinjaRacer 18 Sep 2019, 20:51
აუ ჯანგოზე მჭრიდება დახმარება.

მიგრაციების დირექტორია მაქვს შენახული. ძველი. პოსტგრესს ვიყენებ დბ-თ.
სხვა სერვერზე გადვიტანე ჯანგო პირდაპირ კოპი პასტით.

არ ეშვებოდა სანამ ყველა .pyc და მიგრაცია არ წავშალე. ახლა გაეშვა ჯიგრულად მაგრამ სურათებს არ ხსნის. სტატიკს ვერ პოულობს. ეს ერთი პრობლემა და მეორე.

შესაძლებელია ამ მიგრაციების ეხლა გადმოტანა და migrate-ის თავიდან გაკეთება რომ ბაზაში ჩაწეროს ყველაფერი როგორც იყო? ეს კრიტიკულად მნიშვნელოვანი არაა მაგრამ კარგი იქნებოდა. ხელით არ მომიწევს რაღაცეების დამატება.

ჰოდა კიდევ settings.py ვერ ხედავს. gunicorn-ით ვუშვებ და აქედან გამომდინარე static დირექტორიაც არ იცის სადარი და სურათებს არ ამაჩვენებს. runserver --settings=mysite.settings ამ სინტაქსით ვსტარტავ და gunicorn-ითაც ეშვება ჩვეულებრივად.

Posted by: robox 7 Oct 2019, 19:25
ბავშვობის სურვილები biggrin.gif biggrin.gif biggrin.gif


Posted by: @Schizophrenic 8 Oct 2019, 12:19
QUOTE
ბავშვობის სურვილები 

მაგარია up.gif
მეც ვოცნებობდი კამერიან მანქანაზე :დ

Posted by: anderlain 9 Oct 2019, 11:17
მეგობრებო თქვენი დახმარება მჭირდება, მინდა რომელიმე პროგრმაულ ენას დავეუფლო და მირჩიეთ პითონი ვისწავლო თუ სხვა? თუიცით კარგი დაწესებულება სადაც სრულად თუ არა კარგად მასწავლიან

Posted by: RedShark 9 Oct 2019, 18:22

--

Posted by: anderlain 10 Oct 2019, 19:05
სად ასწავლიან ყველაზე კარგად პიტონს?

Posted by: gpskwlkr 23 Oct 2019, 10:59
QUOTE (anderlain @ 10 Oct 2019, 19:05 )
სად ასწავლიან ყველაზე კარგად პიტონს?

შენით ისწავლე რაიმე წიგნით ან Youtube..ან რაიმე კურსი თუ ახლა იწყებ საერთოდ პროგრამირების სწავლას..

ზოგადად BTU ში ასწავლიან პითონს მხოლოდ როგორც ვიცი.

Posted by: NinjaRacer 27 Oct 2019, 12:13
ტორნადოს ვიყენებ ხოლმე და ძალიან მომწონს. მაგრამ ჩენელები მინდა გავარჩიო
https://channels.readthedocs.io/en/latest/introduction.html

პროსტა დრო არ მქონდა ეს 2 თვე და ძალიან მინდა ვების მხარე ჩავამუღამო.

Posted by: robox 18 Nov 2019, 16:16
კომპანია gftc-ს ესაჭიროება ჯანგოს მცოდნე კადრი.

cv გააგზავნეთ მეილზე nikoloze@gftc.ge

Posted by: NinjaRacer 19 Nov 2019, 00:48
up.gif
ჯანგოს მცოდენ რადმენად ვარ არ ვიცი მაგრამ გავუშვი სივი. სამშაბათს ჩამოვალ თბილისში და დამჭირდება რამე სამსახური.

Posted by: Lilith 19 Nov 2019, 20:18
NinjaRacer
-->eleqtro https://forum.ge/?showuser=1027
მიწერე აბა პირადში, რამდენადაც ვიცი პითონის პროგრამისტებს ეძებდნენ, დამწყებებსაც და გამოცდილებსაც, წარმატებები!

Posted by: NinjaRacer 20 Nov 2019, 11:08
Lilith
დიდი მადლობა. ლილიტ


სისადმინიც ვარ
https://www.redhat.com/rhtapps/services/verify/?certId=190-288-597

ჰოდა ვეძებ რამე სამსახურს დროებით.

Posted by: eleqtro 20 Nov 2019, 12:17
Lilith
wink.gif დანქე

NinjaRacer
nikoloze@gftc.ge CVაქ გამომიგზავნეთ.

Posted by: NinjaRacer 20 Nov 2019, 13:36
გამოგიგზავნეთ მაილი

eleqtro


smile.gif
მადლობა.

Posted by: NinjaRacer 24 Nov 2019, 16:18
Pycharm Pro მომცეს აქ ადრე და ვადა გაუვიდა სექტემბერში. ორშაბათიდან ისევ დამჭირდება და ვინმეს ხომ არ გაქვთ? სტუდენტებისთვის უფასოაო და იქნებ გამიზიაროთ ჰა? მადლობა წინასწარ smile.gif

Posted by: @Schizophrenic 25 Nov 2019, 03:46
NinjaRacer
სტუდენტის მაილი გაჩითე და უფასოა, ისე რა განსხვავებაა? მე მქონდა დაკრეკილი და დიდი განსხვავება ვერ ვუპოვე ქომუნითისგან

Posted by: NinjaRacer 25 Nov 2019, 12:54
@Schizophrenic
QUOTE
სტუდენტის მაილი გაჩითე და უფასოა, ისე რა განსხვავებაა? მე მქონდა დაკრეკილი და დიდი განსხვავება ვერ ვუპოვე ქომუნითისგან

ის განსხვავებაა რომ ჯანგოს სერვერის + სინტაქსის მხარდაჭერა აქვს, მაგრამ ახლა მივხვდი რომ ჩემი 2გბ-იანი მაკით არც გაეშვება ეგ პაიჩარმი ისედაც ოფლს ღვრის ჩართვისას ჭეედავს. არც ვირტუალიზაცია არ აქვს და გადავწყვიტე vs code-ით ვიმუშაო + AWS
* * *
გამიჩითეთ ვინმემ თუ გაქვს პონტი რა მადლობელი დაგრჩებით smile.gif

Posted by: robox 26 Nov 2019, 09:46
NinjaRacer
მე კი მაქვს მარა ექაუნთი შემყავს,ლიცენზიის გადმოწერის ფუნქცია აღარაა,კეი რო გადმოწერო.

დაგუგლე აბა, წესით უნდა ეყაროს გასააქტიურებელი სერვერები ან ექაუნთები

Posted by: NinjaRacer 26 Nov 2019, 09:52
robox

კაი ვიყიდი მომენტ. არც მჭირდება ვიესკოდს გავმართავ და ეგაა.

ჯერ მეხსიერება უნდა ჩავადუღო ამ მაკბუქში თორე აზრი არ აქვს ფაილის გამოწერაზეც ჭედავს მთლიანი მაკოესი.

Posted by: robox 6 Dec 2019, 01:18
ვსიო ვეშვები ამ რც მანქანებს biggrin.gif


Posted by: Datvlas-vin-gtxovs 14 Dec 2019, 10:27
პითონის ბიჭებს მინდა 1 მარტივი კოდი გაგიზიაროთ. თამაში "გამოიცანი სიტყვა"
CODE
sit = "Modzgvari"
pas = ""
cda = 0
limi = 5
morchi = False

while pas != sit and not(morchi):
   if cda < limi:
       cda += 1
       pas = input("Sheiyvanet Pasuxi: ")
   else: morchi = True
   
if morchi: print("Tqven waaget..")
else: print("Tqven moiget " + str(cda) + " cdashi")

არამგონია გაგება გაგიჭირდეთ მარა if, ახსნას დავწერ war.gif

Posted by: NinjaRacer 14 Dec 2019, 11:42
robox
უმაღლესი კლასი smile.gif


აი ამის გაკეთება მინდა.

https://www.instructables.com/id/WebRTC-Creeper-Drone-Browser-Controlled-RC-Car/

თანაც ვებერტისი მაინტერესებს რაღაცეებისთვის smile.gif)))
ბრაუზერიდან რო ვმართო.

შენ ვებარტიცი არ გამოგიყენებია ხო?
აუ მიკროპითონსი ტელეფონს ვმართავდი Gიესემით და კაცი მეგონა თავი biggrin.gif

Posted by: robox 14 Dec 2019, 23:57
QUOTE (NinjaRacer @ 14 Dec 2019, 11:42 )
robox
უმაღლესი კლასი smile.gif


აი ამის გაკეთება მინდა.

https://www.instructables.com/id/WebRTC-Creeper-Drone-Browser-Controlled-RC-Car/

თანაც ვებერტისი მაინტერესებს რაღაცეებისთვის smile.gif)))
ბრაუზერიდან რო ვმართო.

შენ ვებარტიცი არ გამოგიყენებია ხო?
აუ მიკროპითონსი ტელეფონს ვმართავდი Gიესემით და კაცი მეგონა თავი biggrin.gif



NinjaRacer
მადლობა
alk.gif

არა ვებარტც არ გამომიყენებია,მინდოდა სხვათაშორის, უდპ პროტოკოლის გამო უფრო სწრაფი იქნება მეთქი, მარა ბევრ დროს წაიღებდა მაგის გარჩევა
და ისევ ვებსოკეტები გადავწყვიტე.
თუმცა მაგარი რამეა ვებარტც რაც გავარჩიე ზედაპირულად.

ისე 4გ ზეც შეიძლებოდა დასმა და მთელი კომპონენტების მანქანაში ჩატენვა,როგორც მაგ ტიპს აქ გაკეთებული.
ნეხქსუს 5 მაქ, ზედ უბუნტუ თაჩი დავაყენე და სრულად გავმართე მთელი პროქეტი მაგრამ ფიზიკურად არ ჩაეტია მანქანაში ტელეფონი biggrin.gif

Posted by: NinjaRacer 15 Dec 2019, 00:11
robox
მე მოდული მქონდა რაღაც სიმ900 ჩიპ ქონდა ბარათი ედებოდა და მაიკროპითონით ვაკონტროლებდი მაგას. შეიძლება მაგაზე დაიწეროს კონტროლერი, რო ჯიესემით აკონტროლო,
QUOTE
ნეხქსუს 5 მაქ

იფ. ეგ მეც მაქვს ეკრანი გამიტყდა და მიდევს წლებია გადაგდება მენანება. ძაან მაგარი ტელია.

Posted by: C17H19NO3 15 Dec 2019, 17:13
მეგობრებო, Windows Server 2012 ზე მინდა პითონში დაწერილი კოდით რამე გავაკეთო, მაგალითად

D:\Backup_Folder წავიდეს ყოველდღე E:\Backup_To_Folder

რანაირად ვამუშავო ვინდოუსზე პითონის სკრიპტები :/ გულს რომ გაუხარდებოდა ეგეთი ტუტორიალიც ვერ შემხვდა

Posted by: RexxaR 15 Dec 2019, 18:10
C17H19NO3

მაგალითად შეგიძლია გაშვება python.### საშუალებით თასქ სქედულერიდან:

https://www.esri.com/arcgis-blog/products/product/analytics/scheduling-a-python-scr1pt-or-model-to-run-at-a-prescribed-time/
https://www.quora.com/What-is-the-easy-way-to-run-exe-at-scheduled-time-everyday


ან შექმენი executable და ეგ გაუშვი იგივე მეთოდით. ძაან მარტივია მოკლედ დაგუგვლა გეზარება ეტყობა

Posted by: C17H19NO3 15 Dec 2019, 20:43
RexxaR
მადლობა wink.gif
ჩერეზ ვინდოუსით ვერაფერი გავაკეთე ბლიააად :O
პითონი და pycharm დავაყენე ვინდოუსზე, ვერც ისე გემრიელად ვწერ როგორც ლინუქსზე და პახოდუ უამრავ ფაილს მიჩითავს პროექტში ენვირომენტები .idea ფოლდერი და რავიცი ათასი სირობა იტოგში..

ლინუქსში რომ დავწერე უბრალოდ პატარა სკრიპტი რომელიც ფოლდერებს ქმნის სისტემაში და ფოლდერის სახელად შექმნის თარიღს წერს, მსგავსად მინდოდა დამეწყო ვინდოუსშიც და რავიცი აარ გამომდის. ჯერ ეხლა დავიწყე და გავალ სადმე ნელ ნელა იმედია :დ

Posted by: NinjaRacer 15 Dec 2019, 20:51
C17H19NO3
https://medium.com/@ageitgey/python-3-quick-tip-the-easy-way-to-deal-with-file-paths-on-windows-mac-and-linux-11a072b58d5f

პასლიბი ჯობია თუ კროსპლატფორმულად გინდა შენმა სკრიპტებმა იმშაონ.
* * *


https://treyhunner.com/2018/12/why-you-should-be-using-pathlib/

Posted by: C17H19NO3 15 Dec 2019, 21:15
NinjaRacer
ჰოო ეს ლიბი ვიცი, არ გამომიყენებია რაც დავწერე არც იქ თავის დროზე, მაგრამ ჯერ ვერ მივედი კოდის წერასთან, ვერ მოვიწყე გარემო sad.gif
ეს PyCharm მეზედმეტება რაღაცნაირად, მგონი ჯობია უბრალოდ კოდი რომელიმე ედიტორში ვწერო და .py ფაილები თვითონ პითონის IDLE ში გავუშვა :/

Posted by: NinjaRacer 15 Dec 2019, 21:19
C17H19NO3

ჰო კომპიუტერების ცვლა საშინელებაა. ამიტომ რომელიმე ერთი ედიტორი უნდა აირჩიო და კონფიგი გიტზე გქონდეს უნდა.
აი   მაიკროსოფტის ვიესკოდი აიღე მაგალითად. დააყენე ფაილინტი და წერე.

პასლიბი მოსახერხებელია როცა გიწევს ფაილების დირექტორიების შექმნა წაშლა. მათზე იტერაცია და ა.შ. მეორე ლინკი რო დავდე მანდ წერია რით ჯობია სხვა მოდულებს.

მე ისე მეზარება გარემოს გამართვა რომ ვიმში ვწერ კოდს ხადახან.

Posted by: C17H19NO3 16 Dec 2019, 11:09
NinjaRacer
ყველგან და ყოველთვის Sublime Text ს ვხმარობ smile.gif თუ მაქვს საშუალება დაინსტალირების. ძაან მისწორდება ამაში წერა..

მოვეწყე როგორც იქნა smile.gif
და დავუბრუნდები ვფიქრობ პითონს, სხვა საქმეები მოვრჩი რაც ხელს მიშლიდა სწავლაში და ჩაჯდომაში smile.gif

პასლიბი უნდა ჩავამხეცო ეს დღეები, ჩავეძიე და საკაიფო მოდულია ძაან.. თან ვინდოუსზე რომ დავაყენე პითონი მოდულების ლაიბრერი მოყვა ბრაუზერში მიხსნის,
ლინუქსზე თითოეულს იმპორტს ვუკეთებდი და მერე დირით შევდიოდი იქვე რომ მინდოდა მენახა და არა ინტერნეტში..


Posted by: C17H19NO3 17 Dec 2019, 16:36
რა ენებს არ ვნახულობ და რას აღარ ვცდილობ რომ გავეცნო,
პითონზე მაგარი ლამაზი და საკაიფო საწერი თუ იყოს რომელიმე მოუ()ყან ჯიგარი

bis.gif bis.gif bis.gif bis.gif

Posted by: RedShark 17 Dec 2019, 19:26
QUOTE (C17H19NO3 @ 17 Dec 2019, 16:36 )
რა ენებს არ ვნახულობ და რას აღარ ვცდილობ რომ გავეცნო,
პითონზე მაგარი ლამაზი და საკაიფო საწერი თუ იყოს რომელიმე მოუ()ყან ჯიგარი

bis.gif bis.gif bis.gif bis.gif

ჰაი ლეველ ენებიდან საუკეთესოა yes.gif

Posted by: NinjaRacer 17 Dec 2019, 19:39
QUOTE (C17H19NO3 @ 17 Dec 2019, 16:36 )
რა ენებს არ ვნახულობ და რას აღარ ვცდილობ რომ გავეცნო,
პითონზე მაგარი ლამაზი და საკაიფო საწერი თუ იყოს რომელიმე მოუ()ყან ჯიგარი

bis.gif bis.gif bis.gif bis.gif

პითონი არი ჩუპაჩუპსი gigi.gif


მენტრება ხოლმე პითონში წერა.

Posted by: anderlain 18 Dec 2019, 11:51
პიტონის ხარისხიანი კურსები არის საქართველოში? აი კარგად რომ დავეუფლო ამ ენას?

Posted by: BadbadGirl 21 Dec 2019, 18:42
მაქვს მონაცემთა ბაზა სადაც ყველა feature არის ნნომინალ ან ორდინალ დომეზე. ექსელის ფაილს რომ ვხსნი jupyter ში ამ ვარიაბლებს კითხულობს როგორც ინტერესს ან float.


პრობლემა ისაა რომ ჩემი ანალიზებისთვის აუცილებელია ვარიაბლების ორდინალ ან ნომინალური დონეზე ყოფნა.


იქნებ ვინმემ მირჩიოს რა ვქნა?


davwere კოდის sadac garkveuli maxasiateblebis მქონეები variablebi იქნება categorical Da danarcheni continiuse. roca vamocmben kods scor shedegs mahcvnebes.

Maryam, roca variablebs vamocmeb df.dtype() ise იგივეს problema მექნება, ან variablebi არიან float an Int.

Posted by: RexxaR 21 Dec 2019, 18:59
QUOTE (BadbadGirl @ 21 Dec 2019, 18:42 )
მაქვს მონაცემთა ბაზა სადაც ყველა feature არის ნნომინალ ან ორდინალ დომეზე. ექსელის ფაილს რომ ვხსნი jupyter ში ამ ვარიაბლებს კითხულობს როგორც ინტერესს ან float.


პრობლემა ისაა რომ ჩემი ანალიზებისთვის აუცილებელია ვარიაბლების ორდინალ ან ნომინალური დონეზე ყოფნა.


იქნებ ვინმემ მირჩიოს რა ვქნა?


davwere კოდის sadac garkveuli maxasiateblebis მქონეები variablebi იქნება categorical Da danarcheni continiuse. roca vamocmben kods scor shedegs mahcvnebes.

Maryam, roca variablebs vamocmeb df.dtype() ise იგივეს problema მექნება, ან variablebi არიან float an Int.

spy.gif

eek.gif

drug.gif

facepalm.gif

Posted by: BadbadGirl 21 Dec 2019, 20:45
QUOTE (RexxaR @ 21 Dec 2019, 18:59 )
QUOTE (BadbadGirl @ 21 Dec 2019, 18:42 )
მაქვს მონაცემთა ბაზა სადაც ყველა feature არის ნნომინალ ან ორდინალ დომეზე. ექსელის ფაილს რომ ვხსნი jupyter ში ამ ვარიაბლებს კითხულობს როგორც ინტერესს ან float.


პრობლემა ისაა რომ ჩემი ანალიზებისთვის აუცილებელია ვარიაბლების ორდინალ ან ნომინალური დონეზე ყოფნა.


იქნებ ვინმემ მირჩიოს რა ვქნა?


davwere კოდის sadac garkveuli maxasiateblebis მქონეები variablebi იქნება categorical Da danarcheni continiuse. roca vamocmben kods scor shedegs mahcvnebes.

Maryam, roca variablebs vamocmeb df.dtype() ise იგივეს problema მექნება, ან variablebi არიან float an Int.

spy.gif

eek.gif

drug.gif

facepalm.gif

ra problema gaqvs mitxari aba. Me chemi daycare da deli moxmareba, faceplates nacvlad.

Moxmareba Rom AR mchirdebodes ARc davcerdi games.

Posted by: RexxaR 21 Dec 2019, 21:16
BadbadGirl

QUOTE
ra problema gaqvs mitxari aba


რთული ენით გიწერია. პრობლემა ნათლად უნდა დაწერო რა არის. ვერაფერი გავიგე

gigi.gif

Posted by: BadbadGirl 21 Dec 2019, 22:03
Saxlshi Rom rival dancer, kodebsac da shedegebsac.
* * *
მაქვს მონაცემთა ბაზა, 13 ცვლადით. მათგან მხოლოდ ერთია continuous. დანარჩენი ორდინალურ ან ნომინალურ დონეზეა. მონაცემთა ბაზა არის ექელში/ესპიესეს
ანალიზს ვაკეთებ Jupyter notebook-ში. როცა მონაცემთა ბაზას ვხსნი მიჩვენებს რომ ჩემი ცვლადები არიან float ან integrer, რაც იმას ნიშნავს რომ ანალიზის შედეგბს ვერ დავყრდნობი.

დავწერე კოდი:
def determine_type_of_feature(df):
feature_types = []
n_unique_values_threshold = 10

for column in df.columns:
unique_values = df [column].unique()
example_value = unique_values[0]

if (isinstance(example_value, str)) or (len(unique_values)<= n_unique_values_threshold):
feature_types.append('categorical')
else:feature_types.append('continuous')

return feature_types

დავტესტე კოდი:
feature_types = determine_type_of_feature (df)
i = 0
for column in df.columns:
print (column, '-', feature_types[i])
i += 1

მივიღე შედეგი:
mRS - categorical
mRS_0_12_34_5 - categorical
mRS_0_1_23_45 - categorical
mRS_01_23_45 - categorical
mRS_0_12_3_45 - categorical
Age - continuous
q1_needs_help - categorical
q2_accomodation - categorical
q3_mobility - categorical
q4_toiletvisit - categorical
q5_dressinghelp - categorical
q6_stroke_problems - categorical
q7_activities_normal - categorical


ისევ დავტესტე ცვლადების სახეობა კოდით:
df.dtypes

მივიღე შედეგი:
mRS int64
mRS_0_12_34_5 int64
mRS_0_1_23_45 int64
mRS_01_23_45 int64
mRS_0_12_3_45 int64
Age int64
q1_needs_help object
q2_accomodation object
q3_mobility object
q4_toiletvisit object
q5_dressinghelp object
q6_stroke_problems object
q7_activities_normal object

ეს ყველაფერი მაფიქრებინებს რომ სადღაც შეცდომა მაქვს. იმიტომ რომ mRS .... mRS_0_12_3_45 ისევ ისევ დარჩა - int64.


კიდევ ერთ შეცდომაზე მაფიქრებინებს ფაქტი რომ როცა ელემენტრულ ანალიზს ვაკეთებ ვღებულობ შედეგს: 2.0, 3.0 და 4.0. ეს არის არალოგიკური, იმიტომ რომ ამ ცვლადის პასუხის ალტერნატივებია 2, 3 და 4 :
q1_needs_help 2.0 3.0 4.0
mRS
0 9 62 171
1 16 117 181
2 20 147 97
3 54 112 12
4 40 39 6
5 29 31 2


ამიტომ არის ჩემი კითხვა - როგორ შევცვალო ცვლადების მახასიათებელი (მაგ. ინტეგრერიდან - > კატეგორიული და თუ შესაძლებელია როგორმე თითოეულ ცლადს მივანიჭო უფრო ზუსტი მახასიათებელი ანუ ნომინალური ცვლადი და ორდინალური ცვლადი. )
* * *
პ.ს. პრობლემა მექმენება გადაწყვეტილების ხის (Decision tree) გაზრდის დროს. ჩემი ცვლადები იხლიჩებიან მაგ. <2.5 ანდ > 3 .5 რაც კლინიკურად სრულიად არალოგიკურია, და რაც ნიშნავს რომ ცვლადები არასწორად იქნა გამოყენებული ანალიზში.


Posted by: NinjaRacer 22 Dec 2019, 01:40
BadbadGirl
კოდი რომ ფეისთბინში ჩასვა და მიუთითო პითონის იდენთეიშენი არ გინდა?
https://pastebin.com/

ჩვენც რო გავტესტოთ შენი კოდი. სხვანაირად ყველას დაეზარება დარწმუნებული ვარ ტაბების ჩასმა.

Posted by: BadbadGirl 22 Dec 2019, 10:32
QUOTE (NinjaRacer @ 22 Dec 2019, 01:40 )
BadbadGirl
კოდი რომ ფეისთბინში ჩასვა  და მიუთითო პითონის იდენთეიშენი არ გინდა?
https://pastebin.com/

ჩვენც რო გავტესტოთ შენი კოდი.  სხვანაირად ყველას დაეზარება დარწმუნებული ვარ ტაბების ჩასმა.

Gmadlob pasuxistvis.
Växav mag saits.

Moni mivxvdi shecdoma sadaaa, "append" -is gamo shevdiodi shecdomashi, sinamdvileshi cvlabis asiat arasdros Sheila am godis shemdeg.

Posted by: RexxaR 22 Dec 2019, 12:03
QUOTE
ეს ყველაფერი მაფიქრებინებს რომ სადღაც შეცდომა მაქვს. იმიტომ რომ mRS .... mRS_0_12_3_45 ისევ ისევ დარჩა - int64.


ინტეჯერები გაქვს მაგ სვეტში სულ და უნდა დარჩენილიყო კიდევაც, თუ თავიდანვე categorical სვეტად არ გაქვს შენაქმნელი.
დარჩენილიყო რა, ანუ შენ რაიმე ცვლილებას ან კონვერტაციას არ უკეთებ მანდ სვეტებს და ჯადოსნურად არ შეიცვლებოდა თავისთავად gigi.gif .

თუ გადაკეთება გინდა სვეტის ტიპის მაშინ ასე ქენი:

CODE

df['column_name'] = df.column_name.astype('category')


და მერე dtypes-იც იმუშავებს ისე როგორც გინდა რომ არ იწვალო custom ფუნქციებით

Posted by: BadbadGirl 22 Dec 2019, 18:19
QUOTE (RexxaR @ 22 Dec 2019, 12:03 )
QUOTE
ეს ყველაფერი მაფიქრებინებს რომ სადღაც შეცდომა მაქვს. იმიტომ რომ mRS .... mRS_0_12_3_45 ისევ ისევ დარჩა - int64.


ინტეჯერები გაქვს მაგ სვეტში სულ და უნდა დარჩენილიყო კიდევაც, თუ თავიდანვე categorical სვეტად არ გაქვს შენაქმნელი.
დარჩენილიყო რა, ანუ შენ რაიმე ცვლილებას ან კონვერტაციას არ უკეთებ მანდ სვეტებს და ჯადოსნურად არ შეიცვლებოდა თავისთავად gigi.gif .

თუ გადაკეთება გინდა სვეტის ტიპის მაშინ ასე ქენი:

CODE

df['column_name'] = df.column_name.astype('category')


და მერე dtypes-იც იმუშავებს ისე როგორც გინდა რომ არ იწვალო custom ფუნქციებით

გმადლობ პასუხისთვის. ამ პროეტქზე რომ დავიწყე მუშაობა მაგ კოდით დავიწყე ცვლადების შეცვლა, თუმცა ანალიზის შედეგი მცდარია. user posted image

აი გადაწყვეტილების ხის სეგმენტი, სადაც ჩანს რომ ორინალური ცვლადი იხლიჩება არადა პასუხის ალტერნატივებია 1.2 3 ან 1, 2 ანდა 2.3 და 4.

მგონი sklearn მატემატიკურად გამართულ მოდელებს ქმნის, მაგრამ შედეგი კლინიკურად არაფრის მთქმელია.

რ - ში ვსიჯავ იგივე ანალიზებს და ვნახავ რა გამოვა.


Posted by: Datvlas-vin-gtxovs 29 Dec 2019, 21:22
anderlain
აქ არი საბაზისო https://smartacademy.ge/trainings/10-Python---%E1%83%A1%E1%83%90%E1%83%91%E1%83%90%E1%83%96%E1%83%98%E1%83%A1%E1%83%9D-%E1%83%99%E1%83%A3%E1%83%A0%E1%83%A1%E1%83%98
არ მივლია, არ ვიცი up.gif

ისე, იუთუბზე დევს კაი ჯიგრული 6 საათიანი კურსი კარგი ახსნით (ინგლისურად)
https://www.youtube.com/watch?v=_uQrJ0TkZlc

Posted by: C17H19NO3 1 Jan 2020, 21:07
QUOTE
აქ არი საბაზისო https://smartacademy.ge/trainings/10-Python...%83%A1%E1%83%98
არ მივლია, არ ვიცი

ქანთარიას გვერდიც აქვს იუთუბიზე და საკმაოდ კარგად ხსნის smile.gif კარგი ბიჭი ჩანს ისედაც ღირს მაგასთან სწავლა ასე მგონია (დამწყებს ვგულისხმობ)

ერთი რაც უნდა იცოდეს ყველა დამწყებმა...

მაქსიმალურად ეცადოს კოდის დროს copy / paste ამოიგდოს თავიდან... რაც არ უნდა მარტივი ეწეროს მაინც წეროს ხელით ..

Posted by: Datvlas-vin-gtxovs 4 Jan 2020, 09:59
პითონის სავარჯიშოები გამოუშვით პიშარმცი bis.gif

Posted by: C17H19NO3 6 Jan 2020, 02:21
Datvlas-vin-gtxovs


user posted image


გამოიცანი აბა რას დაბეჭდავს პროგრამა user.gif user.gif

Posted by: Datvlas-vin-gtxovs 6 Jan 2020, 12:38
C17H19NO3
რამე უფრო ჯიგრული არ გვაქ? biggrin.gif ეგ საბავშვო ბაღია
CODE
1) if not True ნიშნავს False და ეგ ბლოკი არ გაეშვება
2) elif not (False) იგივეა რაც True და პასუხიც ეგაა

2

Posted by: RexxaR 6 Jan 2020, 12:40
2 ს jump.gif jump.gif




30 jer 30

Posted by: Definitely_Maybe 7 Jan 2020, 20:27
Datvlas-vin-gtxovs

ცოტა რთული smile.gif

ლისტი რომელიც შეიცავს ციფრებს გაასუფთავე ერთნაირი ციფრებისგან.
შეიძლება რაიმე მზა მეთოდი არსებობს არ ვიცი.

Posted by: Datvlas-vin-gtxovs 8 Jan 2020, 11:33
Definitely_Maybe

#mylist = list(dict.fromkeys(mylist)) ამითაც კეთდება მარა ციკლით გავაკეთე

CODE
sia = [2, 2, 1, 0, 1, 3]
marto = []

for yvela in sia:
   if yvela not in marto:
       marto.append(yvela)

sia = marto
print(sia)


უფრო ჯიგრული ამოცანა მჭირდება biggrin.gif


Posted by: Datvlas-vin-gtxovs 14 Jan 2020, 19:32
თამაში ჩამოხრჩობანა / სიტყვის გამოცნობა
CODE
import random

sia = ['msxali', 'dekemberi', 'aisi', 'pitna', 'saukune']
sityva = random.choice(sia)

#დასახვეწია
def tamashi():
   fifqi = '*' * len(sityva)
   cda = 3

   while cda > 0 and sityva != fifqi:
       print(fifqi)
       pasuxi = input('> ')
       if pasuxi in sityva:
           print('Ki!')
           fifqi = sityvisShevseba(sityva, fifqi, pasuxi)
       else:
           cda -= 1
           print('Nw! Darcha', cda, 'cda')
   if cda == 0:
       print('Closed Naxui!')
   else:
       print('Tqven moiget feni!', sityva)

def sityvisShevseba(sityva, fifqebi, aso):
   shedegi = ''
   for i in range(len(sityva)):
       if aso == sityva[i]:
           shedegi += aso
       else:
           shedegi += fifqebi[i]
   return shedegi

tamashi()

Posted by: Datvlas-vin-gtxovs 19 Jan 2020, 12:19
მოკლე კოდი
CODE
ric = [5, 7, 11, 24, 26]
a = list(map(lambda x: x**2, ric))
print(a)

* * *
ფაქტორიალის ფუნქცია
CODE
def faqt(n):
   if n < 2:
       return 1
   pasuxi = 1
   for i in range(1, n+1):
       pasuxi *= i
   return pasuxi

faqt(6)
#720


როგორც ამბობენ რეკურსიითაც კეთდება, ბევრად მოკლე კოდია, მარა დიდი მეხსიერება მიაქ

Posted by: C17H19NO3 20 Jan 2020, 21:54
აუ ამ დედასახნავ itertools იყენებთ ხშირად??

ტვინი ამიდუღდა ბლიად :@ ერთი ორი დღე უნდა დავუთმო ამას, ან ისევ დავიკიდებ რამდენიმე კვირა მთლიან პითონს biggrin.gif
მამენტ მოდულია და როგორც ყველას ათასი რაღაც აქვს პროსტა სასწავლო კურსშია და აშკარად არ მომეწონა

Datvlas-vin-gtxovs

მინდა ხოლმე მეც დავდო მაგრამ მეზარება ხშირად :/ დაჟე შემოვდივარ აქ დავწერ რაღაცას და მერე შუაში ვწყვეტ და სულ ვშლი ნერვი არ მყოფნის ხოლმე givi.gif

help.gif help.gif help.gif

Posted by: Datvlas-vin-gtxovs 20 Jan 2020, 22:35
C17H19NO3
ჩემში ჩასახლდა ნიკოს სული, დამიძახეთ მერანი
მაგრამ რატომ ვწერ აქ კოდებს... მე რავი

ჩემით facepalm.gif

user posted image

Posted by: RedShark 20 Jan 2020, 22:37
QUOTE (C17H19NO3)
აუ ამ დედასახნავ itertools იყენებთ ხშირად??

ტვინი ამიდუღდა ბლიად :@ ერთი ორი დღე უნდა დავუთმო ამას, ან ისევ დავიკიდებ რამდენიმე კვირა მთლიან პითონს
მამენტ მოდულია და როგორც ყველას ათასი რაღაც აქვს პროსტა სასწავლო კურსშია და აშკარად არ მომეწონა

მთლიანად პროგრამირება უნდა დაიკიდო მაშინ, ნებისმიერ ნამუსიან ენას აქვს იტერატორები biggrin.gif

აუცილებლად დაგჭირდება რეალურ პროექტებზე მუშაობისას. ახლა უბრალოდ გაარჩიე მაგალითები, შენებურად დააკომენტარე და შეინახე მერე ადვილად რომ გაიხსენო. ცოტა უფრო advanced დონეზე რომ გადახვალ მიხვდები რაშიც გჭირდება.

https://docs.python.org/3/library/itertools.html

Posted by: C17H19NO3 20 Jan 2020, 23:18
Datvlas-vin-gtxovs
QUOTE
C17H19NO3
ჩემში ჩასახლდა ნიკოს სული, დამიძახეთ მერანი
მაგრამ რატომ ვწერ აქ კოდებს... მე რავი


არ ველოდი და ძააან გამისწორდა givi.gif givi.gif givi.gif ამ ცხელ გულზე

RedShark
QUOTE
აუცილებლად დაგჭირდება რეალურ პროექტებზე მუშაობისას.

ძალიან დიდი მადლობა, ეს მაინტერესებდა ზუსტად smile.gif


Posted by: NinjaRacer 21 Jan 2020, 06:53
Datvlas-vin-gtxovs
CODE

class groupby:
   # [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
   # [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D
   def __init__(self, iterable, key=None):
       if key is None:
           key = lambda x: x
       self.keyfunc = key
       self.it = iter(iterable)
       self.tgtkey = self.currkey = self.currvalue = object()
   def __iter__(self):
       return self
   def __next__(self):
       self.id = object()
       while self.currkey == self.tgtkey:
           self.currvalue = next(self.it)    # Exit on StopIteration
           self.currkey = self.keyfunc(self.currvalue)
       self.tgtkey = self.currkey
       return (self.currkey, self._grouper(self.tgtkey, self.id))
   def _grouper(self, tgtkey, id):
       while self.id is id and self.currkey == tgtkey:
           yield self.currvalue
           try:
               self.currvalue = next(self.it)
           except StopIteration:
               return
           self.currkey = self.keyfunc(self.currvalue)


ნახე რა ტვინის დღვნაა. იტერტულზიდანაა გრუფბაი-ს იმპლემენტაცია დაახლოებით ეს არის.
* * *
ემ ამდროს გადგება დებაგერი რო ნაბინაბიჯ მიყვე პროგრამას და გაიგო როგორ მუშაობს სად შედის როდის რას აკეთებს და ა.შ. ატომი დავაყენე ხვალ რო გავიღვიძებ დავუვლი.
* * *
https://stackoverflow.com/questions/773/how-do-i-use-itertools-groupby

აი ესეც დამეხმარება.

Posted by: Datvlas-vin-gtxovs 21 Jan 2020, 10:41
NinjaRacer
მე ჯერ ამეებს ვეჭიდავები gigi.gif
CODE
ric, axali  = [2, 3, 2, 5, 5, 7, 0, 1, 1], []
sg = [axali.append(a) for a in ric if a not in axali]
axali


C17H19NO3
როგორც ამბობენ დროის ამბავია და ყველაფერს დააგდებ up.gif
* * *
გადახედეთ აბა თალესცი up.gif
CODE
#მარტივია თუ არა
ricxvi = int(input('> '))
if ricxvi > 2:
   for i in range(2, ricxvi):
       if ricxvi % i == 0:
           print(ricxvi, 'Shedgenilia')
           print(i,"jer",ricxvi//i,"aris",ricxvi)
           break
   else:
       print(ricxvi, 'Martivia')

* * *
ყველა გამყოფი
CODE
ric = int(input('> '))
for i in range(1, ric+1):
   if ric % i == 0:
       print(i)

Posted by: Datvlas-vin-gtxovs 29 Jan 2020, 08:48
X 0 თამაშს ვწერ ეხლა (ვაკოპირებ) gigi.gif
კოდს დავდებ პითონცი როგორც კი მოვრჩები

ესენი გვჭირდება
CODE
== ცვლადები ==
დაფა
ისევ თამაშობენ (True ან False)
გამარჯვებული
ვინ იწყებს

== ფუნქციები ==
1) თამაშის დაწყება
2) დაფის დახატვა
3) ვისი სვლაა
4) მორჩა თამაში?
4ა) რომელ ხაზზე მოიგეს
5) შეამოწმე ხაზები
6) შეამოწმე სვეტები
7) შეამოწმე დიაგონალები
8) იქნებ ფრეა
9) სვლა გადაცვალე


ჯერჯერობით ჩაჯმული მაქ givi.gif facepalm.gif 3 X დავსვი და მაინც გრძელდება. ნიჩიოო. გამოვასწორებ

user posted image



გავაკეთე პითონცი bis.gif https://repl.it/@QveSk/X-0

user posted image

Posted by: C17H19NO3 31 Jan 2020, 23:33
Datvlas-vin-gtxovs

ძაან მაგარია ))) როგორ კოხტად მოგიფიქრებია.. შენ აუცილებლად უნდა მიყვე ბოლომდე ამ თემას სადმე არ შეწყვიტო ჩემსავით :დდ მარტივად გაქვს გაკეთებული მაგრამ იდეა და მიდგომა ძაან მომეწონა smile.gif


Posted by: Datvlas-vin-gtxovs 1 Feb 2020, 11:23
C17H19NO3
ჯერ ისევ ქალიშვილი ვარ gigi.gif

შენ რატო შეწყვიტე?

Posted by: C17H19NO3 1 Feb 2020, 14:29
Datvlas-vin-gtxovs

გარემო არ მაქვს ადეკვატური, უამრავი საქმე მაქვს და ტვინიც გადაჭედილი ათასი სირობებით...
მერე ისევ დავიწყებ, მერე გავწყვეტ, მერე დავწიწყებ და ასე ... ბოლოს ჩამაყოლებენ პითონის ყველაზე კარგ გაიდ ბუქს და ეგ იქნება რა givi.gif

თან OOP საკითხები საკმაოდ რთულია და ჩაჯდომა უნდა წინაზეც იტერატორები რომ დავწერე, იმენა მოდულში დაიკარგები იმდენი &ლეობა დევს..

+ ამას საქართველოში პიზდეცია რაა, სადღაც გინდა შეძვრე დაიწყო რამე რეალური აკეთო და ჩემი ფეხები..
ვიღაცას გონია რომ Freelanceრობაა გამოსავალი ... .. ამ თემებზე მეზარება ეხლა წერა


Posted by: Datvlas-vin-gtxovs 1 Feb 2020, 23:17
C17H19NO3
QUOTE
Freelanceრობაა

ამით ვერ იცხოვრებ პითOნის კაი სპეციალისტი?

Posted by: C17H19NO3 2 Feb 2020, 18:00
Datvlas-vin-gtxovs
QUOTE
ამით ვერ იცხოვრებ პითOნის კაი სპეციალისტი?

ვისთვის როგორია ცხოვრება გააჩნია smile.gif
"კაი სპეციალისტი" - ბევრი რამით ირჩენს თავს ამასთანავე freelancer ობითაც. და ზოგადად იდეალური გზაა ნებისმიერი დეველოპერისთვის მაგრამ არც ისე მარტივი

გიცდია ისე მოხვედრა ? upwork ზე მაგალითად ,
მერე იქ რაიმე საქმის აღება + ან გადაიხდიან ან არა + ან დაგიქირავებენ ან არა და გავიდა 3 თვე..

შენ პირადად გირჩევდი რომ მიაწვე ბოლომდე 1 წლის თავზე ძალიან კარგ პოზიციაზე გაიჩითები smile.gif თუ იქამდე არა.

Posted by: NinjaRacer 2 Feb 2020, 18:17
Datvlas-vin-gtxovs
ჯანგოს, ოდუს ან ფლასკის 'კაი სპეციალისტი' თუ ხარ არა მაგარი სპეციალისტი თუ ხარ. მინიმუმ 4-ათასიანი ხარ თქვეში smile.gif

პითონის კაი სპეციალისტობა არცისე მარტივია. ასევე გამოცდილება გინდა 1-2 წელი. უფრო 2 წელი. თუ არ გაჩერდები თავს ირჩენ და მეტიც) მე მეორე პითონ სამსახურიდან წამოვედი. რატო მკითხავ და გამაკრიტიკებს ზოგი, მითუმეტეს დღევანდელ საქართველოში მაგრამ მეზარება წერა)

Posted by: Definitely_Maybe 2 Feb 2020, 20:34
C17H19NO3
QUOTE
ვიღაცას გონია რომ Freelanceრობაა გამოსავალი ... .. ამ თემებზე მეზარება ეხლა წერა


NinjaRacer
QUOTE
მე მეორე პითონ სამსახურიდან წამოვედი. რატო მკითხავ და გამაკრიტიკებს ზოგი, მითუმეტეს დღევანდელ საქართველოში მაგრამ მეზარება წერა)


არადა ვფიქრობ ვინც აქ შემოდის უმრავლესობას ეგ თემები აინტერესებთ smile.gif

Posted by: Datvlas-vin-gtxovs 2 Feb 2020, 22:57
NinjaRacer
QUOTE
ჯანგოს, ოდუს ან ფლასკის 'კაი სპეციალისტი' თუ ხარ არა მაგარი სპეციალისტი თუ ხარ. მინიმუმ 4-ათასიანი ხარ თქვეში

ესენი ვებია როგორც ვიცი
მე უფრო AI მინდა gigi.gif ეგეთი რაღაცეები მაინტერესებს
თორე ვებს HTML CSS JS ითაც ვაკეთებდი up.gif

მე რაც ვაკვირდები არ უნდა დაეცე რა. 3-4 ჯერ მაინც მაქ თავი დანებებული პროგრამირების სწავლას მაგრამ მერე ისევ ვუბრუნდები war.gif

C17H19NO3
QUOTE
გიცდია ისე მოხვედრა ? upwork ზე მაგალითად ,

3 თვე მისრულდება პითონში. ჯერ კიდე ახალი ვარ და ჯერ არსად მიცდია სადაც იხდიან

Posted by: NinjaRacer 3 Feb 2020, 08:50
Datvlas-vin-gtxovs
რავი ბექზე წერა საინტერესოა.
არამარტო ვები. ოდუუ მაგალითად ERP სოლუშენია. ფლასკში ვებისგარდა დახუია რამე შეგიძლია დაწერო API ები დაწერო.
QUOTE
არადა ვფიქრობ ვინც აქ შემოდის უმრავლესობას ეგ თემები აინტერესებთ

როგორი თემები სამსახურიდან რატომ წამოვედი მე? smile.gif
* * *
Datvlas-vin-gtxovs
ჰააა ეს გაგისწორდება



ალგორითმი შეგიძლია დაწერო რომელიც ამოიცნობს 'ბოტებს' smile.gif
* * *
ups. ეგ საერთოდ არაა დამწყებებისთვის და ამით რომ დაიწყო ისე დაგაბნევს ცხოვრებაში მეორედ აღარ მოკიდებ ხელს.
რო არ მაინტერესებს დიდად ეს ხელოვნური ინტელექტი ამიტომ არ მიმიქცევია ამისთვის ყურადღება.

ეს ჯობია ალბათ***

* * *
ეს freecodecamp-ი ძალიან მომწონს.
ამით ვისწავლე ადრე ჯავასკრიპტი, ჯეიქუერი, ციესესი, ბუტსტრაპი და ეიჩტიემელი და პითონიც.

გუშინ კიდევ 3 საათიანი ვიდეოს ვუყურე C-ზე. ელემენტალურ ბეისიკებს, სინტაქსს და მონაცემთან სტრუქტურებს შეგასწავლის.
C სწავლა არის მართლა ელმენტალური. აი რთული რაღაცეებზე რო გადახვალ მერე იწყება რაც იწყება smile.gif ენის სწავლა თვითონ არაა საერთოდ რთული.
3 საათში ისწავლ smile.gif ელემენტალურ დონეზე****

Posted by: NinjaRacer 17 Feb 2020, 04:35
მომენატრა პითონი და თან მაინც ვერ გავედი იმ დონეზე რო პითონის დეველოპერი მერქვას. პრინციპში არც მიცდია რაც მინდა ის ისედაც გამომდის

CODE

from time import sleep

def lister(n,mygen):
   rv = []
   next(mygen)
   for count,i in enumerate(n):
       print(f'sending {i} to genterator')
       sleep(0.2)
       mygen.send(i)
       print(count,i)
   next(mygen)
   mygen.close()
   return rv

def mygen(n):
   print("starting loading\n")
   count, data = 0, (yield)
   while data is not None:
      print('{:.2%}'.format(count/n), end=' ')
      count, data = count + 1, (yield)
   print('done counting\n')
   stop = (yield)

xlist = [53,23,55,199,200,1009]
lister(xlist, mygen(5))

* * *
https://www.youtube.com/watch?v=RdhoN4VVqq8

აქ რასაც ჩალიჩობს ეს ტიპი მინდა ყველა დავუყვე.
ვითომ უფრო ადვილ კოდს წერს სინამდვილეში ცუდია, მაგრამ როცა პარამეტრების შემცირება გინდა და ფუნქციის გაადვილება რომ სხვა ადვილად გაარჩიოს შენი ფუნქცია მაშინ კარგია.
იმიტომაცაა ჯანგო მტლიანად მეტაკლასებზე აგებული.

Posted by: NinjaRacer 5 Mar 2020, 05:23
ბლიად მთელი ყველა ივეთნ ლუფი სელექტზე ყოფილა აგებული.

https://www.youtube.com/channel/UCQdXir0v9y5RRgSKzDHbRMg

ამ ტიპს აქვს კარგი ვიდეო სელექტზე და რეიმონდ ჰეტინგერს ხო ვაფშე.
აი ასინქრონული სერვერი

CODE
import socket, select, sys

s = socket.socket()
s.bind(('',1234))
s.listen(4)
conn, addr = s.accept()
print(f'connectino from: {addr} on server {conn}')

while True:
   send_msg, _, _  = select.select([sys.stdin, conn], [], [])

   if sys.stdin in send_msg:
       print('sending message to client')
       server_msg = input()
       conn.send(server_msg.encode())
   elif conn in send_msg:
       print('printing client message')
       client_msg = conn.recv(1024).decode()
       print(client_msg)
   else:
       s.close()


და ცლიენტი

CODE

import select, sys, socket

connection = socket.socket()
connection.connect(('localhost', 1234))

print('connected to server')


while True:
   readers, _, _ = select.select([sys.stdin, connection], [],[])
   if connection in readers:
       print('recieved from server\n')
       server_msg = connection.recv(1024).decode()
       print(server_msg)
   elif sys.stdin in readers:
       msg = sys.stdin.readline()
       connection.send(msg.encode())

Posted by: Datvlas-vin-gtxovs 17 Mar 2020, 12:30
NinjaRacer
ამ მიმართულებით ვარ biggrin.gif


Posted by: C17H19NO3 20 Mar 2020, 00:32
ბოლოს გავგიჟდები მგონი და გადმოხტომას დავაპირებ ან რამე ყ*ლეობას ჩავიდენ

ვერ ვისვენებ მაინც კოდის წერა მინდა, მაინც პითონს ვეტიტინები მაინც რაღაცების ისევ პითონზე ვარკვევ და კაროჩე რა sad.gif

ვინმემ ფსიქოლოგიური პოსტი დამიდეთ, DevOps და დეველოპერ შორის იხლიჩება ჩემი ტვინი ,, არცერთი იცის ნორმალურად, მაგრამ მაინც კოდისკენ მეძალავება, მერე ისევ devops მინდა თითქოს... სადღაც ძაან მენძრევა სასტავ ...

Posted by: Datvlas-vin-gtxovs 22 Mar 2020, 12:21
C17H19NO3
რომ არა AI, დავიკიდებდი პითონს
მარა მომავალი მაგათია და მეც მეტი რა დამრჩენია up.gif
Machine Learning ს ვუზივარ ეხლა და ეგეთი საინტერესო თემა მე არ მახსენდება
* * *
ნაღდი Machine Learningები
CODE
import tensorflow as tf
from tensorflow import keras
import numpy as np

model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0, 9.0, 11.0], dtype=float)

model.fit(xs, ys, epochs=200)
print(model.predict([10.0]))

* * *
ჯიგრული ლექცია

Posted by: Tabo 25 Mar 2020, 03:31
სადმე არის პითონზე ნორმალური ლექციები/წიგნები ან რაიმე მსგავსი სადაც განიხილავენ snmp პროტოკლის ან telnet ის მუშაობას დაწვრილებით?
ძაან ანომალიური პრობლემები მაქვს user.gif

Posted by: NinjaRacer 25 Mar 2020, 12:01
Tabo
კი არის წიგნი

python for sysadmins ქვია ძველია ძალიან მაგრამ snmp-ზე ძალიან დაწვრილებით წერია.

Posted by: Finwelir 26 Mar 2020, 06:17
https://forum.ge/?f=48&showtopic=35145921. ეს თემა გავხსენი და არავინ შეიმჩნია user.gif აქ ხომ არ ხართ/სწავლობთ ვინმე მაგ განხრით?

Posted by: Definitely_Maybe 30 Mar 2020, 13:48
გამარჯობა

პატარა კოდი დავწერე და მინდა რომ როგორც ცალკე პროგრამა ეშვებოდეს ნებისმიერ კომპიტერზე. სად ვეძებო ჰო ვერ დამეხმარებით?
https://www.youtube.com/watch?v=EYpOPmFPecs

თიტქოს გასაგებია ყველაფერი, ჩემ კომპზე მუშაობს მაგრამ სხვაგან სადაც პითოი არაა დაყენებული არ ირთვება

Posted by: RedShark 30 Mar 2020, 14:39
QUOTE (Definitely_Maybe @ 30 Mar 2020, 13:48 )
გამარჯობა

პატარა კოდი დავწერე და მინდა რომ როგორც ცალკე პროგრამა ეშვებოდეს ნებისმიერ კომპიტერზე. სად ვეძებო ჰო ვერ დამეხმარებით?
https://www.youtube.com/watch?v=EYpOPmFPecs

თიტქოს გასაგებია ყველაფერი, ჩემ კომპზე მუშაობს მაგრამ სხვაგან სადაც პითოი არაა დაყენებული არ ირთვება

პითონის ინტერპრეტატორის გარეშე არ გაეშვება, მაგრამ მთლიანად SDK - ს დაყენება არ არის საჭირო, შენი პროგრამა და ინტერპრეტატორი უნდა "შეფუთო" ერთად. რამდენიმე სპეციალური პროგრამა არსებობს ამისთვის, ერთ-ერთი მაგალითად - pyinstaller (ვიდეოები ნახე იუთუბიზე).


Posted by: Definitely_Maybe 30 Mar 2020, 15:40
RedShark
მადლობა

user posted image

დამტანჯა ამ pyinstaller -მა.

pip -ც დავაყენე და pyinstaller-იც მაგრამ არ ეშვება მერე

Posted by: Finwelir 30 Mar 2020, 16:36

Posted by: Definitely_Maybe 27 Apr 2020, 18:35
გამარჯობა, ჯანგო მინდა მოვსინჯო. ჰომ ვერ მირჩევთ კარგ კურსს?

Posted by: Definitely_Maybe 6 May 2020, 22:56
ასეთ ამოცანას ვხსნიდი დღეს. ნებისმიერი ნატურალური რიცხვის ციფრების ჯამის გამოსათვლელი ფუნქცია უნდა დამეწერა. ანუ თუ n=12345, digit_root = 1+2+3+4+5=15 = 1+5 = 6
while loop ით კი ამოვხსენი მაგრამ გადავეყარე ასეთ ამოხსნას და ცოტა იქნებ ახსნათ?
n%9 or n and 9

Posted by: lovelock 9 Sep 2020, 13:07
გამარჯობა, პითონის ტესტი მაქვს for beginners.
რა შეიძლება რომ მკითხონ?

core object
variables
conditionals
loops
functi0ns

კიდევ რა შეიძლება მკითხონ.
ერთი საათია ტესტი.

Posted by: Definitely_Maybe 10 Sep 2020, 00:31
lovelock
კლასები?

რა ტესტია ისე?

Posted by: lovelock 11 Sep 2020, 02:41
Definitely_Maybe
ჰო ეგ გამომრჩა
მადლობა.
რავი 60 წუთიანი ტესტიაო
ჯერ არ ვიცი რა ფორმატშია.
რომ ჩავაბარებ მერე დავპოსტავ.

Posted by: NinjaRacer 11 Sep 2020, 02:50
lovelock
რეკურსიული ფუნქცია შეიძლება გკითხონ როგორ მუშაობს.
??? არც ლამბდაზე არ გკითხავენ, არც გენერატორზებზე. არც სრედებზე და არც ეისინქსზე.
ბაიზიკ ტესტი იქნება.

მეეჭვება დამწყებისთვის თუა რაიმე რთული იყოს.
data structures, for, while, if, შეიძლება try/catch-იც მარა თუ დამწებია ეგეც არ იქნება. არც lambda.
https://docs.python.org/3/tutorial/index.html

აქედან ამოკრიბეს თემები და ტესტი შეადგინეს.
\
პს. გუდ ლაქ.

ლუპებში break, continue, pass როგორ მუშაოს გადაიკითხე და დაწერე რამე მარტივი პრაკტიკისთვის.

ჰო string c omprasion-ზე იციან კიდე გაჭედვა.
in, not, ==, != და აშ.

Posted by: lovelock 20 Sep 2020, 20:15
NinjaRacer

ჩავაბარე ამ წუთას.

60 წუთი იყო და 53-ში მოვრჩი.
რა თქმა უნდა დავგუგულე ზოგი სინტაქსი.

3 კითხვა იყო:

1. სტუდენტების ტესტების ნიშნების აღმრიცხველი პროგრამა
2. სტრინგების დათვლა /დაჯამება
3. სტრინგების ლექსიკონური სორტიროვკა

მოკლედ ვნახოთ თუ არის სწორი. პასუხი არ ვიცი ჯერ.

Posted by: NinjaRacer 20 Sep 2020, 20:25
lovelock

ყოჩაღ.
თუ მალე მორჩი ე.ი არსად არ გაიჭედე და მარტივი.
1. ზე კლასი შექმენი? თუ კლასები გამოყენება არ იყო სავალდებულო?
ფუნქცია დაწერე ალბათ?

სტრინგებსაც დათვლიდი for loop-ით.
კოდი არ გატესტე?
არ იცი რას ქვია? multiple choice-ები იყო?
მოკლედ მალადეც. წარმატებები.

Posted by: lovelock 20 Sep 2020, 20:38
NinjaRacer
არ იყო multiple choice არც ერთი.
3 კითხვა და სამი პროგრამა იყო დასაწერი.
პირველზე კლასი არ შემიქმნია. არც ფუნქცია გამოვიყენე, ნუ ტოტალი დავთვალე და ეგ არაა ფუნქცია მგონი. უბრალოდ variable გამოვიყენე + ინიციალიზაციაც გავუკეთე. error handling გავაკეთე ასევე input-ზე.

სტრინგებზე დათვლა while ლუპით და მერე IF კონდიცია.

კი დავტესტე. ატომში ვწერ და მერე ტერმინალზე დავტესტე. ყველაფერი მუშაობდა როგორც შეკითხვა ითხოვდა და ვნახავ აბა.


ადვილი იყო საერთო ჯამში მგონი.

მადლობა!


Posted by: NinjaRacer 21 Sep 2020, 00:29
lovelock
გუდ.
ერორ ჰენდლინგი როგორ გააკეთე
try:
except?

ასე კეთდება ეგ ლამაზად
CODE

>>> while True:
...     try:
...         x = int(input("Please enter a number: "))
...         break
...     except ValueError:
...         print("Oops!  That was no valid number.  Try


https://docs.python.org/3/tutorial/errors.html

ატომი ვერ დავამუღამე.

https://code.visualstudio.com/
ეს არის ჩემთვის იდეალური ედიტორი. ძაან მსუბუქია

ველქამ წარმატებები გუდ ჯაბ

Posted by: DARKnodo 21 Sep 2020, 11:12
QUOTE (NinjaRacer @ 20 Sep 2020, 23:29 )
https://code.visualstudio.com/
ეს არის ჩემთვის იდეალური ედიტორი. ძაან მსუბუქია

ელექტრონზეა დაშენებული, შესაბამისად მსუბუქი ვერ იქნება.

Posted by: NinjaRacer 21 Sep 2020, 11:17
DARKnodo
ისეთ ჰოსტებზე იმ უშავა მაგან სადაც სხვა კვდებოდა და რავი.

Posted by: lovelock 22 Sep 2020, 22:18
NinjaRacer
QUOTE
გუდ ჯაბ

კარგა ხანია არავის უთქვამს.. წლებია.
მადლობა 2kiss.gif

პასუხები მოვიდა და ჩავაბარე jump.gif jump.gif jump.gif

Posted by: NinjaRacer 27 Sep 2020, 23:58
lovelock
QUOTE
პასუხები მოვიდა და ჩავაბარე 

წარმატებები. ძალიან მაგარი ესე უცებ რო გაერკვიე და ჩააბარე მაგარია ძალიან. აბა შენ იცი.

Posted by: Essiittaaa 4 Oct 2020, 22:13
გამარჯობა, ამ კოდში მაინტერესებს
QUOTE
{square(i)
კონკრეტულად ეს რას აკეთებს ?

def square(x):
return x * x

for i in range(10):
print (f"The square of {i} is {square(i)}")

Posted by: NinjaRacer 5 Oct 2020, 00:35
Essiittaaa
აბრუნებს კვადრატს.
რა არგუმენტსაც მიცემ ფუნქციას თავისთავზე ამრავლებს და გიბურუნებს.

Posted by: Essiittaaa 5 Oct 2020, 12:07
NinjaRacer
QUOTE
def square(x):
return x * x


აქ რადგან არის განსაზღვრული რომ x*x არის squere-იო მაგიტო ხო ?
* * *
cars=['mazda', 'bmw', 'mercedes', 'opel', 'nissan', 'honda']
print("this is the cars list:\n",cars.upper())

QUOTE
cars.upper()

upper-ის გარეშე მუშაობს, აფერით არა და რატომ?

Posted by: Lilith 7 Oct 2020, 01:35
Essiittaaa
QUOTE
upper-ის გარეშე მუშაობს, აფერით არა და რატომ?

CODE
AttributeError: 'list' object has no attribute 'upper'

არ აქვს ეგ მეთოდი და იმიტომ. რისი გაკეთება გინდა, uppercase-ში თუ გინდა რომ დაბეჭდოს თითოეულ ელემენტს ცალკე უნდა გამოუძახო

» სპოილერის ნახვისთვის დააწკაპუნეთ აქ «

Posted by: Essiittaaa 9 Oct 2020, 22:06
Lilith
QUOTE
print("this is the cars list:\n", [car.upper() for car in cars])


ეს გამოვიყენე და არ შვრა sad.gif


user posted image

Posted by: გიორგი XII 9 Oct 2020, 23:07
Essiittaaa

cars=['mazda', 'bmw', 'mercedes', 'opel', 'nissan', 'honda']
print("this is the cars list:\n", [cars.upper() for cars in cars])

რანაირად არ შვება
სინტაქსურ შეცდომას უშვებ დააკვირდი აბა

ეს გამოგიტანს ყველა სახელს აფერით

Posted by: Essiittaaa 9 Oct 2020, 23:30
გიორგი XII
გამოიტანა მადლობა, ჩემი ბრალი იყო

ჯერ for ფუნქციას კარგად ვერ გავუგე ჩაინიკი ვარ, მარტივ ენაზე ხო ვერავინ მეტყვით რას შვება?

Posted by: NinjaRacer 10 Oct 2020, 04:52
for loop მარტივ ენაზე მეც მაინტერესებს რა შვება.

user posted image

რთულ ენაზე ალბათ iter მეთოდი რა ობიექსაც აქვს იმათზე იძახებს iter მეთოდს სანამ StopIteration ექსეფშენს არ ისვრის. ანუ სანამ ამ ობიექტში ყველა ელემენტს არ ამოწურავს. C რო მესწავლა თავის დროზე ბევრად მარტივად გავიგებდი ოჰ... მაგის დედასაც იქ ###### 2 წელი ვერ შევალევ პითონ4ევა




პ.ს კოდის წერას თუ აპირებთ ბევრჯერ შეიგინებით ამ პროცესში ბევრ ცრრემლსაც დაღვრით და ბოლოს მიხვდებით რო ყველაფერი სტაქოვერფლოუზე წერია და ტყუილად წვალობთ. ამ დროს უკვე სენიორ დეველოპერი ხარ.

Posted by: Essiittaaa 10 Oct 2020, 13:52
პიშარმს ვინც იყენებთ, პითონ აიდლში დაწერილ კოდებს არ მიხსნის იქ, ანუ შეცდომას მიგდებს, ხო არ იცით რისი ბრალი შეიძლება იყოს ?


Python was not found but can be installed from the Microsoft Store: https://go.microsoft.com/fwlink?linkID=2082640
Process finished with exit code 9009

Posted by: NinjaRacer 10 Oct 2020, 15:19
Essiittaaa
გაეშვი პიჩარმს

visual studio code -დააყენე და აქ მონიშნავ პითონს.

user posted image

Posted by: ალან 10 Oct 2020, 18:54
სხვადასხვა ტიპის sequences-ებში არსებულ item-ებზე ერთდროულად შეგიძლიათ მანიპულაციის მოხდენა/იტერაცია. ეს არის ალბათ for loop-ის მარტივი ახსნა

Posted by: gio_rgi 10 Oct 2020, 22:02
QUOTE (გიორგი XII @ 9 Oct 2020, 23:07 )
Essiittaaa

cars=['mazda', 'bmw', 'mercedes', 'opel', 'nissan', 'honda']
print("this is the cars list:\n", [cars.upper() for cars in cars])

რანაირად არ შვება
სინტაქსურ შეცდომას უშვებ დააკვირდი აბა

ეს გამოგიტანს ყველა სახელს აფერით

ასე უნდა ჩაწეროთ ციკლში თან cars ცვლადი მასივის ტიპისა და მას არ აქვს მეთოდი upper
CODE

cars=['mazda', 'bmw', 'mercedes', 'opel', 'nissan', 'honda']
for car in cars:
      print("this is the cars list:\n",  car.upper())

* * *
QUOTE (gio_rgi @ 10 Oct 2020, 22:02 )
QUOTE (გიორგი XII @ 9 Oct 2020, 23:07 )
Essiittaaa

cars=['mazda', 'bmw', 'mercedes', 'opel', 'nissan', 'honda']
print("this is the cars list:\n", [cars.upper() for cars in cars])

რანაირად არ შვება
სინტაქსურ შეცდომას უშვებ დააკვირდი აბა

ეს გამოგიტანს ყველა სახელს აფერით

ასე უნდა ჩაწეროთ ციკლში თან cars ცვლადი მასივის ტიპისა და მას არ აქვს მეთოდი upper
[CODE]
cars=['mazda', 'bmw', 'mercedes', 'opel', 'nissan', 'honda']
for car in cars:
      print("this is the cars list:\n",  car.upper())
[CODE]

ან ასე
CODE

cars=['mazda', 'bmw', 'mercedes', 'opel', 'nissan', 'honda']
print("this is the cars list:\n", [car.upper() for car in cars])


შენთან for ციკლში იტრატორს და მასივ ცვლად რომლის იტრეციასაც ახდენ ერთი და იგივე სახელი აქვს

Posted by: Gi_OrKi 16 Oct 2020, 19:25
..................................................................................................................

Posted by: გიორგი XII 16 Oct 2020, 19:38
Gi_OrKi
QUOTE
და პასუხია:
1.3333333333333333
naklebia

რანაირად? ან რას ვაკეთებ არასწორად?


და რა გინდა აბა რო გამოგიტანოს?

Posted by: Gi_OrKi 16 Oct 2020, 20:07
გიორგი XII

ამერია გონება :დ ფუი biggrin.gif

Posted by: გიორგი XII 16 Oct 2020, 20:10
Gi_OrKi
QUOTE
ამერია გონება :დ ფუი


ხშირად იცის givi.gif

წყალი და დასვენება

მე პომოდოროს ტექნიკას გირჩევ

https://en.wikipedia.org/wiki/Pomodoro_Technique


Posted by: Gi_OrKi 16 Oct 2020, 21:01
გიორგი XII

რა ცუდი გონების არევები სცოდნია biggrin.gif

Posted by: Liebermann 24 Oct 2020, 13:51
ვთქვათ მაქვს hex byte სტრიქონი სურათის a = '0xFF...' როგორ შეიძლება ეს ფაილად შევინახო jpg ან jpeg?


Posted by: Essiittaaa 28 Oct 2020, 21:22
class Flight():
def __init__(self, capacity):
self.capacity = capacity
self.passengers = []

def add_passenger(self, name):
if not self.open_seats():
return False
self.passengers.append(name)
return True

def open_seats(self):
return self.capacity - len(self.passengers)

flight = Flight(3)

people = ["Shalva", "Romeo", "Giorgi", "Saba"]
for person in people:
success = flight.add_passenger(person)
if success:
print(f"added {person} to flight successfully.")
else:
print(f"no available seats for {person}")



შეგიძლიათ ამ კოდის გარჩევაში დამეხმაროთ?
კლასი გასაგებია რაც არის, დეფიც ასე თუ ისე გასაგებია, ინიტი და სელფი რას აკეთებს ეგ ცოტა ვერ გავიგე

Posted by: NinjaRacer 29 Oct 2020, 03:07
Essiittaaa
აქ
flight = Flight(3)

flight არის ამ კლასის ინსტანსი. 3-ი გადაეცემა capacity-ის. რომელიც __init__(self, capacity) ფუნქციაშია. ფუქციას მეთოდი ქვია როცა კლასშია. იგივე ფუნქციაა შინაარსით)
რატო მიენიჭება სამი capacity-ის და ახტება სელფს? იმიტომ რომ self -ს ენიჭება flight ანუ თვითონ ამ კლასის ინსტანსის ობიექტი. შიგნიდან კლასმა რომ მიმართოს ინსტანს...

უბრალოდ კლასის ინიციალიზაციის დროს flight = Flight(flight, 3) რომ არ წერონ ნაგულისხმევია რომ ისედაც მიენიჭება ტოლობის მაცხენა მხარეს რაცაა ის პირველ არგუმენტს ანუ სელფს.

მგონი გასაგებად ავხსენი მე სანამ ეგ არ გავიაზრე ვერ ვგებულობდი.

CODE



class TestClass:
   def __init__(self):
       self.size = 10


classinstance = TestClass()
print(classinstance.size)


აი აქ. classinstnace.size როგორ მიწვდა size რომელიც კლასში გიწერია?
1. კლასის კონსტრუქტორმა __init__ -მა შექმნა ობიქეტი სახელად classinstance ჩერეზე სელფით გადასცა კლასს ეს ობიექტი და მიაბა size.



და __init__ ი პროსტა სფეც ფუნქციაა რომელიც თავისით ეშვება როცა კლასს ანიჭებ რამე ცვლადს ან პროსტა იძახებ ამ კლასს.

სულ ეგაა იზი პიზი.

CODE

class TestClass:
   def __init__(self):
       print('I print When you call or assign class to a var')
   
   def do_nothing(self):
       print('I do nothing')

TestClass()

x = TestClass()

x.do_nothing()


QUOTE
I print When you call or assign class to a var
I print When you call or assign class to a var
I do nothing


ამას დაწერს.

ვაფშე __call__ მეთოდიც არსებობს კიდე რომელიც ავტომატურად ეშვება როდესაც კლასის ინსტანსს გამოძახებას აკეთებ. გამოძახება სფეც სინტაქსით ხება () ფრჩხილებით.
CODE

class TestClass:
   def __init__(self):
       print('I print When you call or assign class to a var')
   
   def do_nothing(self):
       print('I do nothing')
   
   def __call__(self):
       print('guess what Im going to do')


x = TestClass()

x() # აქ იძახებ ინსტანსს და ავტომატურად call მეთოდი ეშვება.


namespace ები და module- ები რა არის ეგ უნდა გაარკვიო კარგად თუ გინდა რო ლოგიკა გაიგო პითონის.
მერე decorator-ები. ყველა ფრეიმვორკი ვაფშე დეკორატორებს იყენებს. ქოლბექ ფუნქციებიც.

https://www.youtube.com/watch?v=0067sd9QSq4&ab_channel=RodboroughICT

მერე რეკურსიულ ფუნქციებსაც გაარჩევ და ეგაა 90% პითონის რაც ოდესმე დაგჭირდება. ნუ მემკვიდრეობა და MRO მაქსიმუმ და სულ ეგაა და დანრჩენები ძალიან მარტივია. პროსტა ართულებენ ყველაფერს როცა უმარტივესია. თუ კარგად ახსნი. მაგრამ უყვართ გართულება ყველაფრის. პითონში ვაფშე ყველა კონცეპტი არის ერთნაირი სირთულის როცა ფუნდამენტალებს გაიგებ.

Posted by: Essiittaaa 29 Oct 2020, 23:23
NinjaRacer
მადლობა დიდი


მოკლედ ნაწილობრივ გავიგე რა, ჯობს სადმე კურსი ავიღო და მასე ვისწავლო თორე ჩემით რომ ვსწავლობ იმდენი კითხვა მიჩნდება რომ დაგუგლვას ვერ ვასწრებ...

Posted by: NinjaRacer 30 Oct 2020, 00:52
Essiittaaa
QUOTE
მოკლედ ნაწილობრივ გავიგე რა, ჯობს სადმე კურსი ავიღო და მასე ვისწავლო თორე ჩემით რომ ვსწავლობ იმდენი კითხვა მიჩნდება რომ დაგუგლვას ვერ ვასწრებ...

ეგ კარგია. მეც ზუსტად ეგრე ვარ და დაგუგლვის სისწრაფე თუ > კითხვებზე მაშინ OK. განსაკუთრებით რო იწყებ ციცაბო სწავლის მრუდი აქვს მაგრამ მერე პლატოა.

მე მაქვს კურსი ავაგდებ სადმე ქლაუდზე. ადრე ვიყიდე codewithmosh.com-ზე

ჰო შენით რთულია. მე ასევე დამეხმარა. check.io და freecodecamp.org-იც და რამდენიმე წიგნი პითონზე.
მერე სამი თვე ბექადაც ვიმუშავე პითონში ვწერდი. რამდენიმე ფრეიმვორკი გავარჩიე და მაინც მიწევს დაგუგლვა.

ეხლა ახალი თემები მაქვს ბევრი და თან კეთება მიწევს თან სწავლა თან დაგუგლვა და თან ლექციების ყურება cry.gif

სამსახურში თვეში ერთხელ თუ მომიწევს პიტონის გამოყენება და მაგრად ვბოროტდები მაგაზე :დ მენატრება ხოლმე კოდის წერა yes.gif ეხლა ვნანობ იქიდან რო წამოვედი. კოდს ვწერდი ყოველდღე პითონში. თან რიმოუთი იყო პართთაიმი.

Posted by: Essiittaaa 30 Oct 2020, 01:12
NinjaRacer
მე ამ მიმართულებით მინდა მუშაობა, პირადი გეგმებიც მაქვს და სწრაფად მინდა შედეგი, კი ვიცი რომ სწრაფად არ მოდის არაფერი მარა შედარებით სწრაფად ვიდრე მხოლოდ ჩემი გუგლაობით...

მეც ჩავუჯექი ერთ კურსს edx.org-ზე რომ არის მაგრამ ის კურსი აშკარად იმათთვის არის ვინც ანაბანა უკვე იცის ისე ხსნიან.

მხოლოდ პითონი რომ ვიცოდე ანუ მუშაობას შევძლებ? და ანაზღაურება თუნდაც დამწყები პროგრამისტისთვის 1000< არის თუ ზემოთ ?

https://scsa.ge/ka/python-19-00-21-00/?fbclid=IwAR0jahCDdp4Zk1KO16INcWZ2cufqYn0F9IYk5xI_8Zook0v3Obc5uKyfYek

ამ კურსის გავლას ვფიქრობ

Posted by: NinjaRacer 30 Oct 2020, 01:28
Essiittaaa
QUOTE
მხოლოდ პითონი რომ ვიცოდე ანუ მუშაობას შევძლებ? და ანაზღაურება თუნდაც დამწყები პროგრამისტისთვის 1000< არის თუ ზემოთ ?

დამწყების სადღაც ამ ფარგლებშია კია.
აი ტესტერ+ავტომატიზაციის ინჟინერად რო იმუშაო სადმე კაკრაზ ეხლა ეძებენ ჩემთან ეგეთ ხალხს.

* * *
www.bitcamp.ge


აგერ აჰაა.........

https://www.facebook.com/bitcamp.ge/

Posted by: Essiittaaa 30 Oct 2020, 03:14
NinjaRacer

QUOTE
ტესტერ+ავტომატიზაციის ინჟინერად


რა გამოცდილებაა საჭირო მსგავს პოზიციაზე სამუშაოდ?

QUOTE
www.bitcamp.ge

აქ ვარ კაი ხანია

Posted by: აბიტურიენტი 30 Oct 2020, 09:11
QUOTE
მხოლოდ პითონი რომ ვიცოდე ანუ მუშაობას შევძლებ?

გადახედე ვაკანსიებს. ნახე მხოლოდ პითონის მცოდნესთვის რამდენ ვაკანსიას იპოვნი.

QUOTE
და ანაზღაურება თუნდაც დამწყები პროგრამისტისთვის 1000< არის თუ ზემოთ ?

350-500 ლარიდან იწყება.

QUOTE
https://scsa.ge/ka/python-19-00-21-00/?fbcl...k0v3Obc5uKyfYek
ამ კურსის გავლას ვფიქრობ

ეგ მასალა დამოუკიდებლადაც შეგიძლია გაარჩიო, უფასოდ და ბევრად უფრო სწრაფად.

Posted by: NinjaRacer 30 Oct 2020, 10:36
Essiittaaa
ძირითადად არაფერი
ალბათ
პითონთან მეგობრობა და http protocol-ი როგორ მუშაობს rest api და ა.შ.

დანარჩენს ადგილზე გასწავლიან (ალბათ)

ტესტერი განსხვავებდება დამწყები პროგრამისტისგან რეიინჯი 1000-დან ზევით ესეც ალბათ. ტესტერს უფრო ტესტერული რუტინა ექნება ვიდრე დეველოპერული. ნუ გააჩნია ორგანიზაციასასც. სადაც ყველაფერი კოდშია და კოდის ტესტებიც კოდშია და აპლიკაციის ტესტიც კოდშია იქ მეტად დაგჭირდება პითონი.
მაგრამ ძირითადად პიქსელებს დასდევ ჩაქუჩით და პოსტემენს უზიხარ და ტესტავ სხვადასხვა ენდფოინთებს ხელით. იეპ.

https://www.smashingmagazine.com/2018/01/understanding-using-rest-api/

მე მინახავს ისეთი ტესტერებიც ვინც CRUD არიცოდა. არც IP ცნება ესმის და ზოგადად კომუნიკაცია როგორ ხდება TCP/IP-ით არც პითონი. ესეც გაითვალისწინე. მე რო ამდენიწელი მაქ აიტიში ნაჩათლახარი ჩემთვის ეგ ცოოტა უცნაური იყო. მარა ისეთი ტესტერებიც შემხვედრია ბექიც როიცის ფრონტიც და ჯავასაც სწავლობდა.


https://www.smashingmagazine.com/2017/05/oauth2-logging-in-facebook/

აი აიღე ფლასკი ან ჯანგო ან FastApi შექმენი rest api და მიაბი OAuth რო გუგლით ან ფბ-თი გაიარო ავტორიზაცია შენ API-ზე და /PUT /PATCH /UPDATE /DELETE მეთოდებზე მოგთხოვოს ავტორიზაცია.

Posted by: Essiittaaa 30 Oct 2020, 23:21
აბიტურიენტი
QUOTE
500

თუკი მასწავლიან ამაზე კიდე შეიძლება დათანხმება...

QUOTE
ეგ მასალა დამოუკიდებლადაც შეგიძლია გაარჩიო, უფასოდ და ბევრად უფრო სწრაფად.

ვცადე დამოუკიდებლად მაგრამ ბევრი კითხვა მაქვს ხოლმე რომლებზეც პასუხის გაცემას ვერ ვასწრებ გუგლით




NinjaRacer
იდეაში ჩემთვის ახლა სწავლაა მნიშვნელოვანი, სულ რომ გზის და ჭამის ფული გადამიხადონ მიღირს, რა თქმა უნდა ზრდადი უნდა იყოს ანაზღაურება.

მხოლოდ ტესტირება ბევრად იოლი მგონია ვიდრე კოდის წერა :დ

QUOTE
დანარჩენს ადგილზე გასწავლიან (ალბათ)

QUOTE
ალბათ

aba.gif :დ


გადავხედე მაგ ლინკებს და როგორც მივხვდი რესტ აპი ერთ აპლიკაციას მეორეზე აკავშირებს

დეტალურად ცოტა მოგვიანებით გავივლი.

მადლობა

* * *
def a():
print("archevnebi")

def b():
print("36")
a()
a()
print("36")
a()

b()

აქ def b():-ში a() რატო იბეჭდება და b() რატო იგნორირდება ?


def a():
print("archevnebi")

def b():
print("36")
b()
a()
a()
print("36")
a()

b()

ეს კოდი საერთოდ ვერ გავიგე, რატო აგდებს ბევრ 36-ს

Posted by: NinjaRacer 31 Oct 2020, 22:04
Essiittaaa
კოდი \
CODE
ტეგებში ჩასვი რთული გასარჩევია ისე.

QUOTE
გადავხედე მაგ ლინკებს და როგორც მივხვდი რესტ აპი ერთ აპლიკაციას მეორეზე აკავშირებს


user posted image

Posted by: Essiittaaa 31 Oct 2020, 22:30
NinjaRacer
მადლობა, გასაგებია მაგ სურათით ყველაფერი, ვერ გადავხედე ჯერ სათანადოდ რესტ აპის.


CODE

def a():
   print("archevnebi")

def b():
   print("36")
   a()
   a()
   print("36")
   a()

b()



CODE

def a():
print("archevnebi")

def b():
print("36")
   b()
   a()
   a()
   print("36")
   a()

b()

Posted by: NinjaRacer 31 Oct 2020, 23:23
Essiittaaa
რესტ აპი მართლა არაფერი არაა. იძახხებ ბროუზერიდან

http://localhost/users მაგალითად
და ეს გიბრნუნებს პასუხს

თავისი ფრეიმვორკია აქვს ჯანგოს. მაგრამ ამ შემთხვევაში ფლასკით უფრო მარტივად გაიგებ რადგან ჯანგოში ავტომატურად გიგენერირებს თვითონ შენ ბოილერპლეიტ კოდს წერ. ანუ ტემპლეიტივითაა და ის ბექში ტვითონ ჩალიჩობს იმას რასაც ფლასკში ხელით წერ. მაგ:
CODE

import flask
from flask import request, jsonify

app = flask.Flask(__name__)
app.config["DEBUG"] = True

# Create some test data for our catalog in the form of a list of dictionaries.
books = [
   {'id': 0,
    'title': 'A Fire Upon the Deep',
    'author': 'Vernor Vinge',
    'first_sentence': 'The coldsleep itself was dreamless.',
    'year_published': '1992'},
   {'id': 1,
    'title': 'The Ones Who Walk Away From Omelas',
    'author': 'Ursula K. Le Guin',
    'first_sentence': 'With a clamor of bells that set the swallows soaring, the Festival of Summer came to the city Omelas, bright-towered by the sea.',
    'published': '1973'},
   {'id': 2,
    'title': 'Dhalgren',
    'author': 'Samuel R. Delany',
    'first_sentence': 'to wound the autumnal city.',
    'published': '1975'}
]


@app.route('/', methods=['GET'])
def home():
   return '''<h1>Distant Reading Archive</h1>
<p>A prototype API for distant reading of science fiction novels.</p>'''


# A route to return all of the available entries in our catalog.
@app.route('/api/v1/resources/books/all', methods=['GET'])
def api_all():
   return jsonify(books)

app.run()




user posted image

რა იგნორირდება ვერ მიხვდი აი რას ბეჭდავს ჩემთან.
a()სამჯერ იძახებ და სამჯერ წერს a() ფუნქციის კოდს და 36-ს ორჯერ აპრინტინებს b()-ს ხელით.
user posted image



Posted by: Essiittaaa 1 Nov 2020, 00:43
NinjaRacer
ეს ფლასკი ჯავას გავს მგონი


QUOTE
app = flask.Flask(__name__)


ესეიგი აქ ეპი გაუტოლა ფლასკიდან გამოძახებული Flask-ის (__name__)-ს ხო ? თვითონ ეს ნეიმი რას აღნიშნავს ?


QUOTE
რა იგნორირდება ვერ მიხვდი აი რას ბეჭდავს ჩემთან.


ვოლოში b() რომ წერია არ იპრინტება და რატო?

და მეორე კოდში 36-ებს რატო სპამავს ?

Posted by: NinjaRacer 1 Nov 2020, 01:15
Essiittaaa
ბოლოში პროსტა b წერია და calls-ს აკეთებ ფუნქციის ფრჩხილებით ()
ეშვება def b:
ეს ფუნქცია სადაც პირველი ხაზი არის print-ი და ის იბეჭდება რაც მანდ წერია.
მერე იძახებს ბ-და უკვე ა-ს და ის იბეჭდება რაც ა ფუნქციაში წერია.
მაჩვენე რა არ იპრინდება ვერ გავიგე კიდე.

ფლასკი კიდევ აი შენი კოდის მაგალითზე გეტყვი.
CODE

def a():
  print("archevnebi")

def b():
  print("36")
  print(a.__name__)

b()


ეს რას გიბეჭდავს ნახე.

ამიტომ გითხარი მოდულები რა არის ისწავლე მეთქი.
app = flask.(__name__)

აბამს app-ს იმ path-ს რომელშიც ყრია ყველა რესურსი ფლასკის. ბიბლიოთეკები, სტატიკური ფაილები რომელიც ვებგვერს ექნება. სურათები და ა.შ.

და ცოტა ქვემოთ ეს რომ წერია @app.route('/', methods=['GET']) (ეს დეკორატორია სხვათაშორის)

ეს იყენებს ამ სახელს.
app.route
ზემოთ რომ არ გვექნა.

app = flask.(__name__)
მოგვიწევდა
@flask.(__name__).route('/', methods=['GET'])
ასე დაწერა. ანუ სახელს ამოკლებს. შორთქათივითაა.

CODE

import flask

def a():
  print("archevnebi")

def b():
  print("36")
  print(a.__name__)

b()
import os
path = os.path.abspath(flask.__file__)

print(path)


ეს დაწერს ამას
QUOTE

guram@guram-Vostro-3590:~$ python /home/guram/ignore.py
36
a
/home/guram/.pyenv/versions/3.7.2/lib/python3.7/site-packages/flask/__init__.py

ამ /home/guram/.pyenv/versions/3.7.2/lib/python3.7/site-packages/flask/__init__.py ფაილში კიდევ ესენი წერია.

QUOTE

guram@guram-Vostro-3590:~$ cat /home/guram/.pyenv/versions/3.7.2/lib/python3.7/site-packages/flask/__init__.py
# -*- coding: utf-8 -*-
"""
    flask
    ~~~~~

    A microframework based on Werkzeug.  It's extensively documented
    and follows best practice patterns.

    :copyright: 2010 Pallets
    :license: BSD-3-Clause
"""
# utilities we import from Werkzeug and Jinja2 that are unused
# in the module but are exported as public interface.
from jinja2 import escape
from jinja2 import Markup
from werkzeug.exceptions import abort
from werkzeug.utils import redirect

from . import json
from ._compat import json_available
from .app import Flask
from .app import Request
from .app import Response
from .blueprints import Blueprint
from .config import Config
from .ctx import after_this_request
from .ctx import copy_current_request_context
from .ctx import has_app_context
from .ctx import has_request_context
from .globals import _app_ctx_stack
from .globals import _request_ctx_stack
from .globals import current_app
from .globals import g
from .globals import request
from .globals import session
from .helpers import flash
from .helpers import get_flashed_messages
from .helpers import get_template_attribute
from .helpers import make_response
from .helpers import safe_join
from .helpers import send_file
from .helpers import send_from_directory
from .helpers import stream_with_context
from .helpers import url_for
from .json import jsonify
from .signals import appcontext_popped
from .signals import appcontext_pushed
from .signals import appcontext_tearing_down
from .signals import before_render_template
from .signals import got_request_exception
from .signals import message_flashed
from .signals import request_finished
from .signals import request_started
from .signals import request_tearing_down
from .signals import signals_available
from .signals import template_rendered
from .templating import render_template
from .templating import render_template_string

__version__ = "1.1.2"
guram@guram-Vostro-3590:~$

და ჯანგოში კიდევ ძალიან ბევრგან გიწევს ამეების ხელით დაიმპორტება.

ზემოთ რაც გითხარი ბიბლიოთეკები რომ იპოვოს მეთქი. ბიბლიოთეკა იგივე მოდულია.

ანუ რეალურად app-ს მიება ეს დირექტორია. route მეთოდი რომ იპოვოს მაგალითად როცა app.route-ს წერ.

Posted by: Essiittaaa 2 Nov 2020, 00:16
NinjaRacer
QUOTE
მაჩვენე რა არ იპრინდება ვერ გავიგე კიდე.

CODE
def a():
  print("archevnebi")

def b():
  print("36") ---------ეს იბეჭდება  36
  a() ----------------- ეს არჩევნები
  a() ------------- ესეც არჩევნები
  print("36")            --------- ეს 36
  a()      ------------------- ეს არჩევნები

b() -------------- ეს რატო არ იბეჭდება ?



QUOTE
ამიტომ გითხარი მოდულები რა არის ისწავლე მეთქი.

ეს მოდულები იგივე დიქშენარია ხო ?
ანუ შემიძლია გამოვიძახო სადაც დამჭირდება კონკრეტული მოდული

QUOTE
ეს იყენებს ამ სახელს.
app.route
ზემოთ რომ არ გვექნა.

app = flask.(__name__)
მოგვიწევდა
@flask.(__name__).route('/', methods=['GET'])
ასე დაწერა. ანუ სახელს ამოკლებს. შორთქათივითაა.

ხო ეს ნასწავლი მაქვს.

QUOTE
ეს დაწერს ამას
QUOTE

guram@guram-Vostro-3590:~$ python /home/guram/ignore.py
36
a
/home/guram/.pyenv/versions/3.7.2/lib/python3.7/site-packages/flask/__init__.py


ანუ ამას რომ დაწერს
QUOTE
ამ /home/guram/.pyenv/versions/3.7.2/lib/python3.7/site-packages/flask/__init__.py ფაილში კიდევ ესენი წერია.

ამ ფაილში რაც არის ყველაფერი მოაქვს თუ ?

QUOTE
from jinja2 import escape
from jinja2 import Markup
from werkzeug.exceptions import abort
from werkzeug.utils import redirect

from . import json
from ._compat import json_available
from .app import Flask
from .app import Request
from .app import Response
from .blueprints import Blueprint
from .config import Config
from .ctx import after_this_request
from .ctx import copy_current_request_context
from .ctx import has_app_context
from .ctx import has_request_context
from .globals import _app_ctx_stack
from .globals import _request_ctx_stack
from .globals import current_app
from .globals import g
from .globals import request
from .globals import session
from .helpers import flash
from .helpers import get_flashed_messages
from .helpers import get_template_attribute
from .helpers import make_response
from .helpers import safe_join
from .helpers import send_file
from .helpers import send_from_directory
from .helpers import stream_with_context
from .helpers import url_for
from .json import jsonify
from .signals import appcontext_popped
from .signals import appcontext_pushed
from .signals import appcontext_tearing_down
from .signals import before_render_template
from .signals import got_request_exception
from .signals import message_flashed
from .signals import request_finished
from .signals import request_started
from .signals import request_tearing_down
from .signals import signals_available
from .signals import template_rendered
from .templating import render_template
from .templating import render_template_string


ესენია მოდულები ?


მადლობა რომ არ გეზარება ხოლმე და ვრცლად მიხსნი.

ზოგჯერ 10ჯერ ვკითხულობ რაღაცას რომ რამე სისულელე არ ვკითხო თქო :დ მაგრამ რა ვქნა, ჩაინიკი ვარ ჯერ


პ.ს. ნორმალურად რომ ვისწავლო პროგრამირება დაახლოებით რა დროა საჭირო ? სხვა საქმე რომ არ ვაკეთო (ვგულისხმობ არ ვიმუშაო და ამას ვეჯდე ხოლმე თავისუფალ დროს)

Posted by: NinjaRacer 2 Nov 2020, 00:22
QUOTE
ეს მოდულები იგივე დიქშენარია ხო ?
ანუ შემიძლია გამოვიძახო სადაც დამჭირდება კონკრეტული მოდული

კი. ზუსტად ეგაა. და თუ გაინტერესებს შიგნით რეებია ნებისმიერ ობიექტზე შეგიძლია dir მეთოდი გამოიყენო.

მაგალითად ასე
import os
print(dir(os))
განახებს ყველა მეთოდს რომელიც os მოდულშია. საინტერესოა ნახე.


ის იმიტომ არ იპრინტება რომ ეგ ბ() იძახებს ფუნქციას. მაგას ერთი დავალება აქვს გამოიძახოს ფუნქცია. ამიტომაც არ ბეჭდავს არაფერს.


ნორმალურად რომ ისწავლო 10 დღე 2 კვირა ალბათ.
გააჩნია ნორმალურს რას ეძახი.
რო დაჯდე და კოდი წერო რამე პროექტში ამ 2 კვირაში ნასწავლი პითონით კიდევ 2 თვე დაგჭირდება რომ ფრეიმვორკში კოდი წერო. რამდენად ხარისხიანი და სწორი კოდი იქნება ეგ კიდე მეორე საკითხია. ალბათ ასე 2 წელი რომ სრულფასოვანი დეველოპერი გერქვას.

არაფერს. არ მეზარება ნამდვილად.

კი რაც იმფაილშია აღწერილი ყველაფერი მოაქვს. ეს მოდულებიც ყველა თავისთავად სადღაც წერია ფაილში. თავისმხრივ.
მაგ. os.py ფაილში რეები წერია თუ გაინტერესებს მივამაგრე ქვემოთ. ეგეთი კოდი რო წერო მინიმუმ 2 წლი მაინც გინდა.
* * *
ამისმა სირთულემ ვაფშე არ დაგაბნიოს. დაიკიდე თუ რთულად გეჩვენება. რეალურად არ არის რთულიდა რაც ეხლა არ გეჩვენება რთულად ისენი აკეთე. და საფუძვლიანად დაამუღამერასაც ეხლა ამუღაბე თუნდაც მარტივი იყოს.
* * *
იშვიათი გამონაკლისი როცა ადამიანურ ენაზე წერია დოკუმენტაციაში რაღაც
https://docs.python.org/3/tutorial/modules.html?highlight=module

Posted by: Essiittaaa 6 Nov 2020, 19:53
NinjaRacer
QUOTE
ის იმიტომ არ იპრინტება რომ ეგ ბ() იძახებს ფუნქციას. მაგას ერთი დავალება აქვს გამოიძახოს ფუნქცია. ამიტომაც არ ბეჭდავს არაფერს.

ხო მაგრამ იმ ფუნქციაში ხო წერია რომ დაპრინტე 36-იო?
ანუ a()-ს როცა იძახებ ხო გიპრინტავს რაღაცას, და b() რატო იგივენაირად არ მოქმედებს ეგ მაინც ვერ გავიგე.

QUOTE
ნორმალურად რომ ისწავლო 10 დღე 2 კვირა ალბათ.
გააჩნია ნორმალურს რას ეძახი.

10 დღე კი არა 1 თვეა ვუზივარ მარა ვერა რა...

ნორმალურს ვეძახი, პროგრამის დაწერის საშუალება რომ მქონდეს, მაგალითად მობილური აპლიკაციის, ან თუნდაც თამაშის ან ა.შ.
თუნდაც საიტის...


ახლა ავიღე კურსი 10 გაკვეთილი შედის და წესით მაგ კურსის გავლის მერე ანაბანას გავიგებ უფრო კარგად რა.

შეგიძლია დამიწერო შენი გამოცდილებით რა თანმიმდევრობით ჯობს ვისწავლო ?
მაგალითად პითონით დავიწყე, რა უნდა იყოს ჩემი მიზანი პითონში, საიდან სადამდე უნდა მივიდე? თუ კითხვა ვერ გაიგე თავიდან ავხსნი

Posted by: NinjaRacer 8 Nov 2020, 19:16
Essiittaaa
QUOTE
ხო მაგრამ იმ ფუნქციაში ხო წერია რომ დაპრინტე 36-იო?

იბეჭდება.

QUOTE
10 დღე კი არა 1 თვეა ვუზივარ მარა ვერა რა...

მოკლედ ეს დროის თქმა არის სრულიად სუბიექტური.
აი არასდროს მაგაზე არ უნდა იფიქრო რა.
თუ რამე კონკრეტული დავალება გაქვს და უნდა მოასწრო ვადები ეგ სხვა ამბავია. მაგრამ ზოგადად.
როცა იწყებ პროგრამირებას არასდროს არ რჩება სწავლის პროცესი. მუდივი და უწყვეტია ხოლმე.
ამიტომ მაგაზე ნერვიულობას და ფიქრსაც გაეშვი. ტყუილად დროს დაკარგავ და თვითშეფასებას და გამბედაობას დაკარგავ. ნებისმიერ არზრს რომელიც ამ ორ რაღაცაზე მოქმედებს ცუდად გაა@#@#ნე. რადგან არასწორია.


QUOTE
შეგიძლია დამიწერო შენი გამოცდილებით რა თანმიმდევრობით ჯობს ვისწავლო ?
მაგალითად პითონით დავიწყე, რა უნდა იყოს ჩემი მიზანი პითონში, საიდან სადამდე უნდა მივიდე? თუ კითხვა ვერ გაიგე თავიდან ავხსნი


მე მაგალითად რო მქონდა ეგ პრობლემა და არ ვიცოდი თანმიმდევრობა და მაინტერესებდა როდის დავდებდი შედეგს.
ავიღე რაღაც ვიდეო კურსი საშუალო ან დამწყებისთვის და პარალელურად. როგორც გითხარი

freecodecamp.org არის ამოცანები თანმიმდევრობაც დაცულია და ასევე არის check.io -ზე ასევე პითონის ამოცანები სირთულეების მიხედვით. easyით დაიწყე.

მე გირჩევდი რო რო გაივლი ელემენტალურებს რაიმე ფრეიმვორკი აიღე და დაწერე საიტი.
oauth მიაბი მაგალითად ჯანგოში გააკეთე რამე REST აპი რომელსაც ავტორიზაცია ექნება შენი გუგლის მეილ ექაუნთით. შეგიძლია ეგ სერვერი გააკლასტერო მერე 2 ცალი რომ იყოს და ასევე შეგიძლია session store გააკეთო redis-ში ან memcached-ში და თუ ამ 2 სერვერიდან რომელიმე იუზერი ავტორიზებულია უკვე მეორეჯერ აღარ მოსთხოვოს ავტორიზაცია 15 წუთის მანძილზე.

http://michal.karzynski.pl/blog/2013/07/14/using-redis-as-django-session-store-and-cache-backend/

მგონი კარგი სავარჯიშო იქნება და ახალ ტექნოლოგიებსაც გაეცნობი ცოტა. მაგრამ დამწყებისთვის რთული თუა გადადევი ცოტახნით. მე ხო არ ვიცი შენ რა ეტაპზე ხარ.

Posted by: Essiittaaa 8 Nov 2020, 23:31
NinjaRacer
ეს დღეები ვერ მოვიცალე და ცოტახანში ჩავუჯდები ამ ყველაფერს, ეტაპობრივად დავწერ ხოლმე სად ვარ და ნუ შესაბამისად თუ რამე გამიჭირდა ვიკითხავ.

მადლობა დიდი

Posted by: river-song 14 Nov 2020, 18:40
CODE


@app.route("/register", methods=[ "GET", "POST"])
def register():
 
   if  request.method == "GET":
       return "please submit the form instead"
   else:
      Username = request.form.get("Username")
      print(Username)
   

   return render_template("register.html", Username=Username)



request.form.get("Username") აი ეს ნონს მიბრუნებს და რისი ბრალი შეიძლება იყოს user.gif
* * *
გავაკეთე აღარ მინდა ჰტმლ ში არასწორად მქონია ფორმა გაკეთებული

Posted by: river-song 16 Nov 2020, 20:37
მოკლედ რა კიდე გავიჭედე ფლასკი როგორ დავაკავშირო მონაცემთა ბაზასთან ვერ გავიგე ვიდეოში ჩანს რო ტიპი ქომმანდ ლაინით ქმნის თეიბლებს რაც ვუყურე რა ხოდა ცხრილის შექმნა მინდა და ინფორმაციის შენახვა და ვერ ვაკეთებ რო ვამატებ მონაცემებს ჩანს რო ცხრილი არ არის შექმნილი

CODE



CREATE TABLE users (
   id SERIAL PRIMARY KEY,
   username VARCHAR UNIQUE NOT NULL,
   firstname VARCHAR NOT NULL,
   lastname  VARCHAR NOT NULL,
   pass     VARCHAR NOT NULL

);



Posted by: Datvlas-vin-gtxovs 20 Nov 2020, 19:03
ძვირფასო პითონელებო
მინდა გაგიზიაროთ პაროლის დაშვების (password validation) კოდი. ყველანაირი მოდულის გარეშე
CODE
print('''Paroli unda shedgebodes:
1. Didi da Patara Asoebit
2. Cifrebit -> 1234567890
3. iyos Minimum 6 Simbolo''')

while True:
 paroli = input('\nSheiyvanet Paroli: ')
 sia1 = '1234567890'
 sia2 = 'qwertyuiopasdfghjklzxcvbnm'
 sia3 = 'QWERTYUIOPASDFGHJKLZXCVBNM'
 
 a = 0
 b = 0
 c = 0

 for i in range(len(paroli)):
   if paroli[i] in sia1:
     a = 1
   elif paroli[i] in sia2:
     b = 1
   elif paroli[i] in sia3:
     c = 1

 if len(paroli) < 6:
  print('Paroli Unda Iyos Minimum 6 Simbolo')

 elif not paroli.isalnum():
   print('Nu Gamoiyenebt Dashorebas (space) an/da Sxva Simboloebs')

 elif a+b+c != 3:
   print('Gaecanit Instruqcias da Scadet Tavidan')
   
 else:
   print('\nTqveni Paroli Migebulia')
   break

სრულყოფილი არაა, მარა მუშა. Regex ით ბევრად მოკლე კოდი გამოვა

Posted by: river-song 25 Nov 2020, 15:19
ხალხო მაინტერესება აპით მიღებული ინფორმაციის დააფდეითება თუ შეიძლება , ანუ იუზერი რო დაამატებს თავის ინფორმაციას რაღაც მონაცმები მეცვლება და ასეთ დროს ცალკე აკეთებთ ცხრილს სადაც აპის მონაცემები გადაგაქვთ და უმატებთ იუსერის მონაცემებს თუ რამე სხვა გზა არსებობს

Posted by: river-song 26 Nov 2020, 21:13
https://github.com/annakhv/project1/blob/master/application.py


ჩემი პირველი პროექტი გიტზე
მზად არი შენიშვნების მისაღებად biggrin.gif

პ.ს. ნუ რაღაცეები უნდა გადავაკეთო ურლზე გეთ მეთოდების წაშლა დამვიწყებია ეხლა გამახსენდა, ნუ კომენტარებსაც მივუწერ ეს დღეები სანამ ახალ პროექტს დავიწყებ biggrin.gif

პ.ს. უი კიდე ის მაინტერესებდა აპი შევქმენი და ჯეისონ რაც დააბრუნა მონაცემები არათანმიმდევრულია ეგ რატო მოხდა ნეტა user.gif

Posted by: NinjaRacer 27 Nov 2020, 02:11
river-song
მალადეც smile.gif

არათამიმდევრულია dict პითონში.

ordereddict მაგისთვის დაწერეს

Posted by: Lilith 27 Nov 2020, 04:58
river-song
კარგია, პირველი პროექტისთვის ძალიან კარგადაა გამართული


github-იდან connection string-ი წაშალე, ასე აჯობებს yes.gif
და მომხმარებლის სახელი და პაროლიც შეცვალე, არ შეიძლება ასე ღიად გამოდება, რაც არ უნდა უმნიშვნელო მონაცემები გქონდეს მაინც

Posted by: river-song 27 Nov 2020, 08:52
QUOTE
და მომხმარებლის სახელი და პაროლიც შეცვალე, არ შეიძლება ასე ღიად გამოდება, რაც არ უნდა უმნიშვნელო მონაცემები გქონდეს მაინც

უი მაგდენი არვიცოდი , ეს გიტის ამბებიც ძლივს მივახლაფორთე ექაუნთში ვერ შევდიოდი ვიზუალ კოდშიbiggrin.gif

NinjaRacer
QUOTE
არათამიმდევრულია dict პითონში.

ordereddict მაგისთვის დაწერეს

აა ვნახავ მაგას ეგეც არვიცოდი smile.gif

Posted by: Dirac 27 Nov 2020, 10:28
ეს ფლასკი ვარგა? ჯანგო არ ჯობია?

Posted by: @Schizophrenic 27 Nov 2020, 11:51
QUOTE
ეს ფლასკი ვარგა? ჯანგო არ ჯობია?

ჩემი პატარა გამოცდილებით და პირადად ჩემი აზრით რესტ აპების საწერად ფლასკი ჯობს, სწრაფიცაა და უფრო მოსახერხებელიც
ჯენგო მვც აპლიკაციებში უკეთესია
* * *
river-song
წარმატებები მეგობარო

Posted by: river-song 27 Nov 2020, 13:01

QUOTE
ეს ფლასკი ვარგა? ჯანგო არ ჯობია?

ჯანგოსთან ჯერ არ მქონა შეხება, მარა
გუგლში ამბობენ რო პატარა აპლიკაციებისთვის ფლასკი უკეთესია დიდი პროექტებისთვის ჯანგო

@Schizophrenic
QUOTE
წარმატებები მეგობარო

2kiss.gif მადლობა

Posted by: Essiittaaa 27 Nov 2020, 15:16
გამარჯობა მეგობრებო, უდიდესი საერთო გამყოფის (უსგ) საპოვნელ კოდს ვწერ ვაილით და პრობლემას ვერ ვხვდები.

CODE

a=int(input("sheiyvanet I ricxvi: "))
b=int(input("sheiyvanet II ricxvi: "))
x=""
y=0
if a<b:
   y=y+1
   while y<=a:
       if a%y==0 and b%y==0:
           x=y
else:
   y=y+1
   while y>=a:
       if a%y==0 and b%y==0:
           x=y
print(x)

* * *
CODE

a=int(input("sheiyvanet I ricxvi: "))
b=int(input("sheiyvanet II ricxvi: "))
x=""
y=0
if a<b:
   while y<=a:
       y=y+1
       if a%y==0 and b%y==0:
           x=y
else:
   while y<=b:
       y=y+1
       if a%y==0 and b%y==0:
           x=y
print(x)


ასე ყოფილა სწორი

Posted by: Lilith 29 Nov 2020, 07:13
Essiittaaa
პატარა "პითონური" ხრიკი:
CODE

a=int(input("sheiyvanet I ricxvi: "))
b=int(input("sheiyvanet II ricxvi: "))
a, b = min(a, b), max(a, b)

და ეგ if-else აღარ დაგჭირდება smile.gif


მეც მაგარი ვარ, მანდ პირდაპირ while y<min(a, b) შეგიძლია რომ ჩაწერო პრინციპში იგივეა, მაგრამ "ხრიკი" რაღაცაში მაინც გამოგადგება იმედია smile.gif)

Posted by: Dirac 29 Nov 2020, 11:16
Essiittaaa
რაც დაწერე სწორია მაგრამ ცუდი ამოხსნაა. ევკლიდეს ალოგორითმი უნდა გამოიყენო.
https://sites.math.rutgers.edu/~greenfie/gs2004/euclid.html
კიდე რაც ცუდად მხვდება თვალში არის x=“ “. რატომ არა x=1 ან x=None? ზოგადად x ცვლადისთვის ცუდი სახელია თუ მათემატიკური განტოლების x არაა. პატარა კოდითვის მნიშვნელობა არ აქვს მაგრამ ცუდი ჩვევაა.

Posted by: Essiittaaa 29 Nov 2020, 13:20
Lilith
QUOTE
მეც მაგარი ვარ, მანდ პირდაპირ while y<min(a, b) შეგიძლია რომ ჩაწერო პრინციპში იგივეა, მაგრამ "ხრიკი" რაღაცაში მაინც გამოგადგება იმედია )


ჯერ min და max არ მისწავლია რა არის და მაგიტო არ გამომიყენებია, ნელ-ნელა მივყვები, მაგასაც ვისწავლი. მადლობა რჩევისთვის yes.gif


Dirac
QUOTE
რაც დაწერე სწორია მაგრამ ცუდი ამოხსნაა. ევკლიდეს ალოგორითმი უნდა გამოიყენო.
https://sites.math.rutgers.edu/~greenfie/gs2004/euclid.html

ვა, საინტერესო იყო, მადლობა.

QUOTE
კიდე რაც ცუდად მხვდება თვალში არის x=“ “. რატომ არა x=1 ან x=None? ზოგადად x ცვლადისთვის ცუდი სახელია თუ მათემატიკური განტოლების x არაა. პატარა კოდითვის მნიშვნელობა არ აქვს მაგრამ ცუდი ჩვევაა.

ანუ ცვლადზე ჯობს გრძელი სახელი დავწერო უფრო თუ რას გულისხმობ ?

Posted by: @Schizophrenic 29 Nov 2020, 15:40
QUOTE
ანუ ცვლადზე ჯობს გრძელი სახელი დავწერო უფრო თუ რას გულისხმობ ?

x-ზე გაქ სტრინგი მინიჭებული "" ამით, ვინმე პირველად რომ დაჯდება იფიქრებს რომ x-ს სთრინგ მნიშვნელობა ექნება და ამ დროს ინტია, ისედაც ცუდი საკითხავია არატიპიზირებული ენები და რატო ართულებ? :დ
გრძელი სახელი გექნება თუ მოკლე დიდი მნიშვნელობა არაქ მთავარია აზრობრივად დაარქვა სწორი სახელი, ანუ მესამე ტიპი რომ გაიჩითება მიხვდეს ცვლადები რისთვის არის, შენ თუ x, x1, x2 დაარქვი სახელები სხვა კიარა შენც ვერ მიხვდები რა ცვლადი რას აკეთებს

Posted by: Essiittaaa 30 Nov 2020, 18:41
@Schizophrenic
გასაგებია, ანუ რა მიზანიც გაქვს რომ ამ ცვლადმა უნდა გააკეთოს ისეთი სახელი უნდა მიანიჭო რომ გაგახსენოს თვითონ ცვლადმა :დ
თენქიუ

Posted by: NinjaRacer 1 Dec 2020, 10:22
Essiittaaa
ასევე კლასის სახელი უნდა დაიწყოს დიდი ასოთი და ფუნქციების პატარათი. ფუნქციებსაც იგივე სახელები დაარქვი შინაარსობრივი.

ბევრად გაგიადვილდება მიგნება რაღაცეების მომავალში.

https://www.python.org/dev/peps/pep-0008/

Posted by: guka_kamla96 1 Dec 2020, 16:31
გამარჯობა
pycharm დავაინსტალირე რამდენიმე დღის წინ და ტუტორიალის მიხედვით ვაკეთებდი
ახლა თავიდან მომიწია დაინსტალირება და პრინტი რაც არ უნდა მივუთითო ქვევით Hi, Pycharmს მიგდებს მხოლოდ runში

შეგიძლიათ დამეხმაროთ?

გავასწორე, სხვა პროექტის runს უშვებდა თურმე

gigi.gif

Posted by: NinjaRacer 1 Dec 2020, 16:35
guka_kamla96
სანამ სხვები დაგეხმარებიან მანამდე visual studio code დააყენე ბევრად მოსახერხებელია პითონში და სხვა ენებზეც კოდის საწერად.

Posted by: guka_kamla96 1 Dec 2020, 16:44
QUOTE (NinjaRacer @ 1 Dec 2020, 16:35 )
guka_kamla96
სანამ სხვები დაგეხმარებიან მანამდე visual studio code დააყენე ბევრად მოსახერხებელია პითონში და სხვა ენებზეც კოდის საწერად.

მადლობა, ჯერჯერობით ერთი დიდი ტუტორიალი მაქ ჩასამთავრებელი პაიჩარმის მიხედვით და მერე მაგასაც მოვსინჯავ

Posted by: Essiittaaa 2 Dec 2020, 16:47
QUOTE (NinjaRacer @ 1 Dec 2020, 10:22 )
Essiittaaa
ასევე კლასის სახელი უნდა დაიწყოს დიდი ასოთი და ფუნქციების პატარათი. ფუნქციებსაც იგივე სახელები დაარქვი შინაარსობრივი.

ბევრად გაგიადვილდება მიგნება რაღაცეების მომავალში.

https://www.python.org/dev/peps/pep-0008/

გავითვალისწინებ, მადლობა yes.gif

Posted by: Essiittaaa 3 Dec 2020, 21:00
პითონს აქვს ჩაშენებული ფუნქციები თუ ყველა ფუნქციას მე ვაწერ რაც მინდა სახელს ?

თუ აქვს ლისტი სად შეიძლება ვნახო ?

a=[]
print(dir(a))
print(help(list))
print(help(random))

მაგალითად ამით ვნახულობ ლისტების ჩაშენებულ კომანდებს და ასეთს ვგულისხმობ
* * *
CODE

x = "awesome"

def myfunc():
 x = "fantastic"
 print("Python is " + x)

myfunc()

print("Python is " + x)

ამან ცოტა დამაბნია, ანუ გარე x-ს შემიძლია გადავაწერო შიგნით და მარტო ფუნქციაში იგულისხმება ეგ ?
* * *
ბარემ ესეც მაინტერესებს, პითონში დაწერილ პროგრამას, ვიზუალიზაციას რითი გავუკეთებ?

ანუ ჭადრაკის საიტის დაწერა მინდა და რისი ცოდნა დამჭირდება მაგალითად პითონის გარდა?
css პითონთან რამე კავშირშია ?

Posted by: Datvlas-vin-gtxovs 4 Dec 2020, 22:29
3 ამოცანა
1ლი საბავშვოა
დანარჩენი 2 ნიჩიოო up.gif

CODE
ამოცანა N1:

დაწერეთ პროგრამა, რომელშიც იქნება ფუნქცია, ის მიიღებს ერთ არგუმენტს კვირის დღეების ნომერს (1-დან 7-მდე). მიღებული არგუმენტის მიხედვით ფუნქციამ ეკრანზე გამოიტანოს თუ რომელი დღეა შეტანილი.

მაგალითად: მომხმარებელს ეძლევა შეტყობინება შეიტანოს დღის ნომერი 1-დან 7-მდე ნებისმიერი. ვთქვათ მომხმარებელმა შეიტანა 3, მაშინ პროგრამამ უნდა დააბრუნოს პასუხად - ოთხშაბათი (ვინაიდან მე-3 დღე კვირაში არის ოთხშაბათი) და ა.შ.
ასევე პროგრამამ უნდა გააკონტროლოს რომ დღის ნომრის შეტანა მოხდეს დაშვებული ინტერვალიდან (არანაკლებ 1-ს და არაუმეტეს 7-ის).


ამოცანა N2:

დაწერეთ პროგრამა რომელიც მომხმარებელს მის მიერვე მითითებული რაოდენების ელემენტების (მთელი რიცხვების) შეყვანას მოსთხოვს სიაში.
პროგრამაში გაწერეთ ორი ფუნქცია: ერთი “for” ციკლის შემცველი, მეორე კი “while” ციკლით.
ერთი ფუნქცია გამოძახებისას უნდა ითვლიდეს სიაში უკვე შეტანილი რიცხვების ჯამს, ხოლო მეორე ფუნქცია გამოძახებისას იგივე სიაში შეტანილი რიცხვების ნამრავლს.

მაგალითად:
1 ნაბიჯი: მომხმარებელს შეაქვს რიცხვი თუ რამდენი ელემენტი იქნება სიაში - ვთქვათ შეიტანა 3-ანი (ანუ 3 ელემენტიანი სია)
2 ნაბიჯი: მომხმარებელს შეაქვს თითოეული ელემენტის მნიშვნელობა (ამ შემთხვევაში 3 ცალის), ვთქვათ შეიტანა რიცხვები [ 2,3,4 ]
3 ნაბიჯი: მოხდეს ჯამის და ნამრავლის ფუნქციების გამოძახება და შესაბამისი გაანგარიშება ეკრანზე გამოტანით: ჯამი = 9, ნამრავლი = 24


ამოცანა N3:

დაწერეთ პროგრამა რომელიც მომხმარებელს სიაში შეატანინებს მინიმუმ 6 რიცხვს.
პროგრამამ მიღებული სია უნდა დაამუშაოს და თითო სტრიქონზე ჩამოწეროს განმეორდა თუ არა მიმდინარე რიცხვი მანამდე. თუ განმეორდა დაიწეროს “YES”, თუ არა - “NO”.

მაგალითად:
1 ნაბიჯი: მომხმარებელს შეაქვს მინიმუმ 6 რიცხვი რომელიც ინახება მასივში, ვთქვათ შეტანილია [ 1, 2, 1, 1, 4, 2 ]
2 ნაბიჯი: პროგრამა მიღებული სიის დაამუშავები შემდეგ ეკრანზე გამოიტანს პასუხებს შემდეგი სახით:
NO
NO
YES
YES
NO
YES




Essiittaaa
QUOTE
პითონს აქვს ჩაშენებული ფუნქციები თუ ყველა ფუნქციას მე ვაწერ რაც მინდა სახელს ?

აქვს. მაგ.: print, range, evаl
შენის შექმნა შეგიძლია -> def შენი_ფუნქცია ():

QUOTE
თუ აქვს ლისტი სად შეიძლება ვნახო ?

https://www.w3schools.com/python/python_ref_functi0ns.asp

QUOTE
ამან ცოტა დამაბნია, ანუ გარე x-ს შემიძლია გადავაწერო შიგნით და მარტო ფუნქციაში იგულისხმება ეგ ?

სხვადასხვა X ებია. ფუნქციაში რაცაა იმას ლოკალური ცვლადი ქვია
გარეთა X - გლობალური


QUOTE
ბარემ ესეც მაინტერესებს, პითონში დაწერილ პროგრამას, ვიზუალიზაციას რითი გავუკეთებ?

Tkinter https://docs.python.org/3/library/tkinter.html

QUOTE
ანუ ჭადრაკის საიტის დაწერა მინდა და რისი ცოდნა დამჭირდება მაგალითად პითონის გარდა?

პითონს აქ Django რითიც საიტებს წერენ

სხვა ვინმე, უფრო გარკვეული შემოვა და გეტყვის ალბათ up.gif
მე ჯუნიორ პითონისტი ვარ ჯერ biggrin.gif

Posted by: Essiittaaa 5 Dec 2020, 01:32
Datvlas-vin-gtxovs
QUOTE
3 ამოცანა
1ლი საბავშვოა
დანარჩენი 2 ნიჩიოო


ამ ამოცანებს თუ გავქაჩავ ხვალ ჩავუჯდები.


QUOTE
შენის შექმნა შეგიძლია -> def შენი_ფუნქცია ():


ანუ დეფში რაც შეგაქვს ეგ ჩაშენებულია თუ როგორ უთითებ რა უნდა გააკეთოს ? მაგალითი რომ დაწერო შეგიძლია ?


QUOTE
სხვადასხვა X ებია. ფუნქციაში რაცაა იმას ლოკალური ცვლადი ქვია
გარეთა X - გლობალური

მადლობა, w3-ზეც წავიკითხე.

ტკინტერის აპს დავაყენებ და პითონში ვიძახებ ანუ ხო?

QUOTE
პითონს აქ Django რითიც საიტებს წერენ

ჰო ეს მითხრეს დღეს, css html da javascript იყენებენ ფრონტისთვის და ბექზე პითონით ამუშავებენო.



მაგრამ კიდე ერთი კითხვა დამებადა, მე ვიცნობ ადამიანებს ვინც მხოლოდ html,css და javascript იციან და საიტებს აკეთებენ ჩვეულებრივ და პითონი რა პლუსს აძლევს საიტს თუკი იმ ენებითაც არის შესაძლებელი წერა ?

Posted by: Datvlas-vin-gtxovs 5 Dec 2020, 08:31
Essiittaaa
QUOTE
მაგალითი რომ დაწერო შეგიძლია ?

ფუნქცია დააბრუნებს შეტანილი რიცხვის (ამ შემთხვევაში 5ის) კვადრატს
CODE
def xarisxi(n):
   rerurn n ** 2

xarisxi(5)


CODE
#შედეგის ეკრანზე გამოტანა
print(xarisxi(5))


სხვა კითხვებზე ვერ გიპასუხებ, არ ვიცი

Posted by: Essiittaaa 5 Dec 2020, 14:25
Datvlas-vin-gtxovs
მადლობა yes.gif
* * *
Datvlas-vin-gtxovs

QUOTE
ამოცანა N1:

დაწერეთ პროგრამა, რომელშიც იქნება ფუნქცია, ის მიიღებს ერთ არგუმენტს კვირის დღეების ნომერს (1-დან 7-მდე). მიღებული არგუმენტის მიხედვით ფუნქციამ ეკრანზე გამოიტანოს თუ რომელი დღეა შეტანილი.

მაგალითად: მომხმარებელს ეძლევა შეტყობინება შეიტანოს დღის ნომერი 1-დან 7-მდე ნებისმიერი. ვთქვათ მომხმარებელმა შეიტანა 3, მაშინ პროგრამამ უნდა დააბრუნოს პასუხად - ოთხშაბათი (ვინაიდან მე-3 დღე კვირაში არის ოთხშაბათი) და ა.შ.
ასევე პროგრამამ უნდა გააკონტროლოს რომ დღის ნომრის შეტანა მოხდეს დაშვებული ინტერვალიდან (არანაკლებ 1-ს და არაუმეტეს 7-ის).



CODE

# -*- coding: utf-8 -*-
dic={1:"ორშაბათი",2:'სამშაბათი',3:'ოთხშაბათი',4:'ხუთშაბათი',5:'პარასკევი',6:'შაბათი',7:'კვირა'}
dge=input('შეიყვანეთ დღე: ')
for i,j in dic.items():
   if dge==dic[i]:
       print(dic[j])



1-დან 7-ის ჩათვლით რომ იყოს ნებადართული ჩაწერა, მაქამდე სანამ მივალ, ეს რატომ არ მუშაობს ხო ვერ მეტყვით?
* * *
# -*- coding: utf-8 -*-
dic={1:"ორშაბათი",2:'სამშაბათი',3:'ოთხშაბათი',4:'ხუთშაბათი',5:'პარასკევი',6:'შაბათი',7:'კვირა'}
dge=int(input('შეიყვანეთ დღე: '))
for i,j in dic.items():
if dge==i:
print(j)
else:
while dge<1 or dge>7:
dge=int(input('შეიყვანეთ დღე თავიდან: '))

ეს პირველი მართლა მარტივი ყოფილა რადგან მეც ამოვხსენი :დ

Posted by: Essiittaaa 6 Dec 2020, 14:34
QUOTE
ამოცანა N2:

დაწერეთ პროგრამა რომელიც მომხმარებელს მის მიერვე მითითებული რაოდენების ელემენტების (მთელი რიცხვების) შეყვანას მოსთხოვს სიაში.
პროგრამაში გაწერეთ ორი ფუნქცია: ერთი “for” ციკლის შემცველი, მეორე კი “while” ციკლით.
ერთი ფუნქცია გამოძახებისას უნდა ითვლიდეს სიაში უკვე შეტანილი რიცხვების ჯამს, ხოლო მეორე ფუნქცია გამოძახებისას იგივე სიაში შეტანილი რიცხვების ნამრავლს.

მაგალითად:
1 ნაბიჯი: მომხმარებელს შეაქვს რიცხვი თუ რამდენი ელემენტი იქნება სიაში - ვთქვათ შეიტანა 3-ანი (ანუ 3 ელემენტიანი სია)
2 ნაბიჯი: მომხმარებელს შეაქვს თითოეული ელემენტის მნიშვნელობა (ამ შემთხვევაში 3 ცალის), ვთქვათ შეიტანა რიცხვები [ 2,3,4 ]
3 ნაბიჯი: მოხდეს ჯამის და ნამრავლის ფუნქციების გამოძახება და შესაბამისი გაანგარიშება ეკრანზე გამოტანით: ჯამი = 9, ნამრავლი = 24



CODE

# -*- coding: utf-8 -*-
sia=[]
x=0
namr=1
raod=int(input('შეიყვანეთ რაოდენობა: '))
while x<raod:
   x=x+1
   shet=int(input('შეიყვანეთ რიცხვი: '))
   sia.append(shet)
for i in sia:
   namr=namr*i
print('თქვენს მიერ არჩეული რაოდენობაა: ',raod,'\nთქვენს მიერ შეყვანილი რიცხვებია: ',sia,'\nჯამი =',sum(sia),'\nნამრავლი =',namr)


სწორი ამოხსნაა ხო ?
* * *
CODE

def tri_recursion(k):
 if(k > 0):
   result = k + tri_recursion(k - 1)
   print(result)
 else:
   result = 0
 return result

print("\n\nRecursion Example Results")
tri_recursion(6)



ვერ გავიგე ეს რექურშენი რას აკეთებს

Posted by: Datvlas-vin-gtxovs 7 Dec 2020, 12:13
Essiittaaa
QUOTE
სწორი ამოხსნაა ხო ?

ჯიგრული up.gif

QUOTE
1-დან 7-ის ჩათვლით რომ იყოს ნებადართული ჩაწერა, მაქამდე სანამ მივალ, ეს რატომ არ მუშაობს ხო ვერ მეტყვით?

if და elif ით ქენი. მოკლე გზა გაქ არჩეული, მარა ის უფრო ნაღდია

QUOTE
ვერ გავიგე ეს რექურშენი რას აკეთებს

თავის თავში იძახებს ფუნქციის შიგნით. წინა და მომდევნო რიცხვების ჯამი გამოაქ

Posted by: Dirac 8 Dec 2020, 03:45
Essiittaaa
CODE

for i in sia:
  namr=namr*i

პითონისტმა ეს ერთ ხაზში უნდა დაწეროს. list comprehension დაგუგლე. ერთერთი საუკეთესო რამეა რაც პითონს აქვს. ასევე, მათემატიკური ოპერაციების დროს ადგილები გამოტოვე რომ უფრო ადვილი გახდეს წაკითხვა

CODE

   namr = namr * i

* * *
ასეთი კითხვა: რას დაბეჭავს შემდეგი კოდი
x = 1
y = 1
print(id(x) == id(y))

ერთის ნაცვლად 1000 რომ იყოს მაშინ რა იქნება.

Posted by: Datvlas-vin-gtxovs 8 Dec 2020, 11:01
Dirac
QUOTE
print(id(x) == id(y))

თრუს

1000 შემთხვევაში დაFalseავს. 256 მდე ერთიდაიგივე ID აქვს ელემენტებს, როგორც მახსოვს

Posted by: Essiittaaa 8 Dec 2020, 14:58
Datvlas-vin-gtxovs
QUOTE
თავის თავში იძახებს ფუნქციის შიგნით. წინა და მომდევნო რიცხვების ჯამი გამოაქ

მერე ჩავუჯდები ახლა კარგად ვერ გავიგე.

Dirac
QUOTE
პითონისტმა ეს ერთ ხაზში უნდა დაწეროს. list comprehension დაგუგლე. ერთერთი საუკეთესო რამეა რაც პითონს აქვს. ასევე, მათემატიკური ოპერაციების დროს ადგილები გამოტოვე რომ უფრო ადვილი გახდეს წაკითხვა

ჯერ საფუძვლები ვისწავლე, ნელ-ნელა გავართულებ უფრო.
გავითვალისწინებ აუცილებლად, მადლობა.

user posted image
მეგობრებო, რაც დავწერე იმის გაკეთებას არ მთხოვს ?


* * *
user posted image
ამ პასუხს მიგდებს aba.gif

Posted by: NinjaRacer 8 Dec 2020, 23:14
Dirac
QUOTE
ასეთი კითხვა: რას დაბეჭავს შემდეგი კოდი

როგორც მახსოვს 126 -მდე ყველა ციფს ერთი ID იქნება რეალურად ერთიდაიგივე ობიექტი იქნება. წარმადობის ოპიტიმიზაციისთვის ქნეს ეგ.

* * *
არ მინახავს მაგრამ ესეც კარგი ვიდეო იქნება


სასარგებლო დარამე

https://www.youtube.com/watch?v=qOHk_a3DxKs&ab_channel=SATSifaction
* * *
ესეც უნდა გეგდოს ხრიკებში
https://www.youtube.com/watch?v=C-gEQdGVXbk&ab_channel=CoreySchafer

Posted by: Datvlas-vin-gtxovs 10 Dec 2020, 15:53
Dirac
QUOTE
for i in sia:
  namr=namr*i

ეს 1 ხაზში როგორ იქნება?

Posted by: Dirac 11 Dec 2020, 02:20
Datvlas-vin-gtxovs
list comprehension რომ ვახსენე ეგ არაფერშუაშია, შემეშალა. შეგიძლია პირდაპირ მათემატიკის ბიბლიოთეკა გამოიყენო

CODE

import math
math.prod([1, 2, 3])



იგივე ფუნქცია აქვს numpy-ს. ასევე შეგიძლია reduce

CODE

from functools import reduce
reduce(lambda x, y: x * y, [1, 2, 3])



Posted by: @Schizophrenic 11 Dec 2020, 11:55
___________________________________________________________________________________________________

Posted by: Datvlas-vin-gtxovs 15 Dec 2020, 14:47
Essiittaaa
QUOTE
ეს რატომ არ მუშაობს ხო ვერ მეტყვით?

QUOTE
dic={1:"ორშაბათი",2:'სამშაბათი',3:'ოთხშაბათი',4:'ხუთშაბათი',5:'პარასკევი',6:'შაბათი',7:'კვირა'}
dge=input('შეიყვანეთ დღე: ')
for i,j in dic.items():
  if dge==dic[i]:
      print(dic[j])

როგორც ვიცი ინდექსირება (დანომრვა) არ აქვთ ლექსიკონებს
dic[i] არაფერს გამოიტანს


ეს იმუშავებს
CODE
dic = {
 1:"ორშაბათი",
 2:'სამშაბათი',
 3:'ოთხშაბათი',
 4:'ხუთშაბათი',
 5:'პარასკევი',
 6:'შაბათი',
 7:'კვირა'}

dge = int(input('შეიყვანეთ დღე: '))

sia = []

for key, val in dic.items():
  if dge == key:
    print(val)



რამდენი ხანია სწავლობ?

Posted by: Dirac 15 Dec 2020, 20:06
QUOTE (Essiittaaa @ 5 Dec 2020, 14:25 )
Datvlas-vin-gtxovs
მადლობა  yes.gif 
* * *
Datvlas-vin-gtxovs

QUOTE
ამოცანა N1:

დაწერეთ პროგრამა, რომელშიც იქნება ფუნქცია, ის მიიღებს ერთ არგუმენტს კვირის დღეების ნომერს (1-დან 7-მდე). მიღებული არგუმენტის მიხედვით ფუნქციამ ეკრანზე გამოიტანოს თუ რომელი დღეა შეტანილი.

მაგალითად: მომხმარებელს ეძლევა შეტყობინება შეიტანოს დღის ნომერი 1-დან 7-მდე ნებისმიერი. ვთქვათ მომხმარებელმა შეიტანა 3, მაშინ პროგრამამ უნდა დააბრუნოს პასუხად - ოთხშაბათი (ვინაიდან მე-3 დღე კვირაში არის ოთხშაბათი) და ა.შ.
ასევე პროგრამამ უნდა გააკონტროლოს რომ დღის ნომრის შეტანა მოხდეს დაშვებული ინტერვალიდან (არანაკლებ 1-ს და არაუმეტეს 7-ის).



CODE

# -*- coding: utf-8 -*-
dic={1:"ორშაბათი",2:'სამშაბათი',3:'ოთხშაბათი',4:'ხუთშაბათი',5:'პარასკევი',6:'შაბათი',7:'კვირა'}
dge=input('შეიყვანეთ დღე: ')
for i,j in dic.items():
   if dge==dic[i]:
       print(dic[j])



1-დან 7-ის ჩათვლით რომ იყოს ნებადართული ჩაწერა, მაქამდე სანამ მივალ, ეს რატომ არ მუშაობს ხო ვერ მეტყვით?
* * *
# -*- coding: utf-8 -*-
dic={1:"ორშაბათი",2:'სამშაბათი',3:'ოთხშაბათი',4:'ხუთშაბათი',5:'პარასკევი',6:'შაბათი',7:'კვირა'}
dge=int(input('შეიყვანეთ დღე: '))
for i,j in dic.items():
if dge==i:
print(j)
else:
while dge<1 or dge>7:
dge=int(input('შეიყვანეთ დღე თავიდან: '))

ეს პირველი მართლა მარტივი ყოფილა რადგან მეც ამოვხსენი :დ

dictionary არის hash table. მაგის მთელი მუღამი არის რომ როცა გაქვს გასაღები, იტერაციის გარეშე იცის პროგრამამ სად უნდა მოძებნოს მნიშვნელობა და ეგრევე გაძლევს პასუხს. ამიტომ იტერაციის გამოყენება სრულიად ზედმეტია.
პირდაპირ დაწერე
CODE

dic[dge]

ასევე, რიცხვი ერთიდან შვიდამდე არის თუ არა ამას ასე შეამოწმებ
CODE

dge in dic.keys():

Posted by: Essiittaaa 15 Dec 2020, 21:04
Datvlas-vin-gtxovs
QUOTE
როგორც ვიცი ინდექსირება (დანომრვა) არ აქვთ ლექსიკონებს
dic[i] არაფერს გამოიტანს

ბოლოში მიწერია მაგ ამოცანის ამოხსნა.


QUOTE
რამდენი ხანია სწავლობ?

2 თვე სადღაც, მაგის მერე ბევრი რამე ვისწავლე კიდე.

Dirac
მადლობა, გავითვალისწინებ.

Posted by: Datvlas-vin-gtxovs 16 Dec 2020, 21:05
ზრდადობით დალაგება sort მეთოდის გარეშე
CODE
sia = [5, 1, 12, 0, 6, 3, 23]
i = 0
axla = 0

while i < len(sia):
 j = i +1
 while j < len(sia):
   if sia[i] > sia[j]:
     axla = sia[j]
     sia[j] = sia[i]
     sia[i] = axla
   j += 1
 i += 1

Posted by: Essiittaaa 17 Dec 2020, 20:34
CODE

def alphabet_position(text):
   dic = {}
   ricxvi = 1
   aso = 65
   for i in range(0,26):
       dic[ricxvi] = (chr(aso)).lower()
       ricxvi = ricxvi + 1
       aso = aso + 1
   for i in text:
       if i == dic.values():
           return dic.keys()
print(alphabet_position("The sunset sets at twelve o' clock."))


if-ს რა პრობლემა აქვს ვერ ვხვდები, მაქამდე მიდის და მერე None გამოაქვს პასუხი.

Posted by: Dirac 18 Dec 2020, 03:44
Essiittaaa
i და dic.values() სხვადასხვა ტიპია. რანაირად უნდა შეადარო? შეგიძლია i in dic.values() დაწერო. pycharm-ს თუ იყენებ, მისი დებაგერი გამოიყენე რომ გაარკვიო შეცდომის მიზეზები.

Posted by: Essiittaaa 18 Dec 2020, 14:51
Dirac
სხვადასხვა ტიპის შემთხვევაში ხო უნდა დამიეროროს კოდი? ეს კიდე None-ს მიგდებს პასუხად
i-ც ასოა და dic.value-ც და რა განსხვავებაა ტიპებში?

ანუ იდეაში იმის გაკეთება მინდა რომ ჩემი შეყვანილი ტექსტი ციფრებით გამომიტანოს პასუხად და არ გამომდის
* * *
CODE

def alphabet_position(text):
   numbers=()
   for letter in text.lower():
       if letter.isalpha():
           numbers=numbers+(str(ord(letter)-96),)
   return ' '.join(numbers)
print(alphabet_position("The sunset sets at twelve o' clock."))

ამოვხსენი

Posted by: Dirac 19 Dec 2020, 04:11
Essiittaaa
Datvlas-vin-gtxovs

შეგიმოკლებთ კოდებს biggrin.gif

CODE

sia = [5, 1, 12, 0, 6, 3, 23]
for i in range(len(sia)):
 for j in range(i + 1, len(sia)):
   if sia[i] > sia[j]: sia[i], sia[j] = sia[j], sia[i]
print(sia)


CODE

text = "The sunset sets at twelve o' clock."
print(' '.join([str(ord(letter) - 96) for letter in text.lower() if letter.isalpha()]))


თუ შემოკლება კოდის წაკითხვას ართულებს, არ უნდა შეამოკლო, მაგრამ ამ შემთხვევაში პირიქით ამარტივებს წაკითხვას.

Posted by: vulibretis 19 Dec 2020, 05:48
მოგესალმებით,
აქ ვინაა პითონის ინტერესის ობიექტი ???

Posted by: Essiittaaa 19 Dec 2020, 16:35
Dirac
QUOTE
თუ შემოკლება კოდის წაკითხვას ართულებს, არ უნდა შეამოკლო, მაგრამ ამ შემთხვევაში პირიქით ამარტივებს წაკითხვას.

ვცადე მასე დამეწერა მაგრამ ვერ ვქენი biggrin.gif

როგორ ჯობს, ერთ ხაზში და გრძლად დავწეროთ თუ რამდენიმე მოკლე ხაზში?

vulibretis
გისმენთ

Posted by: Dirac 19 Dec 2020, 18:48
Essiittaaa
წესია რომ 79-ს არ გაცდეს ხაზის სიგანე, მაგრამ ყველა წესის დარღვევა შეიძლება.
რაც დავწერე, ჯობია ორ ეტაპად გაყო


CODE

text = "The sunset sets at twelve o' clock."
alphabet_numbers = [str(ord(letter) - 96) for letter in text.lower()
                  if letter.isalpha()]
print(' '.join(alpabet_numbers))

Posted by: Essiittaaa 19 Dec 2020, 20:16
CODE

def comp(array1, array2):
   while len(array1) > 0:
       for i in array1:
           for j in array2:
               if i * i == j:
                   array1.remove(i)
                   array2.remove(j)
   if array1 == [] and array2 == []:
       return True
   else:
       return False      
print(comp([2,3,5],[4,9,25]))


ეს კოდი დავწერე, თუ მეორე ლისტში მყოფი ციფრები პირველ ლისტში მყოფი ციფრების კვადრატია, უნდა გამოიტანოს True, თუ არ არის სწორი, შესაბამისად False.
True კი გამოაქვს, მაგრამ False-ზე ჭედავს, ვხვდები რის გამოც ჭედავს, ვაილი უწყვეტად მიდის, მაგრამ ბრეიქით არ ეშველა, არც რეთარნით, მოკლედ კოდი ვერ მივიყვანე ბოლომდე და იქნებ თქვენ მირჩიოთ რამე, მინიშნება biggrin.gif

Dirac
გასაგებია, მადლობა.
* * *
QUOTE (Essiittaaa @ 19 Dec 2020, 20:16 )
CODE

def comp(array1, array2):
   while len(array1) > 0:
       for i in array1:
           for j in array2:
               if i * i == j:
                   array1.remove(i)
                   array2.remove(j)
   if array1 == [] and array2 == []:
       return True
   else:
       return False      
print(comp([2,3,5],[4,9,25]))


ეს კოდი დავწერე, თუ მეორე ლისტში მყოფი ციფრები პირველ ლისტში მყოფი ციფრების კვადრატია, უნდა გამოიტანოს True, თუ არ არის სწორი, შესაბამისად False.
True კი გამოაქვს, მაგრამ False-ზე ჭედავს, ვხვდები რის გამოც ჭედავს, ვაილი უწყვეტად მიდის, მაგრამ ბრეიქით არ ეშველა, არც რეთარნით, მოკლედ კოდი ვერ მივიყვანე ბოლომდე და იქნებ თქვენ მირჩიოთ რამე, მინიშნება biggrin.gif

CODE
def comp(array1, array2):
   for i in range(0,len(array2)):        
       for i in array1:
           for j in array2:
               if i*i==j:
                   array1.remove(i)
                   array2.remove(j)
   if array1==[] and array2==[]:
       return True
   else:
       return False        
print(comp([121, 144, 19, 161, 19, 144, 19, 11],[11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]))


ეს კოდი მუშაობს, მაგრამ დებაგი მიგდებს ამ ერორს.
for i in range(0,len(array2)):
TypeError: object of type 'NoneType' has no len()

როგორ გამოვასწორო?

Posted by: river-song 21 Dec 2020, 19:29
QUOTE
ეს კოდი მუშაობს, მაგრამ დებაგი მიგდებს ამ ერორს.

თან იტერაციას აკეთებ თან შლი, აი ვთქვათ ორი ელემენტი რომ იყოს და დაემთხვეს რა პირობა შესრულდეს და ნულზე წაშალო , მერე მეორე ელემენტი ნულზე გადმოინაცვლებს და შენ ერთზე აკეთებ უკვე იტერაციას, მაშIნ როცა ერთ ინდექსზე არარსებობს უკვე ელემენტი.

Posted by: Essiittaaa 21 Dec 2020, 19:40
QUOTE (river-song @ 21 Dec 2020, 19:29 )
QUOTE
ეს კოდი მუშაობს, მაგრამ დებაგი მიგდებს ამ ერორს.

თან იტერაციას აკეთებ თან შლი, აი ვთქვათ ორი ელემენტი რომ იყოს და დაემთხვეს რა პირობა შესრულდეს და ნულზე წაშალო , მერე მეორე ელემენტი ნულზე გადმოინაცვლებს და შენ ერთზე აკეთებ უკვე იტერაციას, მაშIნ როცა ერთ ინდექსზე არარსებობს უკვე ელემენტი.

მაგას მივხვდი და ვერაფრით ვერ გამოვასწორე sad.gif

Posted by: river-song 21 Dec 2020, 19:55
QUOTE
მაგას მივხვდი და ვერაფრით ვერ გამოვასწორე

ბოლოდან უნდა გააკეთო იტერაცია, თუ შესრულდება პირობა ვთქვათ მეცხრე თუ იქნება წაშლი მერე მერვეზე ჩვეულებრივად გადავა და ა.შ. ბოლოს ნულ ინდექსზე შეამოწმებ ელემენტს

QUOTE
print(a.sort()==b.sort())

სორტი ალბათ ნონს აგდებს და მერე ნონე და ნონე თრუს იძლევა. ჯერ დაასორტირე და მერე შეადარე ა და ბ ცალკე

Posted by: Essiittaaa 21 Dec 2020, 20:03
river-song
CODE

def comp(array1, array2):
   listi1=[]
   listi2=[]
   for i in array1:
       for j in array2:
           if i*i==j:
               listi1.append(i)
               listi2.append(j)
               break
   array1.sort()
   listi1.sort()
   array2.sort()
   listi2.sort()
   print(array1,'\n',listi1,'\n\n',array2,'\n',listi2,'\n')
   if array1==listi1 and array2==listi2:
       print('',array1,'\n',listi1,'\n\n',array2,'\n',listi2)
       return True
   else:
       print('',array1,'\n',listi1,'\n\n',array2,'\n',listi2)
       return False
print(comp([121, 144, 161, 19, 144, 19, 11],[11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]))


ეს დავწერე და debug-ზე ისევ nonetype-ს მიგდებს sad.gif არადა რაც არ უნდა ჩავწერო, მე არ მიგდებს ნონე-ს არაფერზე.

QUOTE
ბოლოდან უნდა გააკეთო იტერაცია, თუ შესრულდება პირობა ვთქვათ მეცხრე თუ იქნება წაშლი მერე მერვეზე ჩვეულებრივად გადავა და ა.შ. ბოლოს ნულ ინდექსზე შეამოწმებ ელემენტს

ვცდი აბა ამას.

QUOTE
სორტი ალბათ ნონს აგდებს და მერე ნონე და ნონე თრუს იძლევა. ჯერ დაასორტირე და მერე შეადარე ა და ბ ცალკე

მადლობა გამოვიდა

Posted by: river-song 21 Dec 2020, 20:14
QUOTE
[11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]

აი ეს ვერ გავიგე მართალი რომ გითხრა ი*ი ზე რო წერ გგონია, რომ 11*11 ზე წერ , მე მგონია ი ში ეგრევე 121 იგულისხმება , პრინტები ჩაწერე შუაში, რომ მიხვდე სად არი შეცდომა.

Posted by: Dirac 21 Dec 2020, 20:14
Essiittaaa
მარტივად რატომ არ გინდა გააკეთო?

[True if i**2 in list2 else False for i in list1]

Posted by: Essiittaaa 21 Dec 2020, 20:20
river-song
მანდ იგივეა რაც i**2=j
კი ვპრინტავ და მრავლდება.

შეცდომა არის სადღაც პასუხში, რაღაც ნონე-ს მაძლევს პასუხად და რა ეგ ვერ გავიგე. ანუ თვითონ პუნქციაში ხელით რაც შეგყავს მანდ რაღაც მაძლევს ნონე-ს

Dirac
მაგდენი არ ვიცი მარტივად რომ გავაკეთო :დ https://www.codewars.com/-ზე სავარჯიშოებს ვაკეთებ და როგორც ვიცი ისე ვხსნი, მერე სწორ პასუხს თუ ჩაწერ შეგიძლია სხვისი ამოხსნილებიც ნახო და სხვისი ამოხსნილებიდან უფრო ვხვდები მოკლედ როგორ უნდა დავწერო ხოლმე და ახალ რაღაცებსაც ვსწავლობ.

Posted by: river-song 21 Dec 2020, 20:25
Essiittaaa
ერთი შეხედვით სწორია ყველაფერი, დამიწერე აბა ერრორი ზუსტად რას აგდებს


პ.ს. ეხლა გავუშვი ონლაინ კომპაილერში შენი კოდი და მუშაობს ჩვეულებრივად
* * *
ეხლა დავფიქრდი შეიძლება ტესტ ქეისებში იყოს ცარიელი ლისტები ერთი ან ორივე და მაგდ როს შეიძლება ამოაგდოს მსგავსი ერორი,

მოკლედ, ლუპში არ გაუშვა სანამ არ დარწმუნდები, რომ ცარიელი არარი აბა დაუწერე ზემოთ პირობა.

Posted by: Essiittaaa 21 Dec 2020, 20:33
river-song
user posted image
დავდებ მეორე სურათსაც და იქ ერორს ჩავაგდებ
* * *
user posted image
ეს არის ერორის სურათი.

CODE

Traceback (most recent call last):
 File "main.py", line 39, in <module>
   test.assert_equals(comp(a1, a2), False)
 File "/home/codewarrior/solution.py", line 4, in comp
   for i in array1:
TypeError: 'NoneType' object is not iterable


CODE

def comp(array1, array2):
   listi1=[]
   listi2=[]
   if array1!=None or array2!=None:
       for i in array1:
           for j in array2:
               if i*i==j:
                   listi1.append(i)
                   listi2.append(j)
                   break
       if array1==None or array2==None:
           return False
       else:
           pass
       array1.sort()
       listi1.sort()
       array2.sort()
       listi2.sort()
       print(array1,'\n',listi1,'\n\n',array2,'\n',listi2,'\n')
       if array1==listi1 and array2==listi2:
           print('',array1,'\n',listi1,'\n\n',array2,'\n',listi2)
           return True
       else:
           print('',array1,'\n',listi1,'\n\n',array2,'\n',listi2)
           return False
print(comp([121, 144, 161, 19, 144, 19, 11],[11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]))


ასე გავუწერე მაგრამ იგივეა მაინც

Posted by: river-song 21 Dec 2020, 20:40
არა იფ ლენ(არრაი) > 0 ზე ესე გაუწერე ორივეს

პ.ს. მერე პირობა გაუწერე როცა ნულია , სავარაუდოდ იგულისხმება რო ფოლსია როცა ერთერთი არი ცარიელი, ორივე რო ცალია ალბათ თრუ არი

Posted by: Essiittaaa 21 Dec 2020, 20:41
CODE

def comp(array1, array2):
   listi1=[]
   listi2=[]
   if array1==None or array2==None:
       return False
   else:
       for i in array1:
           for j in array2:
               if i*i==j:
                   listi1.append(i)
                   listi2.append(j)
                   break
       if array1==None or array2==None:
           return False
       else:
           pass
       array1.sort()
       listi1.sort()
       array2.sort()
       listi2.sort()
       print(array1,'\n',listi1,'\n\n',array2,'\n',listi2,'\n')
       if array1==listi1 and array2==listi2:
           print('',array1,'\n',listi1,'\n\n',array2,'\n',listi2)
           return True
       else:
           print('',array1,'\n',listi1,'\n\n',array2,'\n',listi2)
           return False
print(comp([121, 144, 161, 19, 144, 19, 11],[11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]))


ასე დავწერე და იმუშავა bis.gif

დიდი მადლობა დახმარებისთვის bis.gif
* * *
აუ რამდენი ვიწვალე 3 დღეა ამ კოდს ვეჩალიჩები და ვიღაცას უწერია ასე:

CODE

def comp(array1, array2):
   try:
       return sorted([i ** 2 for i in array1]) == sorted(array2)
   except:
       return False


ჩემ თავზე მაგრად ვიცინი lol.gif

Posted by: Dirac 22 Dec 2020, 06:29
Essiittaaa
მაგიტომ list comprehension ([i**2 for i in range(10)]) უნდა ისწავლო. მუცლიდან კი არ მოყვებათ სხვებს ეგ ცოდნა. ასევე იტერაციის დროს რომ წერ j = j + 1 ეგეთი რამე პითონში პრაქტიკულად არასდროსაა საჭირო. ძველ პროგრამირების ენებში goto-ს რომ იყენებდნენ პრაქტიკულად ეგეთი მოძველებული სტილია.

დამწყებებმა უნდა დაამუღამონ შემდეგი რაღაცეები:
range, zip, list comprehension, any, all, lambda, filter, reduce. ამის მერე ბევრად უფრო ელეგანტურად დაწერ. თითოეულზე რამდენიმე მაგალითი საკმარისია.

Posted by: river-song 22 Dec 2020, 13:23
QUOTE
ჩემ თავზე მაგრად ვიცინი

არაუშავს მთავარია ლოგიკის ჩამოყალიბება ისწავლო და გასაგები კოდი წერო , ეგაა პროგრამირებაში მნიშვნელოვანი და კიდე ბიგ ო ნოტაცია რომ არი მგას უნდ ამიაქციო ყურადღება, რომ სწრაფი იყოს კოდი. დიდი ექსპერტი არ ვარ მეც შენსავით ჩემით ვისწავლე რაც ვისწავლე და ეხლაც ვსწავლობ , მარა მე რაც გავიარე მივხვდი, რომ ეგენი არი მთავარი. კარგ კოდში იგულისხმება, რომ უნდ აიყოს სხვისთვის გასაგები და ოპტიმალური ანუ რაც შეილება სწრაფად უნდა აკეთებდეს თავის საქმეს , სხვა იდეა არარი მანდ არაფერი.

სისწრაფის კუთხით მგონია, რომ შეიძლება შენი კოდის ოპტიმიზაცია თუ ჯერ სორტირებას გაუკეთებ და მერე ბაინერი სერჩით დაძებნი სავარაუდო პასუხებს , ეხლა შენი კოდი ბიგ ო ნოტაციის მიხედვით კვადრატულია და შეიძლება ლოგარითმული გახადო.ნუ ეხლა რეალურად ეხლა ცოტა მონაცემში არანაირი პრობლემას არ გიქმნის მარა მილიონი მონაცემის შემოწმებას რო აკეთებდე მერე იგრძნობდი განსხვავებას.

Posted by: Essiittaaa 22 Dec 2020, 14:28
Dirac
QUOTE
მაგიტომ list comprehension ([i**2 for i in range(10)]) უნდა ისწავლო. მუცლიდან კი არ მოყვებათ სხვებს ეგ ცოდნა.

ჩავუჯექი ამას და მივხვდი უკვე ლოგიკას. ამოცანებში ვეცდები ეს გამოვიყენო.

QUOTE
ასევე იტერაციის დროს რომ წერ j = j + 1 ეგეთი რამე პითონში პრაქტიკულად არასდროსაა საჭირო. ძველ პროგრამირების ენებში goto-ს რომ იყენებდნენ პრაქტიკულად ეგეთი მოძველებული სტილია.

რას გულისხმობ?
j+=1
ასე რომ წერენ მეც ასე დავწერო თუ როგორ აბა?

QUOTE
დამწყებებმა უნდა დაამუღამონ შემდეგი რაღაცეები:
range, zip, list comprehension, any, all, lambda, filter, reduce. ამის მერე ბევრად უფრო ელეგანტურად დაწერ. თითოეულზე რამდენიმე მაგალითი საკმარისია.

range, zip და list comprehension გასაგებია აქედან უკვე, ახლა პრაქტიკაში გამოვიყენებ თუ დამჭირდება სადმე და დანარჩენებსაც ვისწავლი.


river-song
ხო იდეაში ახლა მთავარია ლოგიკა დავუმუღამო, ამოცანას რომ ვაკეთებ და საბოლოო ჯამში სწორად გამოდის, მერე ვეჩალიჩები ხოლმე რომ უფრო შევამოკლო და გასაგები გავხადო.
კოდის სისწრაფეს გამოცდილება მოიტანს ალბათ, ჯერ კიდევ ჩაინიკი ვარ.
* * *
თუ იცით ვინმემ pycharm-ში ან VS Code-ში როგორ გამოვრთო ავტომატურად რომ მივარდება ფუნქციები წერისას.

ანუ import r-ს რო დაწერ და ყველაფერი რაც რ-ზე იწყება ავტომატურად რომ ვარდება ეგ ხელს მიშლის დამახსოვრებაში და გათიშვა მინდა

Posted by: Dirac 22 Dec 2020, 17:33
Essiittaaa
sia = [5, 1, 12, 0, 6, 3, 23]
i = 0
axla = 0

while i < len(sia):
j = i +1

ამას ვგულისხმობდი მაგრამ ეგ შენი დაწერილი არ ყოფილა biggrin.gif დაიკიდე

Posted by: NinjaRacer 23 Dec 2020, 06:09
ვაფშე არაფერი არ უნდა დაიმახსოვრო მგონი.

ჰარვარდის ტიპი როა cs50 ლექციებს რო კითხულობს შუა ლექციაზე დაგუგლა რაღაცა.
გუგლი სტაკოვეფლოუ და დოკუმენტაციაში უნდა ჩაიეხო ხოლმე. რამდენი ბიბლიოთეკაა ყველას სინტაქს ხო არ დაიმახსოვრებ.
თუ მაინცდამაინც და უინტერნეტოდ გიწევს დახურულ ოთახში პროგრამების წერა მაშინ არსებობს
help მეთოდი და dir მეთოდი.

ნუ თუმაინცდამაინც სტანდარტულ ბიბლიოთეკებში რაცაა ეგ დაიმახსოვრე დანარჩენს უბრალოდ ფიზიკურად ვერ დაიმახსოვრებ ყველაფერს.
https://www.youtube.com/watch?v=EaOhKg5pKV8
* * *
რა იდიოტი ვარ აქამდე როგორ ვერ მოვიფიქრე.

რამდენ მანქანაზე მიწევს ssh-ით შესვლა და რამე მსგავსი უნდა დამეწერა

CODE

#!/usr/bin/env python

# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.
from __future__ import print_functi0n

from twisted.conch.ssh import transport, userauth, connection, common, keys, channel
from twisted.internet import defer, protocol, reactor
from twisted.python import log
import struct, sys, getpass, os

"""
Example of using a simple SSH client.

It will try to authenticate with a SSH key or ask for a password.

Re-using a private key is dangerous, generate one.
For this example you can use:

$ ckeygen -t rsa -f ssh-keys/client_rsa
"""

# Replace this with your username.
# Default username and password will match the sshsimpleserver.py
USER = b'user'
HOST = 'localhost'
PORT = 5022
SERVER_FINGERPRINT = b'55:55:66:24:6b:03:0e:f1:ec:f8:66:c3:51:df:27:4b'

# Path to RSA SSH keys accepted by the server.
CLIENT_RSA_PUBLIC = 'ssh-keys/client_rsa.pub'
# Set CLIENT_RSA_PUBLIC to empty to not use SSH key auth.
# CLIENT_RSA_PUBLIC = ''
CLIENT_RSA_PRIVATE = 'ssh-keys/client_rsa'


class SimpleTransport(transport.SSHClientTransport):
   def verifyHostKey(self, hostKey, fingerprint):
       print('Server host key fingerprint: %s' % fingerprint)
       if SERVER_FINGERPRINT == fingerprint:
           return defer.succeed(True)
       else:
           print('Bad host key. Expecting: %s' % SERVER_FINGERPRINT)
           return defer.fail(Exception('Bad server key'))

   def connectionSecure(self):
       self.requestService(
           SimpleUserAuth(USER,
               SimpleConnection()))

class SimpleUserAuth(userauth.SSHUserAuthClient):

   def getPassword(self):
       return defer.succeed(getpass.getpass("%s@%s's password: " % (USER, HOST)))

   def getGenericAnswers(self, name, instruction, questions):
       print(name)
       print(instruction)
       answers = []
       for prompt, echo in questions:
           if echo:
               answer = raw_input(prompt)
           else:
               answer = getpass.getpass(prompt)
           answers.append(answer)
       return defer.succeed(answers)


   def getPublicKey(self):
       if (
           not CLIENT_RSA_PUBLIC or
           not os.path.exists(CLIENT_RSA_PUBLIC) or
           self.lastPublicKey
               ):
           # the file doesn't exist, or we've tried a public key
           return
       return keys.Key.fromFile(filename=CLIENT_RSA_PUBLIC)


   def getPrivateKey(self):
       """
       A deferred can also be returned.
       """
       return defer.succeed(keys.Key.fromFile(CLIENT_RSA_PRIVATE))



class SimpleConnection(connection.SSHConnection):
   def serviceStarted(self):
       self.openChannel(TrueChannel(2**16, 2**15, self))
       self.openChannel(FalseChannel(2**16, 2**15, self))
       self.openChannel(CatChannel(2**16, 2**15, self))



class TrueChannel(channel.SSHChannel):
   name = b'session' # needed for commands

   def openFailed(self, reason):
       print('true failed', reason)

   def channelOpen(self, ignoredData):
       self.conn.sendRequest(self, 'exec', common.NS('true'))

   def request_exit_status(self, data):
       status = struct.unpack('>L', data)[0]
       print('true status was: %s' % status)
       self.loseConnection()

class FalseChannel(channel.SSHChannel):
   name = b'session'

   def openFailed(self, reason):
       print('false failed', reason)

   def channelOpen(self, ignoredData):
       self.conn.sendRequest(self, 'exec', common.NS('false'))

   def request_exit_status(self, data):
       status = struct.unpack('>L', data)[0]
       print('false status was: %s' % status)
       self.loseConnection()

class CatChannel(channel.SSHChannel):
   name = b'session'

   def openFailed(self, reason):
       print('echo failed', reason)

   def channelOpen(self, ignoredData):
       self.data = b''
       d = self.conn.sendRequest(self, 'exec', common.NS('cat'), wantReply = 1)
       d.addCallback(self._cbRequest)

   def _cbRequest(self, ignored):
       self.write(b'hello conch\n')
       self.conn.sendEOF(self)

   def dataReceived(self, data):
       self.data += data

   def closed(self):
       print('got data from cat: %s' % repr(self.data))
       self.loseConnection()
       reactor.stop()


log.startLogging(sys.stdout)
protocol.ClientCreator(reactor, SimpleTransport).connectTCP(HOST, PORT)
reactor.run()


twisted-ს იყენებს
* * *
https://www.youtube.com/watch?v=d_U9k6QPrlQ&ab_channel=linuxconfau2017-Hobart%2CAustralia


* * *
ადრე აქ გენერატორის გამოყენებით tail-ის მსგავსი კიარადა ანალოგი დავწერე select-ის გამოყენებით

ჰოდა იგივე პრიციპებზე მუშაობს twisted-ი.
ასინქრონული კოდის წერა ამათმა დაიწყეს.

Posted by: Essiittaaa 23 Dec 2020, 16:57
NinjaRacer
შენ შემთხვევაში მართალი ხარ, იმიტომ რომ უკვე იცი იმ დონეზე რომ ხვდები სად რა მეთოდი შეიძლება გამოიყენო უკეთ, მე ჯერ ახლა რომ ვსწავლობ, მიშლის ხელს დამახსოვრებაში, მაგალითად randint და randrange კაი ხანი ერთი და იგივე მეგონა, მერე ჩემით რომ ვწერდი ხან ერთს, ხან მეორეს თავში კარგად ჩაჯდა განსხვავება.

თან მაგ ტიპმა უკვე იმდენი რამე იცის რომ, შეიძლება დაავიწყდეს კიდეც რაღაცები და გუგლით უცებ იპოვის რაც სჭირდება.

Posted by: NinjaRacer 24 Dec 2020, 18:44
Essiittaaa

მე გეტყვი ჩემს მაგალითზე.

კოდს ცოტა ხანი რომ აღარ ვწერ მავიწყდება
ვიზუალ სტუდიო კოდი მეხმარება ძალიან.

ობიექტს რო დავწერ და წერტილს ვუსვამ მიჩვენებს თვითონ რა მეთოდები აქვს და ა.შ

ყოველ 10 წამში გუგლი მჭირდება კოდის წერისას.
და მარტო მე კი არ ვარ ეგრე თითქმის ყველა დეველოპერი ეგრეა.

მოკლედ რაღAცეების დამახსოვრებას საერთოდ არაა საჭჭირო.
მაგაზე ფიქრს ჯობია ლოგიკაზე იფიქრო და პრობლემების გადაწყვეტის გზებზე.

და რთული მათემატიკური ამოცანების ამოხსნის მუღამს ვერ ვხვდები კიდევ საერთოდ.

და IDE არ გამოყენება იგივეა 50 წლით უკან დაბრუნდე.

ბარემ ასემბლი ისწავლე და მანქანის ენაზე წერე.

ეგეთ რაღაცეებზე დროის ხარჯვას ჯობია მარტივი კოდი წერო მაგრამ ისეთი რომელიც მუშაობს და საქმეს აკეთებს.

მოკლედ კი არ გაკრიტიკებ უბურალოდ რჩევის სახით გითხარი. ინდივიდუალრია ეს ყველაფერი ძალიან და როგორც შEნთვის არის კომფორტული ისე იმუშავე.

აი მაგალითად
https://www.youtube.com/watch?v=F5mRW0jo-U4&ab_channel=freeCodeCamp.org

ეს რომ გააკეთო სავარჯიშოსავით და კოდი წერო ბევრად ჯობია.

ბევრ კოდს რომ დაწერ მერე ე.წ "კუნთების მეხსიერება" -ში ჩაგიჯდება

Posted by: Dirac 24 Dec 2020, 19:59
NinjaRacer
QUOTE
და რთული მათემატიკური ამოცანების ამოხსნის მუღამს ვერ ვხვდები კიდევ საერთოდ.


საშუალო დონის ვებ დეველოპერობაზე წინ თუ არ გინდა წასვლა მაშინ აზრი არ აქვს რთული მათემატიკური ამოცანების ამოხსნას.

https://www.youtube.com/watch?v=N2bXEUSAiTI&t=3956s
"Software Engineering is trash, it's just translating business requirements into React code" biggrin.gif

ამ თემაში შემოდი, მათემატიკური ამოცანები 1000-ჯერ უფრო საინტერესოა ვიდრე ვებსაიტზე კნობკის დამატება.
https://forum.ge/?f=48&showtopic=35184724

Posted by: Essiittaaa 24 Dec 2020, 20:12
NinjaRacer
QUOTE
მოკლედ რაღAცეების დამახსოვრებას საერთოდ არაა საჭჭირო.
მაგაზე ფიქრს ჯობია ლოგიკაზე იფიქრო და პრობლემების გადაწყვეტის გზებზე.


ეგ ყველაფერი გასაგებია რომ არ არის საჭირო ყველაფრის დამახსოვრება, მაგრამ თუნდაც ელემენტარული random, math და ასე შემდეგ ხო უნდა იცოდე.
ლოგიკის განსავითარებლად ვაკეთებ სწორედ მათემატიკურ ამოცანებს, ეს საიტი რომ არ იყოს ბევრად უკან ვიქნებოდი ალბათ.

რაც ვისწავლე სულ სხვადასხვა რაღაცების გამოყენება მიწევს და თან ლვლ-ზე რომ გადავდივარ რთულდება ამოცანებიც, მაშინ ლერნინგი მინდა ვისწავლო და იდეაში დამჭირდება მათემატიკური ამოცანების ამოხსნაც.

QUOTE
და IDE არ გამოყენება იგივეა 50 წლით უკან დაბრუნდე.

არ ვამბობ რომ არ გამოვიყენებ, უბრალოდ სწავლის პერიოდში ხელს მიშლის.

QUOTE
მოკლედ კი არ გაკრიტიკებ უბურალოდ რჩევის სახით გითხარი. ინდივიდუალრია ეს ყველაფერი ძალიან და როგორც შEნთვის არის კომფორტული ისე იმუშავე.

არც კრიტიკა იქნება პრობლემა, ჯერ ახლა ვიწყებ და ყველანაირ დახმარებას მივიღებ, პირიქით, მადლობა რომ არ გეზარება და მიწერ შენიშვნებს.

რაც შეეხება ჯანგოს, იანვარში კურსს ვიწყებ ჯანგოს შემსწავლელს, მანამდე მაგ ვიდეოს ჩავუჯდები და ვნახოთ რა გამომივა.

მადლობა.

Posted by: NinjaRacer 25 Dec 2020, 00:26
Dirac
user posted image

biggrin.gif

კი კარგია მეც მიკეთებია სავარჯიშოები სხვადასხვა საიტებზე და რაღაც პონტში გამომადგა
უბრალოდ ძალიან ჩაკოსინუსება არ მიცდია biggrin.gif

ერთხელ კი დამჭირდა რაღაც მსგავსი როცა ლოულეველ მიწევდა რაღაც დივაისებთან ურთიერთობა.
მანდაც გვყავდა ნამდვილი electrical engineer-ი რომელიც ამ პრომულების თემების კოდებს აგვარდება და ჩვენ 'ბიზნეს' ლოგიკას ვწერდით biggrin.gif
ძალიან პატარა პროექტი კი იყო biggrin.gif მაგრამ ფულს კი ჭრიდა პატრონი ამ პროექტით არცთუისე ცუდს biggrin.gif

Posted by: Freestyle 26 Dec 2020, 17:06
ბითკამპი როგორც არის მსგავსი რამე სავარჯიშო არ არის პიტონზე?

Posted by: Dirac 26 Dec 2020, 17:13
Freestyle
ბითკამპი არ ვიცი, მაგრამ სავარჯიშოების მეტი რაა პითონში
https://forum.ge/?f=48&showtopic=35184724

Posted by: Freestyle 26 Dec 2020, 18:09
Dirac
მანდ ძაან რთულებზე ხართ, არ ვარ მაქამდე ჯერ biggrin.gif

ბითკამპი ჯავასკრიპტზეა დავალებები რა...

Posted by: Dirac 26 Dec 2020, 19:04
Freestyle
ადვილები ამოხსენი. ესეც კაი გასართობია.
https://py.checkio.org/

Posted by: Freestyle 26 Dec 2020, 20:06
Dirac
ხო მაგას ვეძებდი, მადლობა მეგობარო smile.gif
* * *
Write a functi0n that takes in two numbers and returns the sum of those two numbers.

ამას რა უნდა??
CODE
def sum(num1, num2):
   pass

Posted by: Dirac 27 Dec 2020, 01:48
Freestyle
return a + b

თავიდან ძალიან ელემენტარულებია.

Posted by: Nil 27 Dec 2020, 12:56
QUOTE (Datvlas-vin-gtxovs @ 15 Dec 2020, 14:47 )
ეს იმუშავებს
CODE
dic = {
 1:"ორშაბათი",
 2:'სამშაბათი',
 3:'ოთხშაბათი',
 4:'ხუთშაბათი',
 5:'პარასკევი',
 6:'შაბათი',
 7:'კვირა'}

dge = int(input('შეიყვანეთ დღე: '))

sia = []

for key, val in dic.items():
  if dge == key:
    print(val)

QUOTE


syntacticSugar = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]

def slowest_language(input):
    return syntacticSugar[input - 1]

Posted by: Essiittaaa 27 Dec 2020, 21:11
QUOTE (Freestyle @ 26 Dec 2020, 20:06 )
Dirac
Write a functi0n that takes in two numbers and returns the sum of those two numbers.

ამას რა უნდა??
CODE
def sum(num1, num2):
   pass

return num1 + num2 წესით

Posted by: Essiittaaa 30 Dec 2020, 20:30
CODE

def last_digit(n1, n2):
   if n1 > 0 and n2 > 0:
       ans = str(n1 ** n2)
       return ans[-1]
   elif n1 == 0 and n2 == 0:
       return 1
print(last_digit(1111,111111))



ამ კოდის უფრო სწრაფი ვარიანტი როგორ იქნება?

უფრო დიდ რიცხვებზე მინდა იმუშაოს

Posted by: Dirac 31 Dec 2020, 01:31
Essiittaaa
არ ვიცი რამდენად უფრო სწრაფია, მაგრამ შეგიძლია დაწერო
return ((n1 % 10) * (n2 % 10)) % 10
ანუ ბოლო ციფრები გადაამრავლო მარტო და მათი ათზე გაყოფის ნაშთი გამოთვალო.


შენს კოდს აქვს შემდეგი პრობლემა, ბოლოს else არაა. კიდე პირველ შემთხვევაში სტრინგს აბრუნებ, მეორეში ინტეჯერს.

Posted by: Essiittaaa 31 Dec 2020, 01:45
Dirac
მთავარია ამოცანა ამოიხსნას და დამიდასტუროს რომ სწორია, ინტეჯერს მისცემ პასუხად თუ სტრინგს დიდად არ ცვლის არაფერს.

მაგას ჩავსვამ აბა და ვნახოთ რას იზამს
* * *
იმუშავა, მაგას კაი ხანი ვერ მოვიფიქრებდი.

ბოლო ციფრების ნამრავლი კი ვიფიქრე მაგრამ მასე არა.

მადლობა.

Posted by: Essiittaaa 5 Jan 2021, 16:19
ქართული კლავიატურა ( ჩართვა/გამორთვა ბეჭდვის დროს კლავიშით "~" )

Posted by: Datvlas-vin-gtxovs 12 Jan 2021, 12:41
პითონცი
მთავარია არ გაჩერდეთ
მე 3ჯერ გავჩერდი

up.gif
იმედი არ დაკარგოთ. კარგი ენაა
ამოცანები და პროექტები აკეთეთ

Posted by: Essiittaaa 19 Jan 2021, 21:35
პროგრამირება ლინუქსზე ჯობს?
ანუ თავიდანვე გადავიდე ვინდოუსიდან ლინუქსზე თუ ვისაც სად უსწორდება ის პონტია?

django-ს ვიდეო გაკვეთილები რაც ვნახე ყველას ან ლინუქსი აქვს ან ios და მგონი მარტო მე მაქვს ვინდოუსი lol.gif

Posted by: C17H19NO3 20 Jan 2021, 03:23
Essiittaaa

კი რა თქმა უნდა smile.gif
განსაკუთრებით პითონი და მისი ფრეიმვორკები.

Posted by: Essiittaaa 21 Jan 2021, 13:41
CODE

class Customers:

   def __init__(self, firstname, lastname, age, personalnumber):
       self.firstname = firstname
       self.lastname = lastname
       self.age = age
       self.personalnumber = personalnumber

   def info(self):
       print("Customer Full Name: " + firstname.title() + " " + lastname.title())

user01 = Customers("Giorgi", "Gakharia", 40, "01111058475")

print(user01.info)


რა შეცდომა მაქვს? ხო უნდა პრინტავდეს წესით ინფოს drug.gif

<bound method Customers.info of <__main__.Customers object at 0x0000026268B3DFD0>>

ეს გამოაქვს

Posted by: @Schizophrenic 21 Jan 2021, 14:00
print(user01.info())

ბრჩხილები მიუმატე ფუნქციას

Posted by: Essiittaaa 21 Jan 2021, 14:06
@Schizophrenic
NameError: name 'firstname' is not defined

self-ები მაკლია თურმე. facepalm.gif

Posted by: Essiittaaa 25 Jan 2021, 19:05
CODE

def find_uniq(arr):
    if arr != int and arr != float:
           print(arr)
print(find_uniq(4))



რატო მიპრინტავს 4-ს?

ინტეჯერად არ აღიქვამს ფუნქცია?

რაღაცას ვერ ვიგებ აშკარად eek.gif

Posted by: C17H19NO3 25 Jan 2021, 20:21
Essiittaaa
ფუნქციაში return გაუკეთე

Posted by: why-so-serious 26 Jan 2021, 10:02
ყველაზე კაი ლიბრარი რომელია საიტის წიგნად ქცევა მინდა... პდფ ან დოკიქს ფაილში რავი არ აქვს დიდი მნიშვნელობა

Posted by: Essiittaaa 26 Jan 2021, 12:54
C17H19NO3
ეგ კი მარა არაფერს ცვლის.

ვერ ვხვდები 4-ს რატო მიპრინტავს

Posted by: @Schizophrenic 26 Jan 2021, 14:50
Essiittaaa
if type(arr) != int and type(arr) != float:

ასე გადააკეთე და იმუშავებს როგორც გინდა, შეგიძლია დაპრინტო type(int) და type(4) და ნახე რას დაგიბეჭდავს(ინტი არის კლასი)
და პრინტი ფუნქციაში თუ გაქ გარეთ ნუღა სვავ ფუნქციის გამოძახებას პრინტში, ან რეთარნი დაუწერე

Posted by: Essiittaaa 26 Jan 2021, 15:42
@Schizophrenic
მადლობა იმუშავა.

Posted by: Essiittaaa 27 Jan 2021, 21:24
CODE

def accum(s):
   x = 0
   for letter in s:
       print((((s[x]) * (x + 1)).title() + "-") , end = "")
       x += 1
accum("adssdfsd")


მაქვს ეს კოდი და მინდა რომ ბოლო "-" არ დაიპრინტოს.

ვცადე ასე:
CODE

def accum(s):
   x = 0
   for letter in s:
       y = (((s[x]) * (x + 1)).title() + "-")
       print(y[:-1] , end = "")
       x += 1
accum("adssdfsd")



CODE

def accum(s):
   x = 0
   for letter in s:
       print(((((s[x]) * (x + 1)).title() + "-") , end = "")[:-1])
       x += 1
accum("adssdfsd")



და არც ერთი არ მუშაობს, სხვანაირად როგორ შეიძლება მოვაშორო?

Posted by: Lilith 28 Jan 2021, 05:46
QUOTE
და არც ერთი არ მუშაობს, სხვანაირად როგორ შეიძლება მოვაშორო?

CODE

print("-".join([l*(i+1) for i, l in enumerate(s)]))

user.gif

Posted by: Essiittaaa 28 Jan 2021, 13:31
Lilith
პრინტშიც თუ შეიძლებოდა ფორ ლუპი არ ვიცოდი eek.gif

მადლობა


enumerate ხო ნომრავს და რაში გამოგვადგა ამ შემთხვევაში მაგას ვერ მივხვდი
* * *
აა ანუ მაგან
x = 0
x += 1 ლუპში

აგვაცილა თავიდან ხო?

Posted by: Lilith 29 Jan 2021, 05:34
Essiittaaa
აჰა, ფაქტიურად მნიშვნელობას და ინდექს ერთდროულად იღებ

Posted by: river-song 1 Feb 2021, 18:43
https://treyhunner.com/2018/10/asterisks-in-python-what-they-are-and-how-to-use-them/

დღეს გაავაწყდი ამ სტატიას, არვიცოდი ფიფქს ამდენი ფუნქცია თუ ქონდა პითონში, ძაან საინტერესო იყო smile.gif

Posted by: Essiittaaa 1 Feb 2021, 20:27
river-song
ვა, რა საინტერესო რამეებია, რაღაცები ვერ გავიგე მარა რაც გავიგე გამოვიყენებ biggrin.gif

Posted by: Lilith 2 Feb 2021, 05:23

აი ეს არის მაგარი ადამიანის უმაგრესი ვიდეო "პითონური" ხრიკების გამოყენების სხვადასხვა ვარიანტი smile.gif რამდენჯერაც არ უნდა ვუყურო არ მბეზრდება smile.gif

Posted by: Essiittaaa 5 Feb 2021, 21:15
გამარჯობა მეგობრებო

CODE

x = input("sheiyvanet pirveli stringi: ")
y = input("sheiyvanet meore stringi: ")
z = int(input("sheiyvanet raodenoba: "))

num = 1
num2 = 2
c = x + y
listi = [x,y,c]

try:
   if type(x) != str or type(y) != str or type(z) != int:
       print("arasworad aris sheyvanili")

   else:
       for i in range(int(z)):
           k = listi[num] + listi[num2]
           listi.append(k)
           num += 1
           num2 += 1
       print(*listi)

except:
   print("sharshi vart")


შეიძლება უფრო მოკლედაც დაიწეროს მაგრამ ამ შემთხვევაში სხვა პრობლემა მაქვს,
თრაის შემდეგ ექსეპტზე რომ გადადის რიცხვის მაგივრად სტრინგი თუ შევიყვანე, მიგდებს ველიუ ერორს და წესით ექსეპტში მითითებული პრინტი არ უნდა გამოაგდოს? baby.gif

Posted by: NinjaRacer 5 Feb 2021, 22:20
QUOTE
except:
   print("sharshi vart")


except Exception as e:

ესე სცადე აბა.

Posted by: river-song 6 Feb 2021, 20:33
Essiittaaa
QUOTE
z = int(input("sheiyvanet raodenoba: "))

აბა ამას მოაცალე ეს ინტ ის დეკლარაცია და ინფუთი დაუტოვე მარტო

Posted by: Essiittaaa 9 Feb 2021, 14:34
NinjaRacer
river-song
ზედა ნაწილი რაც ტრაიში არ იყო შევიყვანე და ჩვეულებრივ გასწორდა biggrin.gif

Posted by: NinjaRacer 9 Feb 2021, 18:32
Essiittaaa
ისე რო იცოდე

except Exception as e:
უფრო მეტ ექსეფშენს იჭერს ვიდრე უბრალოდ
except:

აღარ დავაკვირდი ზედა ნაწილს up.gif

Posted by: Essiittaaa 9 Feb 2021, 22:24
NinjaRacer
CODE

In the second you can access the attributes of the exception object:

>>> def catch():
...     try:
...         asd()
...     except Exception as e:
...         print e.message, e.args
...
>>> catch()
global name 'asd' is not defined ("global name 'asd' is not defined",)
But it doesn't catch BaseException or the system-exiting exceptions SystemExit, KeyboardInterrupt and GeneratorExit:

>>> def catch():
...     try:
...         raise BaseException()
...     except Exception as e:
...         print e.message, e.args
...
>>> catch()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 3, in catch
BaseException
Which a bare except does:

>>> def catch():
...     try:
...         raise BaseException()
...     except:
...         pass
...
>>> catch()
>>>


ეს უპასუხეს კითხვაზე: What is exactly the difference in both the constructs?

აქ პირიქით ხსნიან თუ მე გავიგე ცუდად ?

ცოტა ვერ მივხვდი

Posted by: NinjaRacer 9 Feb 2021, 22:36
არა მე ამერია და პირიქით დავწერე)

ვინაიდან იუზერის ინპუტს იყენებ ვიღაცამ რო ctrl+c დააჭიროს ეგეც უნდა დაიჭირო და ამიტომ მარტო except ჯობია.
execpt Exception-ი კიდევ პირიქით) არ იჭერს systemInterrupt-ს და KeyboardInterrupts-ს.

მე მაპატიე საკრისებურად შეატრიალე ჩემი ნაქთვამი და სწორია up.gif

ან შეიძლება პირიქით გინდოდეს რო კიბორდ ინტერაფთი არ დაიჭირო. ამიტომ მათშორის განსხვავება იცოდე სასარგებლოა lol.gif


Posted by: Essiittaaa 9 Feb 2021, 22:42
NinjaRacer
და იუზერში ინფუთის მიცემა ხო საშიშია უსაფრთხოების თემაში?

ფორმის გაკეთება არ ჯობს?

Posted by: NinjaRacer 9 Feb 2021, 23:00
Essiittaaa
ჯანგო ძალიან კარგად აგვარებს ვალიდაციის საკითხებს.

ეგრე ღრმად არ ჩავძიებივარ. input validation-ი input sanitizing ქვია.

კი საშიშია ნებისმიერი რამე რაც შენ პროგრამას აწვდის ინპუტს, ან პარამეტრებს, ფაილები, user input და ა.შ. თუ სეკურიტის კუთხით მიუდგები ასევე output-იც უნდა დაასანიტიზირო ყოველთვის. რო რამემ არ გაჟონოს. იგივე მნიშნველობისაა output-იც. დაუშვათ რამე ხვრელი იპოვა რომ ვერ გამოიყენოს მაინც.

სწორ კანალზე დაჯექი ისე:

http://www.easypythondocs.com/validation.html

try/except-ით.

პითონის ფილოსოფიას მივყევი, გამოიყენე სხვისი დაწერილი კოდი სანიტიზინგისთვის. თუმცა არ მოგატყუებ და მაგდენი კოდი არ მიწერია არც ფლასკში არც ჯანგოში არც სხვაგან რომ უსაფრთხოებაზე მეფიქრა.

from django.core import validators

Posted by: პატრიოტი 11 Feb 2021, 14:19
დაწერეთ პროგრამა-თამაში "ჯეირანი".
თამაშში დაშვებული იყოს მხოლოდ: "მაკრატელი", "ქვა" და "ქაღალდი".

პროგრამის ლოგიკა:
1) პროგრამა ჩაიფიქრებს ერთ-ერთს: "მაკრატელს", "ქვას" ან "ქაღალდს";
2) მომხმარებელს შეჰყავს პროგრამაში თავისი არჩევანი: "მაკრატელი", "ქვა" ან "ქაღალდი";
3) იმის და მიხედვით თუ რა შეიტანა მომხმარებელმა გამოვიდეს შესაბამისი პასუხი ეკრანზე თუ ვინ გაიმარჯვა მიმდინარე სვლაზე;
4) თამაში იყოს ჯამურად 5 სვლიანი და საბოლოოდ ეკრანზე დაიბეჭდოს საერთო ანგარიში: მომხმარებელი VS კომპიუტერი.


ხომ ვერ დამეხმარებით როგორ გავაკეთო, ან რაიმე მინიშნება რო მომცეთ smile.gif)

Posted by: tornikeeeee 12 Feb 2021, 01:08
პატრიოტი
QUOTE
რაიმე მინიშნება რო მომცეთ )


არაა რთული რეალურად, რანდომ მოდულის გამოყენება დაგჭირდება
* * *
https://repl.it/@Tornikeee/learn#main.py

აქ არის კოდი ნუ მთლად კარგად არ მიწერია მაგრამ თუ ვერ გააკეთე გამოგადგება

Posted by: lepori 12 Feb 2021, 10:05
tornikeeeee
QUOTE
აქ არის კოდი ნუ მთლად კარგად არ მიწერია მაგრამ თუ ვერ გააკეთე გამოგადგება

გამათახსირა შენმა კომპიუტერმა, ყველა მომიგო biggrin.gif

Posted by: tornikeeeee 12 Feb 2021, 12:52
QUOTE
გამათახსირა შენმა კომპიუტერმა, ყველა მომიგო


biggrin.gif biggrin.gif biggrin.gif

Posted by: Essiittaaa 12 Feb 2021, 23:09
ჯანგო კი კარგია, მაგრამ კლასებმა მაგრად გამჭედა, მივხვდი რომ კლასების 10% ვიცი, მაქსიმუმ ეგეც, ხოდა იქნებ მირჩიოთ რამე საიტი, სადაც კლასებზე შევძლებ ამოცანების კეთებას.

მე ვერ ვნახე ნორმალური

ფუნქციებზეც მასე, ოღონდ

user posted image

რამე ასეთი, ფუნქციით ამოხსნები ყელშია


მადლობა

Posted by: Essiittaaa 14 Feb 2021, 18:11
CODE

x = float(input('enter a decimal number between 0 and 1: '))

p = 0
while ((2**p)*x)%1 !=0:
   print(int((2**p)*x))
   print('Remainder = ' + str(((2**p)*x - int((2**p)*x))))
   p += 1

num = int(x*(2**p))

result = ''
if num == 0:
   result = '0'
while num > 0:
   result = str(num%2) + result
   num = num // 2

for i in range(p - len(result)):
   result = '0' + result

result = result[0:-p] + '.' + result[-p:]
print('the binary representation of the decimal ' + str(x))


აი აქ ვერაფრით ვერ ვხვდები ბოლოში თუ რეზალთი არ გვჭირდება და მაინც x-ს ვპრინტავთ რატო წერია მთელი კოდი რესალტისთვის, x მაინც არ იცვლება, მე ვერ გავიგე რამე?
* * *
CODE

def binarymaker(number):
   first = number % 2
   answer = ""
   while number != 1:
       second = number // 2
       ans = number % 2
       number = second
       answer += str(ans)
   answer += str(first)
   answer = answer[::-1]

   return answer
print(binarymaker(int(input("enter number: "))))



ათობითიდან ორობითზე გადამყვანი ფუნქცია დავწერე, მივიღებ შენიშვნებს.

Posted by: river-song 16 Feb 2021, 23:03
https://realpython.com/python-pass-by-reference/#:~:text=Does%20this%20mean%20Python%20passes,by%20value%2C%20but%20by%20assignment.

მოკლედ პითონი ბევრად ჩახლართულია ვიდრე ერთი შეხედვით ჩანს user.gif

Posted by: Lilith 18 Feb 2021, 05:46
river-song
QUOTE
მოკლედ პითონი ბევრად ჩახლართულია ვიდრე ერთი შეხედვით ჩანს

yes.gif თუმცა აქვე უნდა ავღნიშნო რომ შემავალი ცვლადის ასე ცვლილება ზოგადად ცუდი პრაქტიკაა (პითონში) და ყოველთვის სჯობს ახალი მნიშვნელობის return-ში დაბრუნება. მითუმეტეს პითონს არ აქვს პრობლემა შეგიძლია ცხრა ცვლადი ერთდროულად დააბრუნო და ცხრავეს ერთდროულად მიანიჭო ახალი მნიშვნელობა up.gif
* * *
Essiittaaa
CODE

def binarymaker(number):
  first = number % 2
  answer = ""
  while number != 1:
      second = number // 2    # ამ ცვლადის გარეშე თუ შეგიძლია იგივე დაწერო?
      ans = number % 2        # ამის გარეშეც?
      number = second
      answer += str(ans)
  answer += str(first)
  answer = answer[::-1]

  return answer
print(binarymaker(int(input("enter number: "))))

Posted by: Essiittaaa 18 Feb 2021, 15:51
Lilith
მაგ ამოცანას დავუბრუნდები და ვეცდები გავცე მაგ კითხვებს პასუხი.


მანამდე რეკურსიულ მეთოდს შევეჯახე, რომელსაც ცოტა ვერ გავუგე, ანუ იდეა გასაგებია ყველაფერი, მაგრამ თვითონ პითონის ჩანაწერს ვერ ვიგებ რაღაცნაირად და ისეთი ტიპი ვარ, თუ ბოლომდე ვერ გავიგე რაღაც ვერ ვიმახსოვრებ მერე კარგად და ეს რეკურსიული მეთოდი როგორც მივხვდი ძაან კარგი რამეა.

მოკლედ ასეთია კოდი:
CODE

def mult(a, b):
   if b == 1:
       return a
   else:
       return a + mult(a, b-1)   #ამ ნაწილს ვერ ვიგებ, მაგალითად a = 5, b = 4.

ამ შემთხვევაში ხო უნდა გამოიტანოს ეკრანზე: 5 + 5, 3 და ა.შ სანამ ბ არ გახდება 1
ყოველშემთხვევაში მე ვერ ვიგებ რატო გამოაქვს 5 + 5 * 3 და ა.შ და იქნებ დამეხმაროთ ამ ნაწილში :(


* * *
რეთარნში ერთზე მეტი მნიშვნელობა ტუპლი ყოფილა, აქამდე როგორ არ ვიცოდი facepalm.gif

მორჩა გავიგე ეს რაც დავწერე

Posted by: Datvlas-vin-gtxovs 21 Feb 2021, 10:54
PHP ზე მომიწია დაბრუნება ცოტა ხნით
რო იცოდეთ რას გავს facepalm.gif

პითონის მერე ყველა მახინჯი ენაა. თან გაუმართავია biggrin.gif

CODE
-- პითონი --
num = 7
print(num)


-- PHP --
$num = 7;
echo $num;

Posted by: Essiittaaa 21 Feb 2021, 17:48
Datvlas-vin-gtxovs
საქართველოში ხო php-ზე უფრო დიდი მოთხოვნაა?

Posted by: river-song 21 Feb 2021, 18:10
Datvlas-vin-gtxovs
QUOTE
PHP ზე მომიწია დაბრუნება ცოტა ხნით

მე კიდე მაგრა მევასება ცვლადების წინ დოლარის ნიშანი დდ


https://www.tutorialspoint.com/str-vs-repr-in-python#:~:text=Now%20if%20you%20go%20by,string%20representation%20of%20an%20object.

კიდე ერთი საინტერესო რამე წავიკითხე პითონზე

__str__
__repr__

ამათ შორის განსხვავება biggrin.gif

Posted by: Essiittaaa 22 Feb 2021, 14:59
მაქვს ორი ტუპლი, მაგალითად:

CODE

a = (7,8,9,10,11)
c = (1,2,3)


მინდა რომ ლუპით დავუარო ორივეს და ინფუთით მიცემული რიცხვი თუა რომელიმეში გამომიტანოს რომელშია.

CODE

b =input("enter number: ")
for i in a,c:
   if i == b in a:
       print(i)
   elif i == b in c:
       print(i)


ასეთი რამე მინდა დაახლოებით, საერთოდ თუა შესაძლებელი ლუპით ასე ბოდიალი?

სტექოვერფლოუზე ვნახე რამდენიმე მაგალითი მაგრამ ჩემსას არ ემთხვევა. იქ i,j-ს იყენებენ

Posted by: techademy 22 Feb 2021, 15:26
Essiittaaa
1. როცა ინფუთად ინტს ელი, ჩასვი ეგ ინფუთი ინტ-ში. wrap input with int: b = int(input("enter number: "))

ამ შეთხვევაში სათითაო ტუპლზე იმუშავებდა, მაგრამ ორივე ტუპლი რომ გიწერია ერთად for ლუპში არ გამოდის.
CODE

for i in a,c:
   print(i)

ეს არ შვება იმას რასაც შენი ელი.
ეს დაგიწერს მთლიან ტუპლს და არა სათითაო ელემენტს. დატესტე

ახლა უცებ ასეთი გამოსავალი ვიპოვე:

CODE

a = (7,8,9,10,11)
c = (1,2,3)

b = int(input("enter number: "))
for i in tuple(set(a+c)):
   #print(i)
   if i == b in a:
       print(b, "is in tuple a:", a)
   elif i == b in c:
       print(b, "is in tuple c:", c)


print-იც გადავაკეთე, შენ ტუპლის ცოდნა გაინტერესებდა ხომ? print(i) უბრალოდ b-ს ბეჭდავდა და არა იმ ტუპლს, რომელშიც იპოვე

testrun:

CODE

enter number: 2
2 is in tuple c: (1, 2, 3)


CODE

enter number: 10
10 is in tuple a: (7, 8, 9, 10, 11)

Posted by: DoomDev 22 Feb 2021, 15:26
CODE

a = (7,8,9,10,11)
c = (1,2,3)

b =input("enter number: ")

def includes(x, a, b):
   if x in a or x in b:
       return x
   else:
       return "Tuple Does not contains %s" % x

includes(b,a,c)


ლუპი აღარ გჭირდება შეამოწმებ უბრალოდ თუ შეიცავ ა || ბ და დააბრუნებ ინპუთს

Posted by: Essiittaaa 22 Feb 2021, 16:11
techademy
მადლობა ასეთი კარგი ახსნისთვის, გამომადგა, სულ ვფიქრობდი ნეტა სეტი რაში გამომადგება თქო და აი თურმე :დ

QUOTE
http://techademy.ge/ - უფასო საგანმანათლებლო პლატფორმა

გადავხედე და საინტერესოა, იმედია კიდე უფრო განავითარებ, წარმატებები.


DoomDev
რეალურად ინფუთი რომელ ტუპლშია ეგეც მაინტერესებს, ჩემ მაგალითში ცუდად ავხსენი, მაგრამ ეს ამოხსნა საკმაოდ საინტერესოა და სხვა შემთხვევებში გამოვიყენებ.

მადლობა დიდი რომ არ დაიზარე და ახალი მეთოდი მანახე.

Posted by: DoomDev 22 Feb 2021, 17:24
Essiittaaa

ჩემი ბრალია არ წავიკითხე კარგად
როგორც მივხვდი ის tuple გინდა დააბრუნო რომელიც input იდან მიღებულ ნამბერს შეიცავს
თუმცა ლუპის აზრს ვერ მივხვდი აქ :/

CODE

def includes(x, a, b):
   if x in a:
       return "a=%s tuple contains %s" % (a,x)
   elif x in b:
       return "b=%s tuple contains %s" % (a,x)
   elif x in a and x in b:
       return "a=%s and b=%s both contains %s" % (a,b,x)
   else:
       return "Tuples does not contains %s" % x



Posted by: პატრიოტი 22 Feb 2021, 18:40
ფუნქციების გამოყენებით დაწერეთ პროგრამა, რომელიც მომხმარებლისგან მიიღებს ერთ დიდ მთელ რიცხვს და ეკრანზე გამოიტანს მიღებული რიცხვიდან ამოკრეფილ კენტი ან ლუწი რიცხვების ერთიან არითმეტიკულ მნიშვნელობას.

ამის ამოხსნას ხომ ვერ მეტყვით ?

Posted by: DoomDev 22 Feb 2021, 20:10
პატრიოტი

CODE

def even(n):
 return [i for i in range(1, n + 1) if i%2==0]

def odd(n):
 return [i for i in range(1, n + 1) if i%2!=0]



or


CODE

def even(n):
   return list(filter(lambda x: (x % 2 == 0), range(1,n + 1)))

def odd(n):
   return list(filter(lambda x: (x % 2 != 0), range(1,n + 1)))


CODE

even(10) # => [2, 4, 6, 8, 10]
odd(10) # => [1, 3, 5, 7, 9]

Posted by: Essiittaaa 22 Feb 2021, 20:17
DoomDev
%s ზუსტად ვერ დავამუღამე რას აკეთებს, სტექზე გადავხედე და რასაც მივხვდი ჩვენ მიერ გამოყენებულ ცვლადის სტრინგს გვიბრუნებს?

Posted by: river-song 22 Feb 2021, 20:24
Essiittaaa
QUOTE
%s ზუსტად ვერ დავამუღამე რას აკეთებს, სტექზე გადავხედე და რასაც მივხვდი ჩვენ მიერ გამოყენებულ ცვლადის სტრინგს გვიბრუნებს?

https://realpython.com/python-string-formatting/
აქ ნახე, კარგად წერია.

Posted by: Datvlas-vin-gtxovs 22 Feb 2021, 21:01
Essiittaaa
QUOTE
%s ზუსტად ვერ დავამუღამე რას აკეთებს

უნაშთოდ გაყოფის ოპერატორია

Posted by: DoomDev 22 Feb 2021, 21:24
სტრინგის ფორმატირებისთვისაა რა % ნიშანი ეუბნება რომ მიიღებს რაღაც ფორმატის დატას
მაგალითად
print("%s world" % "hello")

როგორც ხედავ მარჯვენა მხრიდან იღებს სტრინგს
მრავალი პლეისჰოლდერი თუ გავს მაგალითად სტრინგების უნდა ჩაწერო tuple ს სახით
print("%s %s python" % ("I", "Love"))
თანმიმდევრობით მიიღებს მარჯვნიდან მიღებულ დატას
მაგალითად
%s პლეისჰოლდერი ნიშნავს რომ ელოდება სტრინგს s(string)
%c მაგალითად ნიშნავს რომ ელოდება ერთ ასოს c(character)
%i - %d კიდევ ნიშნავს რომ ელოდება მთელ რიცხვს i(integer) d(decimal integer)

სხვა დანარჩენი ფორმატების განმარტება სქრინზეა

პ.ს. შეიძლება აკადემიური განმარტება არ არის ჩემს ენაზე გადმოვეცი ¯\_(ツ)_/¯

user posted image

Posted by: პატრიოტი 22 Feb 2021, 21:27

DoomDev
შეგიძლია უფრო კარგად ამიხსნა ? დამწყები ვარ და ცოტა მიჭირს გაზრება smile.gif)

მარტო მაგ ორი ფუნქციით ხო არ გაეშვება ? !

Posted by: techademy 22 Feb 2021, 22:55
Essiittaaa
QUOTE
გადავხედე და საინტერესოა, იმედია კიდე უფრო განავითარებ, წარმატებები.


გაიხარე, დიდი მადლობა


პატრიოტი
მე საერთოდ ვერ მივხვდი მისი პოსტი შენს კითხვას თუ პასუხობს, იმიტომ რომ მე შენი კითხვა ვერ მივხვდი მთლად.
შეგიძლია მაგალითი დადო? ანუ დავუშვათ n = 100, რა გინდა რომ ფუნქციამ დაგიბრუნოს?
QUOTE
ეკრანზე გამოიტანს მიღებული რიცხვიდან ამოკრეფილ კენტი ან ლუწი რიცხვების ერთიან არითმეტიკულ მნიშვნელობას.

ვერ მივხვდი რა არის ერთიანი არითმეტიკული მნიშნვნელობა


რაც დაწერა doomdev-მა ეგ ფუნქცია გიბრუნებს 1-დან n-მდე ყველა კენტ/ლუწ რიცხვს.

QUOTE
შეგიძლია უფრო კარგად ამიხსნა ? დამწყები ვარ და ცოტა მიჭირს გაზრება )

ძალიან კომპაქტურად დაგიწერა DoomDev-მა, რაც ასე ვთქვათ "პითონური სტილია".
შეგვიძლიათ ცოტა გავშალოთ ეგ ფუნქცია.




CODE

def even(n):
   result = [] # ცარიელი ლისტის ინიზიალიზაცია, აქ შევინახავთ საბოლოო შედეგს
   for i in range(1,n+1): # განვიხილოთ ყველა რიცხვი 1-დან n-ის ჩათვლით
       if i % 2 == 0: # თუ რიცხვი 2-ზე უნაშთოდ იყოფა, ეს იმას ნიშნავს, რომ იგი ლუწია
           result.append(i) # დავამატოთ ლისტში

   return result



ამის მოკლე ვერსიაა რაც დევმა დაწერა
CODE
return [i for i in range(1, n + 1) if i%2==0]

return-ით პირდაპირ შეგიძლია ლისტის შექმნა და მისი დაბრუნება, ანუ ზედმეტი ლისტის ინიზიალიზაცია და აპენდი არ გვჭირდება.
ორივე ფუნქცია იდენტურია ახლა - ფუნქციონალურობით

Posted by: DoomDev 22 Feb 2021, 23:10
QUOTE

დამწყები ვარ


მეც yes.gif თქვენთან ერთად ვსწავლობ კითხვა პასუხის რეჟიმში

QUOTE

შეგიძლია უფრო კარგად ამიხსნა


შევეცდები
მოკლედ ამოცანა გვეუბნება რომ მომხმარებლისგან მიიღებ რიცხვსო და ამ რიცხვიდან ამოკრიფე კენტი ან ლუწ რიცხვები და ეკრანზე გამოიტანეო

ლოგიკურად 1 დან მომხმარებლის მიერ შეყვანილ ციფრამდე n ნამდე უნდა გავაკეთო loop და ამ ლუპში ყოველი ციფრი შევამოწმო კენტია თუ ლუწი
გრძლად ჩავწეროთ უფრო თვალსაჩინო რომ იყოს რა ხდება
loop ებს ზე და ასეთ დეტალებზე არ შევალ
მოდი ასე გავაკეთოთ ორი ფუნქციის განცალკევების ნაცვლად მომხმარებელმა უთხრას კენტი სჭირდება თუ ლუწი, გადმოწოდებული ციფრს შორის რეინჯში რისთვისაც ფუნქციას ჩავაწვდი ორ არგუმენტს ერთი იქნება ციფრი მეორე მანისნებელი ლუწი უნდა თუ კენტი


CODE

def evenOdd(x, n):
   # x არის კენტი/ლუწი  მომხმარებლის მოთხოვნა
   even = []
   odd  = []
   
   for num in range(1, n + 1):
       # პირობაში თუ შემოსული ციფრი ლუწია
       if(num % 2 == 0):
            # დაამატე ლუწების ლისტში
           even.append(num)
       else:
           # სხვა შემთხვევაში დაამატე კენტების ლისტში
           odd.append(num)
  # result აქ ვაკეთებ შედარებას თუ მომხმარებლის  მიერ მოთხოვნილი x არის ლუწი მივაწოდოთ ლუწი  ციფრებიბს ლისტი
  # სხვა შემთხვევაში კენტი(თუ ლუწი არ არის ლოგიკურად კენტი იქნება ციფრი და აღარ გვჭირდება დაკონკრეტება  x % 2 != 0)
   result = x % 2 == 0 and even or odd
   return result


მომხმარებლისგან მოდის ორი ციფრი პირველი x = 2 ანუ ითხოვს ლუწ ციფრებს
მეორე ციფრი n = 10 ამ ციფრების რეინჯში უნდა ამოვიღოთ ლუწი რიცხვები
evenOdd(2, 10) # => [2, 4, 6, 8, 10]

თუ ვეტყვით რომ კენტი მჭიდება და პირველ არგუმენტად გადავცემთ ნებისმიერ კენტ ციფრს
დაგვიბრუნებს კენტი რიცხვების ლისტს
evenOdd(1, 10) # =>[1, 3, 5, 7, 9]



თუმცა ამოცანა გეუბნება რომ ეკრანზე გამოიტანე ან ლუწი ან კენტიო
ამიტომ გავაკეთე თავდაპირველად ორი ცალკე ფუნქცია რომელიც ცალცაკლე თვლიდა კენტს და ლუწს
გრძლად რომ ჩავწეროთ და ეკრანზე გამოვიტანო during ლუპში

CODE

def even(n):
   for x in range(1, n + 1):
       if(x % 2 == 0):
           print(x)
                       
even(10)


CODE

def odd(n):
   for x in range(1, n + 1):
       if(x % 2 != 0):
           print(x)
           
odd(10)


შესაბამისად რომელიც დაგჭირდება იმ ფუნქციას გამოიყენებ
მომხმარებლისგან მონაცმების შესაყვანად შეგიძლია გამოიყენი https://www.w3schools.com/python/ref_func_input.asp ფუნქცია
და ფუნქციას აქედან ჩააწოდო არგუმენტი მაგალითად

CODE

y = int(input())

def even(n):
   for x in range(1, n + 1):
       if(x % 2 == 0):
           print(x)

even(y)


თავდაპირველ მაგალითში ასე ჩავაწვდით
CODE

a, b = input("Enter a two value: ").split()
def evenOdd(x, n):
   even = []
   odd  = []
   for num in range(1, n + 1):
       if(num % 2 == 0):
           even.append(num)
       else:
           odd.append(num)
   result = x % 2 == 0 and even or odd
   return result

evenOdd(int(a), int(b))


როდესაც კოდს გაუშვებ მოგთხოვს 2 ციფრის შეყვანას და შეიყვან ინტერვალებით მაგალითად
Enter a two value: 2 10
მაგალითი https://repl.it/@DoIt1/evenOdd

პ.ს არ ვარ კარგი ორატორი მაგრამ თუ რამე დასვი კითხვა და ....

პ.პ.ს განუმარტიათ სანამ ვაკაკუნებდი up.gif

Posted by: პატრიოტი 23 Feb 2021, 14:10
techademy
მაგალითი შეიძლება იყოს მომხმარებელმა შეიტანა მთელი რიცხვი 147852 და თუ ირჩევს ლუწებს მაშინ, პროგრამა გვიბრუნებს 482

DoomDev
ამ ამოცანში მგონი არ გვჭირდება ორი რიცხვის შეტანა რადგან , ერთი მტელი რიცხვი უნდა შვიტანოთთ და იქიდან ამოკრიფოს ან ლუწები ან კენტები

Posted by: techademy 23 Feb 2021, 14:37
პატრიოტი
QUOTE
მაგალითი შეიძლება იყოს მომხმარებელმა შეიტანა მთელი რიცხვი 147852 და თუ ირჩევს ლუწებს მაშინ, პროგრამა გვიბრუნებს 482

აჰა ახლა გასაგებია up.gif
რიცხვი (ანუ ინტეჯერი) შეგვიძლია ტექსტად (ანუ სტრინგად) გადავაკეთოთ და სათითაო ქარაქტერზე (character) ოპერაციები ჩავატაროთ.
მაგ:
CODE

n = 147852
n_str = str(n) # გადავიყვანოთ ინტეჯერი სტრინგ ფორმატში
n_digits = [] # აქ შევინახავთ რიცხვის თითოეულ ცირფს

for i in n_str:
   n_digits.append(int(i)) # სტრინგის თითოეული ქარაქტერი დავამატოთ ციფრის სახით (int) სიაში

print(n_digits)

# შეგვიძლია ორი ახალი ლისტში შევქმნათ, ერთი ლუწებისთვის, ერთი კენტებისთვის
# შევამოწმოთ n_digits ლისტის თითოეული ელემენტი: Odd? Even? და დავამატოთ შესაბამის ლისტში


# ინტეჯერ ლისტი გადავაქციოთ ისევ ერთ რიცხვად
# მაგალითი:
integers = [1, 2, 3]

strings = [str(integer) for integer in integers]
a_string = "".join(strings)
an_integer = int(a_string)

print(an_integer)



შეგიძლია შუაში კომენტარებით რაც მიწერია ის ეტაპები შეავსო კოდით ?
თუ არადა დაწერე კითხვები

ეს ყველაფერი უფრო მოკლედ შეიძლება გაკეთდეს, უბრალოდ მაქსიმალურად გავშალე კოდი, ჩემი აზრით დამწყებისთვის ასე სჯობს, დეტალურად განიხილავ ყველა ნაბიჯს და უფრო კარგად ხვდები თუ სად რა ხდება.

Posted by: პატრიოტი 23 Feb 2021, 15:34
techademy
შუა კომენტარებს რაც შეეხება
ანუ ეხლა როგორც ვხვდები ცალკე ფუნქციები შევქმნა ლუწის და კენტის და ამ ფუნქიციაში შევქმნა ორი ცარიელი ლისტი სდაც დაემატება ეგ რიცხვები ?

Posted by: techademy 23 Feb 2021, 15:44
პატრიოტი
კი შეგიძლია სათითაო ფუნქციები შემქნა, მაგრამ ასევე შესაძლებელია ეს მთელი კოდი ერთ ფუნქციაში ჩასვა და იმის მიხედვით თუ იუზერს ლუწი თუ კენტი უნდა, შესაბამისი ლისტიდან მიღებული რიცხვი დაუბრუნო.

CODE

def myfuncti0n(n):
   n_str = str(n) # გადავიყვანოთ ინტეჯერი სტრინგ ფორმატში
   n_digits = [] # აქ შევინახავთ რიცხვის თითოეულ ცირფს

   for i in n_str:
       n_digits.append(int(i)) # სტრინგის თითოეული ქარაქტერი დავამატოთ ციფრის სახით (int) სიაში

   # შეგვიძლია ორი ახალი ლისტში შევქმნათ, ერთი ლუწებისთვის, ერთი კენტებისთვის
   odd_list = []
   even_list = []
   # შევამოწმოთ n_digits ლისტის თითოეული ელემენტი: Odd? Even? და დავამატოთ შესაბამის ლისტში

   # ინტეჯერ ლისტი გადავაქციოთ ისევ ერთ რიცხვად

   # მაგალითი:
   integers = [1, 2, 3]

   strings = [str(integer) for integer in integers]
   a_string = "".join(strings)
   an_integer = int(a_string)

   user_input = input("Odd or Even? ")

   if user_input == "Odd":
       return odd_list
   elif user_input == "Even":
       return even_list
   else:
       return "Wrong Input"


print(myfuncti0n(147852))



ასევე შეგიძლია ფუნქცია არგუმენტის გარეშე დაწერო და n-იც ინფუთით მიიღო იუზერისგან

პ.ს ფორუმი რატომღაც ფუნქციონ-ში ო-ს 0-ით ანაცვლებს. მაგას მიაქციე ყურადღება smile.gif

Posted by: DoomDev 23 Feb 2021, 16:05
პატრიოტი

QUOTE
ამ ამოცანში მგონი არ გვჭირდება ორი რიცხვის შეტანა რადგან , ერთი მტელი რიცხვი უნდა შვიტანოთთ და იქიდან ამოკრიფოს ან ლუწები ან კენტები


yes.gif მართალია
უბრალოდ მაინც პრაქტიკობს და სხვა განვითარება შევთავაზე(სავარჯიშოდ)
მომავალში საკუთარი ინიციატვით თუ გააკეთებს მსგავს "გადახვევებს" განვითარდება და დამოუკიდებლად მუშაობას მიეჩვევა imho


QUOTE
რიცხვების ერთიან არითმეტიკულ მნიშვნელობას.


QUOTE
მაგალითი შეიძლება იყოს მომხმარებელმა შეიტანა მთელი რიცხვი 147852 და თუ ირჩევს ლუწებს მაშინ, პროგრამა გვიბრუნებს 482


up.gif მე ვერ გავიაზრე თავიდან

Posted by: Essiittaaa 26 Feb 2021, 15:13
river-song
DoomDev
მადლობა დიდი.





რამდენად საჭიროა numpy-ს ან pandas-ს ცოდნა სრულფასოვანი საიტის ან პროგრამის დასაწერად?

რამდენად არის ამ ორ ფრეიმვორკზე საქართველოში მოთხოვნა?

ღირს დროის ხარჯვად თუ არა?

Posted by: river-song 26 Feb 2021, 21:08
Essiittaaa

QUOTE
რამდენად საჭიროა numpy-ს ან pandas-ს ცოდნა სრულფასოვანი საიტის ან პროგრამის დასაწერად?

რამდენად არის ამ ორ ფრეიმვორკზე საქართველოში მოთხოვნა?

ღირს დროის ხარჯვად თუ არა?

არა ფრეიმვორკები არაა ეგენი, ბიბლიოთეკებია, მონაცემთა ანალიზისთვის გამოიყენებენ , დეველოპერს არ ჭირდება არანაირად.

Posted by: Essiittaaa 26 Feb 2021, 21:59
river-song
ხო გადავიკითხე ფორუმები

Posted by: Essiittaaa 28 Feb 2021, 21:37
dictionary-ს value არის კიდე სხვა dictionary და ამ dictionary-ს value-ში მინდა რამე ჩავამატო, ვეჩალიჩები მაგრამ ჯერ ვერ მივედი ჭეშმარიტებამდე, თქვენ თუ იცით რამე მარტივი ხერხი სიამოვნებით მივიღებ რჩევას


მაგალითი:

myDict = {key:{key:value}}

ნუ იდეაში მე value-ში კიდე სხვა dictionary მაქვს და იმის value-ში მინდა ჩამატება მაგრამ ესეც საკმარისი იქნება givi.gif

Posted by: techademy 28 Feb 2021, 22:02
Essiittaaa

ზუსტად ვერ მივხვდი რისი გაკეთება გინდა.
აქედან რომელიმე ვარიანტი ახლოს მაინცაა? biggrin.gif
თუ არადა რამე კონკრეტული მაგალითი დაწერე, თავის ინფუთ აუთფუთიანად, რომ ვიცოდეთ ზუსტად რას ელი
CODE


people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
         2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}

# Nested dictionary change value
people[1]['name'] = 'bob'
print(people)

# Nested dictionary update/add value
p3 = {3: {'name': 'Alice', 'age': '25', 'sex': 'Female'}}
people[1].update(p3)
print(people)


# რამდენიმე value-ს ქონა ლისტის მეშვეობით

company = {}
company[1] = {1: ['Google']}
company[1][1].append('Apple')
print(company)



Posted by: Essiittaaa 28 Feb 2021, 22:22
techademy

CODE


dictionary = {1:{2:{3:{4:"hi"}}}}
# მეოთხე დიქშენარიში ანუ სადაც ჰაი მიწერია მინდა კიდე რამე ჩავამატო

Posted by: techademy 28 Feb 2021, 22:32
Essiittaaa
CODE


dictionary = {1:{2:{3:{4: "hi"}}}}

dictionary[1][2][3][5] = "bye"

print(dictionary) # -> {1: {2: {3: {4: 'hi', 5: 'bye'}}}}



rolleyes.gif

Posted by: პატრიოტი 16 Mar 2021, 20:33
დაწერეთ პროგრამა რომელიც მომხმარებელს სიაში შეატანინებს მინიმუმ 6 რიცხვს.
პროგრამამ მიღებული სია უნდა დაამუშაოს და თითო სტრიქონზე ჩამოწეროს განმეორდა თუ არა მიმდინარე რიცხვი მანამდე. თუ განმეორდა დაიწეროს “YES”, თუ არა - “NO”.

მაგალითად:
1 ნაბიჯი: მომხმარებელს შეაქვს მინიმუმ 6 რიცხვი რომელიც ინახება მასივში, ვთქვათ შეტანილია [ 1, 2, 1, 1, 4, 2 ]
2 ნაბიჯი: პროგრამა მიღებული სიის დაამუშავები შემდეგ ეკრანზე გამოიტანს პასუხებს შემდეგი სახით:
NO
NO
YES
YES
NO
YES


ამ ამოცანაზე ხომ ვერ მეტყვით რამეს

Posted by: techademy 16 Mar 2021, 21:28
პატრიოტი
CODE

def checkDuplicates():

   numbers = []
   # ამ ლუპით მივიღებთ 6 რიცხვს და შევინახავთ ლისტში
   # ინფუთის ინტერფეისი შეგიძლია გააუმჯობესო როგორც გინდა, 6-ჯერ ერთიდაიგივე ტექსტით რიცხვის კითხვა არაა მთლად ლამაზი, მაგრამ მუშაობს
   while len(numbers) < 6:
       user_input = int(input("Please enter a number: "))
       numbers.append(user_input)

   print("NO") # პირველი ყველა ვარიანტშია ნოუ იქნება

   # ამ ლუპით ვნახავთ თუ 1-i ინდექსის მონაკვეთში მეორდება რიცხვი (0 ინდექსი განვიხილეთ უკვე ყოველთვის ნოუ იქნება)
   # თუ კი იეს, თუ არადა ნოუ.
   for i in range(1,len(numbers)):
       if numbers[i] in numbers[0:i]:
           print("YES")
       else:
           print("NO")


checkDuplicates()



Posted by: Essiittaaa 17 Mar 2021, 21:17
კონკრეტულად პითონის კლასებზე ხო ვერ მირჩევთ რამე კარგ წიგნს სადაც დეტალურად იქნება ყველაფერი განხილული?

Posted by: Essiittaaa 2 May 2021, 14:49
CODE

class Person:
def __init__(self, name, age):
self.__name = name # ვაყენებთ სახელს
self.__age = age # ვაყენებთ ასაკს
def set_age(self, age):
if age in range(1, 100):
self.__age = age
else:
print("დაუშვებელი ასაკი")
def get_age(self):
return self.__age
def get_name(self):
return self.__name
def display_info(self):
print("სახელი:",self.__name, "\tასაკი:", self.__age)
tom = Person("თომა", 23)
tom.__age = 43 # age ატრიბუტი არ შეიცვლება                 <<< ვერ ვხვდები ეს " .__ " რას ნიშნავს?
tom.display_info() # სახელი: თომა ასაკი: 23
tom.set_age(-3486) # დაუშვებელი ასაკი
tom.set_age(25)
tom.display_info() # სახელი: თომა ასაკი: 25


Posted by: Essiittaaa 15 Jul 2021, 17:56
გამარჯობა მეგობრებო, ერთ-ერთ კომპანიაში მინდა დავსაქმდე დ გამომიგზავნეს ამოცანები ამოსახსნელად.

ერთ-ერთზე მაქვს კითხვა

გვაქვს teacher ცხრილი, რომელსაც აქვს შემდეგი მახასიათებლები: სახელი, გვარი, სქესი, საგანი. გვაქვს pupil ცხრილი, რომელსაც აქვს შემდეგი მახასიათებლები: სახელი, გვარი, სქესი, კლასი. ააგეთ ნებისმიერ რელაციურ ბაზაში ისეთი დამოკიდებულება, რომელიც საშუალებას მოგვცემს, რომ მასწავლებელმა ასწავლოს რამოდენიმე მოსწავლეს და ამავდროულად მოსწავლეს ჰყავდეს რამდენიმე მასწავლებელი (როგორც რეალურ ცხოვრებაში).


1. დაწერეთ SQL რომელიც ააგებს შესაბამის table-ებს.

2. დაწერეთ SQL რომელიც დააბრუნებს ყველა მასწავლებელს, რომელიც ასწავლის მოსწავლეს, რომელის სახელია: “გიორგი”.

დაწერეთ SQL ვერ მივხვდი რას ნიშნავს, ანუ პითონში შევანახინო პროსტა ხო?

Posted by: ac1001 15 Jul 2021, 18:58
Essiittaaa

CODE

MS Sql Server გაუშვი, შემქენი რამე ბაზა და ეს სკრიპტია:


CREATE TABLE [dbo].[Pupil](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Firstname] [nvarchar](50) NOT NULL,
[Lastname] [nvarchar](50) NOT NULL,
[IsMale] [bit] NOT NULL,
[Class] [varchar](50) NOT NULL,
PRIMARY KEY (ID))

CREATE TABLE [dbo].[Teacher](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Firstname] [nvarchar](50) NOT NULL,
[Lastname] [nvarchar](50) NOT NULL,
[IsMale] [bit] NOT NULL,
[Subject] [nvarchar](50) NOT NULL,
PRIMARY KEY (ID))


CREATE TABLE [dbo].[TeacherToPupil](
[Id] [int] IDENTITY(1,1) NOT NULL,
[TeacherId] [int] NOT NULL,
[PupilId] [int] NOT NULL,
 PRIMARY KEY (ID))

ALTER TABLE [dbo].[TeacherToPupil]  WITH CHECK ADD  CONSTRAINT [FK_TeacherToPupil_Pupil] FOREIGN KEY([PupilId])
REFERENCES [dbo].[Pupil] ([Id])

ALTER TABLE [dbo].[TeacherToPupil] CHECK CONSTRAINT [FK_TeacherToPupil_Pupil]

ALTER TABLE [dbo].[TeacherToPupil]  WITH CHECK ADD  CONSTRAINT [FK_TeacherToPupil_Teacher] FOREIGN KEY([TeacherId])
REFERENCES [dbo].[Teacher] ([Id])

ALTER TABLE [dbo].[TeacherToPupil] CHECK CONSTRAINT [FK_TeacherToPupil_Teacher]


--ამოღება
SELECT Teacher.*
FROM Teacher
JOIN TeacherToPupil
 ON Teacher.Id = TeacherToPupil.TeacherId
JOIN Pupil
 ON Pupil.Id = TeacherToPupil.PupilId
 where Pupil.Firstname = N'გიორგი'

Posted by: Essiittaaa 16 Jul 2021, 15:58
ac1001
დიდი მადლობა

ანუ რეალურად SQL-ის ცოდნას ითხოვენ, რაც არ მიუთითებიათ ვაკანსიაში drug.gif

Posted by: ac1001 16 Jul 2021, 16:25
Essiittaaa
დეველოპერმა სქლიც უნდა იცოდე სხვა გზა არ არის.

Posted by: Essiittaaa 16 Jul 2021, 17:20
ac1001
ისედაც ვაპირებ სქლ-ის სწავლას, ბევრი დრო არც სჭირდება როგორც ვიცი, მაგრამ python intern-ზე რომ ვაგზავნი cv-ს მოთხოვნებში ხო უნდა ეწეროს sql, django და ა.შ ჯანგო კიდე კაი ვიცი ასე თუ ისე, სქლ-საც ჩავუჯდები ხვალამდე მაქვს დრო და რაღაც დონეზე გავერკვევი ალბათ

Posted by: ac1001 16 Jul 2021, 17:32
Essiittaaa
კი მარტივია. პროგრამირების მერე სქლზე რო მიხვალ ძალიან გაგიადვილდება.

Posted by: Essiittaaa 17 Jul 2021, 00:52
ac1001
user posted image

მიერორებს და ეგ კოდი ძველი ვერსიისთვის ხო არაა?
* * *
user posted image

აქ რომ გავაკეთე გაკეთდაო დამიწერა და ვერ ვპოულობ სად არის

Posted by: ac1001 17 Jul 2021, 01:12
Essiittaaa
MS Sql Server-ის კოდია.
მაღლა Master ბაზა გაქ მონიშნული და იმიტომ. მასტერში შექმნა. ეგ სისტემური ბაზაა. მანდ არ უნდა შეგექმნა. მასტერის მაგივრად შენი ახალი შექმნილი ბაზის სახელი აირჩიე (როცა ეგ სკირპტის ფანჯარა გაქ ღია) და მერე მიეცი Execute. და შენს ბაზაში შექმნის

Posted by: Essiittaaa 17 Jul 2021, 01:21
ac1001
მართალი ხარ, შეიქმნა.

Posted by: lepori 11 Sep 2021, 11:49
ერთიცალი კითვა მაქვს
ვთქვათ გვაქვს ასეთი რამე:

CODE
name = 'lepori'
print(f"My name is {name}")
print("My name is %s" %(name))


ეს ორივე ერთიდაიგივეს ბეჭდავს>>
CODE
My name is lepori
My name is lepori

ჰოდა>>>
რამე პრინციპული სხვაობა არის მათ შორის?

Posted by: techademy 11 Sep 2021, 14:20
lepori
იდეაში არაფერი.

ორივე შეგიძლია გამოიყენო, ისევე როგორც str.format
ეს სტატია ნახე თუ გინდა, არაა დიდი, მეოთხე ვარიანტსაც ნახავ კონკრეტული შემთხვევებისთვის: https://realpython.com/python-string-formatting/

მოკლედ: 3.6+ ვერსიებში ყველაზე მიღებული და რეკომენდირებულია f-strings, პირველი ვარიანტი შენს შემთხვევაში. უფრო ადვილად წასაკითხი/დასაწერი და სუფთაცაა.

პ.ს. f-string სწრაფიცაა

Posted by: lepori 11 Sep 2021, 16:38
techademy
მადლობა
საინტერესო სტატია იყო up.gif
სიღრმეებშ ჩაძვრომა დამეზარა, მაგრამ როგორც გავიგე ფ-სთრინგს თუ გამოვიყენებ კაია, მინიმუმ არც არაფერი დაშავდება - ჰოდა გამოვიყენებ biggrin.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)