summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--fr-fr/python3-fr.html.markdown19
-rw-r--r--ru-ru/ruby-ru.html.markdown177
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",
# чтобы можно было отличить его от метода экземпляра класса.
# Он может быть вызван только на уровне класса, но не экземпляра.