Эволюция Python-программиста

    Начинающий


    1. def factorial(x):
    2.     if x == 0:
    3.         return 1
    4.     else:
    5.         return x * factorial(x - 1)
    6. print factorial(6)


    Программирующий уже год (Ранее изучавший Pascal)


    1. def factorial(x):
    2.     result = 1
    3.     i = 2
    4.     while i <= x:
    5.         result = result * i
    6.         i = i + 1
    7.     return result
    8. print factorial(6)



    Программирующий уже год (Ранее изучавший C)


    1. def fact(x)#{
    2.     result = i = 1;
    3.     while (<= x)#{
    4.         result *= i;
    5.         i += 1;
    6.     #}
    7.     return result;
    8. #}
    9. print(fact(6))


    Программирующий уже год (начитавшийся SICP)


    1. @tailcall
    2. def fact(x, acc=1):
    3.     if (> 1)return (fact((x - 1)(acc * x)))
    4.     else:       return acc
    5. print(fact(6))


    Программирующий уже год на Python (ранее изучавший 1С)


    1. def ObrabotkaObchisleniya():
    2.     // 
    3.     return 0
    4.  
    5. def Soobschit(TekstSoobscheniya):
    6.     print TekstSoobscheniya
    7.  
    8. def Faktorial(Znacheniye):
    9.     return Znacheniye*Faktorial(Znacheniye-1)
    10. Soobschit(Faktorial(6))
    11.  
    12. Sutki = 84000


    Изучающий Python и иногда Brainfuck


    1. import os
    2. def fact(x):
    3.     file = open("code.b"'w')
    4.     file.write(">++++++++++>>>+>+[>>>+[-[<<<<<[+<<<<<]>>[[-]>[<<+>+>-]<[>+<-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>>>>+>+<<<<<<-[>+<-]]]]]]]]]]]>[<+>-]+>>>>>]<<<<<[<<<<<]>>>>>>>[>>>>>]++[-<<<<<]>>>>>>-]+>>>>>]<[>++<-]<<<<[<[>+<-]<<<<]>>[->[-]++++++[<++++++++>-]>>>>]<<<<<[<[>+>+<<-]>.<<<<<]>.>>>>]")
    5.     file.close()
    6.     # todo: implement x parameter
    7.     os.system('/usr/bin/bf code.b')
    8. fact(6)


    Программирующий уже год на Python


    1. def Factorial(x):
    2.     res = 1
    3.     for i in xrange(2, x + 1):
    4.         res *= i
    5.     return res
    6. print Factorial(6)


    Ленивый Python'щик


    1. def fact(x):
    2.     return x > 1 and x * fact(x - 1) or 1
    3. print fact(6)


    Очень ленивый Python'щик


    1. f = lambda x: x and x * f(x - 1) or 1
    2. print f(6)


    Python'щик — эксперт


    1. fact = lambda x: reduce(int.__mul__xrange(2, x + 1)1)
    2. print fact(6)


    Python'щик — хакер


    1. import sys
    2. @tailcall
    3. def fact(x, acc=1):
    4.     if x: return fact(x.__sub__(1), acc.__mul__(x))
    5.     return acc
    6. sys.stdout.write(str(fact(6)) + '\n'


    Программист-эксперт


    1. from c_math import fact
    2. print fact(6)


    Английский программист-эксперт


    1. from c_maths import fact
    2. print fact(6)


    Веб-программист


    1. def factorial(x):
    2.     #-------------------------------------------------
    3.     #--- Сниппет вычисления факториала          ---
    4.     #--- Использовать на свой страх и риск (с) Василий Пупкин 2010 ---
    5.     #-------------------------------------------------
    6.     result = str(1)
    7.     i = 1 #Благодарность за хак Ивану
    8.     while i <= x:
    9.         #result = result * i  #Наверное лучше использовать *=
    10.         #result = str(result * result + i)
    11.            #result = int(result *= i) #??????
    12.         result = str(int(result) * i)
    13.        #result = int(str(result) * i) #фывфываф
    14.         i = i + 1
    15.     return result
    16. print factorial(6)


    Unix-программист


    1. import os
    2. def fact(x):
    3.     os.system('factorial ' + str(x))
    4. fact(6)


    Windows-программист


    1. NULL = None
    2. def CalculateAndPrintFactorialEx(dwNumber,
    3.                                  hOutputDevice,
    4.                                  lpLparam,
    5.                                  lpWparam,
    6.                                  lpsscSecurity,
    7.                                  *dwReserved):
    8.     if lpsscSecurity != NULL:
    9.         return NULL #Not implemented
    10.     dwResult = dwCounter = 1
    11.     while dwCounter <= dwNumber:
    12.         dwResult *= dwCounter
    13.         dwCounter += 1
    14.     hOutputDevice.write(str(dwResult))
    15.     hOutputDevice.write('\n')
    16.     return 1
    17. import sys
    18. CalculateAndPrintFactorialEx(6sys.stdout, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)


    Программист крупной конторы


    1. def new(cls, *args, **kwargs):
    2.     return cls(*args, **kwargs)
    3.  
    4. class Number(object):
    5.     pass
    6.  
    7. class IntegralNumber(int, Number):
    8.     def toInt(self):
    9.         return new (intself)
    10.  
    11. class InternalBase(object):
    12.     def __init__(self, base):
    13.         self.base = base.toInt()
    14.  
    15.     def getBase(self):
    16.         return new (IntegralNumber, self.base)
    17.  
    18. class MathematicsSystem(object):
    19.     def __init__(self, ibase):
    20.         Abstract
    21.  
    22.     @classmethod
    23.     def getInstance(cls, ibase):
    24.         try:
    25.             cls.__instance
    26.         except AttributeError:
    27.             cls.__instance = new (cls, ibase)
    28.         return cls.__instance
    29.  
    30. class StandardMathematicsSystem(MathematicsSystem):
    31.     def __init__(self, ibase):
    32.         if ibase.getBase() !new (IntegralNumber, 2):
    33.             raise NotImplementedError
    34.         self.base = ibase.getBase()
    35.  
    36.     def calculateFactorial(self, target):
    37.         result = new (IntegralNumber, 1)
    38.         i = new (IntegralNumber, 2)
    39.         while i <= target:
    40.             result = result * i
    41.             i = i + new (IntegralNumber, 1)
    42.         return result
    43.  
    44. print StandardMathematicsSystem.getInstance(new (InternalBase, new (IntegralNumber, 2))).calculateFactorial(new (IntegralNumber, 6))


    А к какому типу принадлежишь ты, %username%?

    upd.: Интересно, кто тихо по-подлому карму сливает? Коль имеешь возражение — имей смелость высказать его в комментах.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 38

      +6
      Что-то мне кажется многие будут программистами-экспертами.
      • UFO just landed and posted this here
        +5
        Это шикарно. Я хоть и не программист, но проникся!
          +1
          Пока не дошел до программиста-эксперта думал, что принадлежу к «Программирующим уже год на Python».
            +5
            Угадайте, а это кто? :)

            Func<int, int> fact = x => Enumerable.Range(2, x).Aggregate(1, (i, k) => i * k);
            
            fact(6);
            

            Правильно, программист на C# (ранее в универе писавший на Python)…
              +1
              О… В этом код я себя наконец узнал… :)
              +3
              Спасибо, обновил. :)
                +3
                Так это не питон был :)
                  +18
                  Спасибо, убрал.)
              • UFO just landed and posted this here
                  +3
                  Лично я принадлежу к тому типу, который из всей статьи проникся только кодом на Brainfuck :-)
                    +9
                    За версию Windows-программист особое спс! очень улыбнуло! (это я под впечатлением от курса WinAPI в универе)
                      0
                      А почему у хакера '\n' после вызова функции sys.stdout.write()?
                        0
                        Чтобы «приглашение» выводилось с новой строки
                        ...data...[\n]
                        root@server#
                          +2
                          Не, не зачем '\n', а почему он не внутри скобочек?
                          sys.stdout.write(str+'\n')
                          
                            +1
                            А. Ну вот. Такой вот хакер.
                        0
                        А я начинающий пока. Но буду писать, опираясь на Pascal с именами переменных и функций как 1С и комментариями как у веб-программиста. А когда не буду понимать, как написать, буду использовать BrainFuck… Быть может, вырастет-таки ещё один эксперт. :)
                          +2
                          template<int n>
                          struct Fractal
                          {
                              enum{Value=n * Fractal<n-1>::Value}
                          };

                          template<>
                          struct Fractal
                          {
                              enum{Value=1}
                          };

                          Fractal<5>::Value;

                          А так некий С++'шник.
                            –1
                            def fact(n)
                              (2..n).to_a.inject(1){|a,i| a*i}
                            end
                            
                            p fact(6)
                            

                            Вариант Руби-хакера.

                            <holywar>
                            Всё же читаемей питоновского эквивалента, не?
                            </holywar>
                              +1
                              Ну, а некто привыкший к математике мог бы написать как-то так:

                              def Y(f):
                                  return f(lambda x: Y(f)(x))

                              factorial = Y(lambda f:lambda n: 1 if n==0 else n*f(n-1))

                              print factorial(6)
                                +7
                                >>Интересно, кто… карму сливает
                                думаю веб-програмисты, за
                                >> i = 1 #Благодарность за хак Ивану
                                  +2
                                  Какие все нежные стали…
                                  +4
                                  чёй-то java обошли стороной :)

                                  и не хватает кода индийского программиста, получающего по копейке за каждую строчку кода :)

                                  старая шутка:
                                  if(x == true){
                                  //…
                                  }
                                  else if (x == false){
                                  //…
                                  }
                                  else{
                                  // а вот тут мы рубим бабло
                                  }
                                    0
                                    здорово!
                                    как python'щику порадовало! :)
                                      +1
                                      «Python'щик — эксперт» какой-то неправильный у Вас. Лучше хотя бы так:
                                      from functools import reduce
                                      import operator
                                      fact = lambda x: reduce(operator.mul, xrange(2, x + 1), 1)
                                      print fact(116)
                                      
                                        +1
                                        нафега reduce импортировать?
                                          0
                                          В Python 3 reduce убрали из __builtins__ в модуль functools.
                                            0
                                            так а xrange разве не убрали?
                                              0
                                              xrange превратили в range, убрали полностью range. Ленивость-с.
                                                0
                                                А код написан для совместимости с python 3. В python 2.7 в functools уже есть reduce.
                                                  0
                                                  И да, вместо print fact(116) нужно print(fact(116))
                                                    0
                                                    а гугл всё ещё в режиме совместимости с 2.5 :-|
                                                      +1
                                                      Надеюсь, скоро настанет светлое будущее и многие проекты перейдут на какой-нибудь python 3.3 с JIT-компилятором.
                                              0
                                              Да, впрочем int можно было заменить на operator, но тут еще добавляется еще одна строка с импортом operator, а хотелось бы вместить в максимум 2 строки :) Хотя Ваш вариант правильнее, ибо можно и с long работать. Но вот, кстати, импорт reduce не нужен.
                                                0
                                                … по крайней мере в 2.5
                                              +3
                                              Узнал свой стиль в Веб-программисте. Это печально
                                              • UFO just landed and posted this here
                                                  +1
                                                  Прямо в точку.
                                                  Узнал свои комментарии в веб-программисте, когда экспериментирую с чем-то новым, целые деревья закомментированные получается, как образцы кода.
                                                  В реальных задачах такого нет.

                                                  Only users with full accounts can post comments. Log in, please.