diff options
| -rw-r--r-- | fr-fr/python3-fr.html.markdown | 19 | ||||
| -rw-r--r-- | ru-ru/ruby-ru.html.markdown | 177 | 
2 files changed, 179 insertions, 17 deletions
| diff --git a/fr-fr/python3-fr.html.markdown b/fr-fr/python3-fr.html.markdown index 3d60157c..7112cd90 100644 --- a/fr-fr/python3-fr.html.markdown +++ b/fr-fr/python3-fr.html.markdown @@ -7,12 +7,13 @@ contributors:      - ["Zachary Ferguson", "http://github.com/zfergus2"]  translators:      - ["Gnomino", "https://github.com/Gnomino"] +    - ["Julien M'Poy", "http://github.com/groovytron"]  filename: learnpython3-fr.py  lang: fr-fr  ---  Python a été créé par Guido Van Rossum au début des années 90. C'est maintenant un des  -langages les populaires. Je suis tombé amoureux de Python pour la clarté de sa syntaxe. +langages les plus populaires. Je suis tombé amoureux de Python pour la clarté de sa syntaxe.  C'est tout simplement du pseudo-code exécutable.  L'auteur original apprécierait les retours (en anglais): vous pouvez le contacter sur Twitter à [@louiedinh](http://twitter.com/louiedinh) ou par mail à l'adresse louiedinh [at] [google's email service] @@ -131,6 +132,10 @@ b == a # => True, les objets a et b ne pointent pas sur le même objet  # On peut aussi utiliser des mots clés pour éviter de devoir compter.  "{name} wants to eat {food}".format(name="Bob", food="lasagna") #=> "Bob wants to eat lasagna" +# Il est également possible d'utiliser les f-strings depuis Python 3.6 (https://docs.python.org/3/whatsnew/3.6.html#pep-498-formatted-string-literals) +name = "Fred" +f"Il a dit que son nom est {name}." #=> "Il a dit que son nom est Fred." +  # Si votre code doit aussi être compatible avec Python 2.5 et moins,  # vous pouvez encore utiliser l'ancienne syntaxe :  "Les %s peuvent être %s avec la %s méthode" % ("chaînes", "interpolées", "vieille") @@ -220,7 +225,7 @@ del li[2]   # li is now [1, 2, 3]  li + other_li   # => [1, 2, 3, 4, 5, 6]  # Concaténer des listes avec "extend()" -li.extend(other_li)   # Now li is [1, 2, 3, 4, 5, 6] +li.extend(other_li)   # Maintenant li contient [1, 2, 3, 4, 5, 6]  # Vérifier la présence d'un objet dans une liste avec "in"  1 in li   # => True @@ -476,7 +481,7 @@ def add(x, y):  # Appel d'une fonction avec des paramètres :  add(5, 6)   # => affiche "x est 5 et y est 6" et retourne 11 -# Une autre manière d'appeller une fonction : avec des arguments +# Une autre manière d'appeler une fonction : avec des arguments  add(y=6, x=5)   # Les arguments peuvent être dans n'importe quel ordre.  # Définir une fonction qui prend un nombre variable d'arguments @@ -570,7 +575,7 @@ filter(lambda x: x > 5, [3, 4, 5, 6, 7])   # => [6, 7]  #################################################### -# On utilise l'opérateur "classe" pour définir une classe +# On utilise l'opérateur "class" pour définir une classe  class Human:      # Un attribut de la classe. Il est partagé par toutes les instances de la classe. @@ -662,7 +667,7 @@ def double_numbers(iterable):  # Un générateur crée des valeurs à la volée.  # Au lieu de générer et retourner toutes les valeurs en une fois, il en crée une à chaque -# itération.  Cela signifie que les valeurs supérieures à 15 ne seront pas traîtées par +# itération.  Cela signifie que les valeurs supérieures à 30 ne seront pas traîtées par  # double_numbers.  # Note : range est un générateur aussi.   # Créer une liste 1-900000000 prendrait beaucoup de temps @@ -716,6 +721,10 @@ print(say(say_please=True))  # affiche Can you buy me a beer? Please! I am poor  * [Python Course](http://www.python-course.eu/index.php)  * [First Steps With Python](https://realpython.com/learn/python-first-steps/) +### En ligne et gratuit (en français) + +* [Le petit guide des batteries à découvrir](https://he-arc.github.io/livre-python/) +  ### Livres (en anglais)  * [Programming Python](http://www.amazon.com/gp/product/0596158106/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596158106&linkCode=as2&tag=homebits04-20) diff --git a/ru-ru/ruby-ru.html.markdown b/ru-ru/ruby-ru.html.markdown index 69b5fb46..f54c89b4 100644 --- a/ru-ru/ruby-ru.html.markdown +++ b/ru-ru/ruby-ru.html.markdown @@ -10,6 +10,7 @@ contributors:    - ["Nick LaMuro", "https://github.com/NickLaMuro"]  translators:    - ["Alexey Makarov", "https://github.com/Anakros"] +  - ["Vasiliy Petrov", "https://github.com/Saugardas"]  ---  ```ruby @@ -35,6 +36,13 @@ translators:  8 - 1 #=> 7  10 * 2 #=> 20  35 / 5 #=> 7 +2**5 #=> 32 +5 % 3 #=> 2 + +# Побитовые операторы +3 & 5 #=> 1 +3 | 5 #=> 7 +3 ^ 5 #=> 6  # Арифметика -- это синтаксический сахар  # над вызовом метода для объекта @@ -57,8 +65,6 @@ false.class #=> FalseClass  # Операция неравенства  1 != 1 #=> false  2 != 1 #=> true -!true  #=> false -!false #=> true  # nil -- имеет такое же логическое значение, как и false @@ -72,6 +78,26 @@ false.class #=> FalseClass  2 <= 2 #=> true  2 >= 2 #=> true +# Оператор сравнения <=> +1 <=> 10 #=> -1 +10 <=> 1 #=> 1 +1 <=> 1 #=> 0 + +# Булевы операторы +true && false #=> false +true || false #=> true +!true #=> false + +# Существуют альтернативные версии логических операторов с гораздо меньшим +# приоритетом. Они используются для связывания операций, пока одна из них +# не вернёт false или true + +# `do_something_else` будет вызван если `do_something` вернёт истинное значение +do_something() and do_something_else() +# `log_error` будет вызван если `do_something` вернёт (nil/false) +do_something() or log_error() + +  # Строки -- это объекты  'Я строка'.class #=> String @@ -82,6 +108,16 @@ placeholder = "использовать интерполяцию строк"  #=> "Я могу использовать интерполяцию строк,  # когда создаю строку с двойными кавычками" +# Конкатенация строк +'hello ' + 'world' #=> "hello world" +'hello ' + 3 #=> TypeError: can't convert Fixnum into String +'hello ' + 3.to_s #=> "hello 3" + +# Умножение строк +'hello ' * 3 #=> "hello hello hello " + +# Добавление к строке +'hello' << ' world' #=> "hello world"  # печатать в стандартный вывод  puts "Я печатаюсь!" @@ -134,6 +170,7 @@ array = [1, 2, 3, 4, 5] #=> [1, 2, 3, 4, 5]  # Значение в массиве можно получить по индексу с левой границы  array[0] #=> 1 +array.first #=> 1  array[12] #=> nil  # Как и арифметика, доступ к значению в массиве @@ -143,6 +180,7 @@ array.[] 12 #=> nil  # Также, можно получить по индексу с правой границы  array[-1] #=> 5 +array.last #=> 5  # С заданными левой и правой границами индексов  array[2, 4] #=> [3, 4, 5] @@ -150,8 +188,17 @@ array[2, 4] #=> [3, 4, 5]  # Или с использованием диапазона значений  array[1..3] #=> [2, 3, 4] +# Перестановка элементов в обратном порядке +a = [1, 2, 3] +a.reverse #=> [3, 2, 1] +  # Вот так можно добавить значение в массив  array << 6 #=> [1, 2, 3, 4, 5, 6] +# Или так +array.push(6) #=> [1, 2, 3, 4, 5, 6] + +# Проверка включения элемента в массив +array.include?(1) #=> true  # Хэши -- это массив пар "ключ => значение".  # Хэши объявляются с использованием фигурных скобок: @@ -174,17 +221,21 @@ new_hash = { defcon: 3, action: true}  new_hash.keys #=> [:defcon, :action] +# Проверка существования ключа и значения в хеше +new_hash.key?(:defcon) #=> true +new_hash.value?(3) #=> true +  # Массивы и Хэши -- перечисляемые типы данных  # У них есть много полезных методов, например: each, map, count и другие  # Управление ходом выполнения (Управляющие структуры)  if true -  "Если истина" +  'Если истина'  elsif false -  "Иначе, если ложь (опционально)" +  'Иначе, если ложь (опционально)'  else -  "Во всех других случаях" +  'Во всех других случаях (тоже опционально)'  end  for counter in 1..5 @@ -220,7 +271,7 @@ end  #=> итерация 5  # Вы также можете ограничивать блоки фигурными скобками: -(1..5).each {|counter| puts "итерация #{counter}"} +(1..5).each { |counter| puts "итерация #{counter}" }  # Содержимое структурных данных также можно перебирать используя "each":  array.each do |element| @@ -230,6 +281,21 @@ hash.each do |key, value|    puts "#{key} -- это #{value}"  end +# Если вам нужен индекс вы можете использовать "each_with_index" +# В этом случае индекс будет начинаться с 0 +array.each_with_index do |element, index| +  puts "#{element} is number #{index} in the array" +end + +# Если индекс должен начинаться с произвольного значения, +# используйте "each.with_index" +[:q, :w, :e].each.with_index(100) do |element, index| +  puts "#{element} -> #{index}" +end +#=> :q -> 100 +#=> :w -> 101 +#=> :e -> 102 +  counter = 1  while counter <= 5 do    puts "итерация #{counter}" @@ -241,22 +307,65 @@ end  #=> итерация 4  #=> итерация 5 +# Существует большое количество других полезных функций, +# например "map", "reduce", "inject", и так далее. Например, "map" +# выполняет связанный с ним блок для каждого элемента перечисляемого объекта, +# возвращая массив результатов. +array = [1, 2, 3, 4, 5] +doubled = array.map do |element| +  element * 2 +end +puts doubled +#=> [2, 4, 6, 8, 10] +puts array +#=> [1, 2, 3, 4, 5] +  grade = 'B'  case grade  when 'A' -  puts "Так держать, детка!" +  puts 'Так держать, детка!'  when 'B' -  puts "Тебе повезёт в следующий раз" +  puts 'Тебе повезёт в следующий раз'  when 'C' -  puts "Ты можешь сделать лучше" +  puts 'Ты можешь сделать лучше'  when 'D' -  puts "Выскоблил последнее" +  puts 'Выскоблил последнее'  when 'F' -  puts "Ты провалился!" +  puts 'Ты провалился!' +else +  puts 'Альтернативная система оценок, да?' +end +#=> 'Тебе повезёт в следующий раз' + +# в when также можно использовать диапазоны +grade = 82 +case grade +when 90..100 +  puts 'Ура!' +when 80...90 +  puts 'Хорошая работа!' +else +  puts 'Вы не справились!' +end +#=> 'Хорошая работа!' + +# Обработка исключений +begin +  # здесь код, который может вызвать исключение +  raise NoMemoryError, 'У вас закончилась память.' +rescue NoMemoryError => exception_variable +  puts 'Был вызван NoMemoryError', exception_variable +rescue RuntimeError => other_exception_variable +  puts 'Был вызван RuntimeError'  else -  puts "Альтернативная система оценок, да?" +  puts 'Этот код будет выполнятся, если исключения не были вызваны' +ensure +  puts 'Этот код выполняется всегда'  end +#=> Был вызван NoMemoryError +#=> У вас закончилась память. +#=> Этот код выполняется всегда  # Функции @@ -298,6 +407,43 @@ surround { puts 'hello world' }  # } +# Вы можете передать блок методу +# "&" отмечает ссылку на переданный блок +def guests(&block) +  block.call 'some_argument' +end + +# Чтобы метод принимал произвольное количество аргументов, спереди +# одного из параметров ставится префикс "*" +def method(first, *rest) +  p rest +end +method(1, 2, 3, 4) #=> [2, 3, 4] + +# Если метод возвращает массив. можно использовать множественное присваивание +def foods +  ['pancake', 'sandwich', 'quesadilla'] +end +breakfast, lunch, dinner = foods +breakfast #=> 'pancake' +dinner #=> 'quesadilla' + +# По соглашению, все методы, возвращающие булево значение +# оканчиваются символом "?" +5.even? #=> false +5.odd? #=> true + +# Если метод заканчивается восклицательным знаком, значит он делает что-то +# опасное или необратимое, например изменяет внутреннее состояние объекта. +# Многие из таких методов-мутаторов часто имеют "безопасную" версию без "!" +# которая возвращает новое значение +company_name = "Dunder Mifflin" +company_name.upcase #=> "DUNDER MIFFLIN" +company_name #=> "Dunder Mifflin" +company_name.upcase! # Изменяем зачение company_name! +company_name #=> "DUNDER MIFFLIN" + +  # Определение класса с помощью ключевого слова "class"  class Human @@ -323,6 +469,13 @@ class Human      @name    end +  # Тоже самое можно определить с помощью att_accessor +  attr_accessor :name + +  # Также можно создать методы только для записи или чтения +  attr_reader :name +  attr_writer :name +    # Метод класса определяется с ключевым словом "self",    # чтобы можно было отличить его от метода экземпляра класса.    # Он может быть вызван только на уровне класса, но не экземпляра. | 
