HOW-TO: Программа на Python, Часть 2 Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
fullcircle:28:python_ч_2 [2010/09/04 16:19]
для кода нужны были табуляторы
fullcircle:28:python_ч_2 [2018/01/08 20:54] (текущий)
[Подстановка переменных]
Строка 3: Строка 3:
 //​Автор — Грэг Валтерс (Greg Walters)// //​Автор — Грэг Валтерс (Greg Walters)//
 </​style>​ </​style>​
 +
  
   - [[..:​27:​python_ч_1|Программа на Python — часть 1]]   - [[..:​27:​python_ч_1|Программа на Python — часть 1]]
Строка 15: Строка 16:
   - [[..:​36:​python_ч_10|Программа на Python — часть 10]]   - [[..:​36:​python_ч_10|Программа на Python — часть 10]]
   - [[..:​37:​python_ч_11|Программа на Python — часть 11]]   - [[..:​37:​python_ч_11|Программа на Python — часть 11]]
 +  - [[..:​38:​python_ч_12|Программа на Python — часть 12]]
 +  - [[..:​39:​python_ч_13|Программа на Python — часть 13]]
 +  - [[..:​40:​python_ч_14|Программа на Python — часть 14]]
  
-Впрошлом уроке мы рассмотрели простую программу,​ которая использовала ​raw_input ​для получения ответа пользователя,​ простые типы переменных и простой цикл "​for"​. В этом уроке мы рассмотрим ещё больше типов переменных и напишем ещё больше программ.+В прошлом уроке мы рассмотрели простую программу,​ которая использовала ​input для получения ответа пользователя,​ простые типы переменных и простой цикл "​for"​. В этом уроке мы рассмотрим ещё больше типов переменных и напишем ещё больше программ.
  
 =====Списки===== =====Списки=====
Строка 26: Строка 30:
 Чтобы создать список,​ мы заключили все значения в квадратные скобки ( '​['​ и '​]'​ ). Мы назвали наш список '​months'​. Чтобы использовать список,​ мы дадим команду print months[0] или months[1] (которые выведут на экран '​Jan'​ или '​Feb'​). Помните:​ счет начинается с нуля. Чтобы найти длину списка,​ можно использовать такую функцию:​ Чтобы создать список,​ мы заключили все значения в квадратные скобки ( '​['​ и '​]'​ ). Мы назвали наш список '​months'​. Чтобы использовать список,​ мы дадим команду print months[0] или months[1] (которые выведут на экран '​Jan'​ или '​Feb'​). Помните:​ счет начинается с нуля. Чтобы найти длину списка,​ можно использовать такую функцию:​
 <​code>​ <​code>​
-print len(months)+print (len(months))
 </​code>​ </​code>​
 которая вернёт 12. которая вернёт 12.
  
-**Ещё один пример списков — категории в поваренной книге.** +Ещё один пример списков — категории в поваренной книге. Например...
- Например...+
 <​code>​ <​code>​
 categories = ['Main dish','​Meat','​Fish','​Soup','​Cookies'​] categories = ['Main dish','​Meat','​Fish','​Soup','​Cookies'​]
Строка 50: Строка 53:
 <​code>​ <​code>​
 strng = 'The time has come' strng = 'The time has come'
-print strng[1]+print (strng[1])
 </​code>​ </​code>​
 Результат будет символ '​h'​. Запомните:​ счёт начинается с 0, поэтому первый символ обозначается [0], второй — [1], третий — [2], и так далее. Если мы хотим отобразить символы начиная с положения 4 и заканчивая положением 8, то набираем:​ Результат будет символ '​h'​. Запомните:​ счёт начинается с 0, поэтому первый символ обозначается [0], второй — [1], третий — [2], и так далее. Если мы хотим отобразить символы начиная с положения 4 и заканчивая положением 8, то набираем:​
 <​code>​ <​code>​
-print strng[4:8]+print (strng[4:8])
 </​code>​ </​code>​
 результат будет '​time'​. Как цикл for из первой части, счет остановится на 8, но не возвращает восьмой символ,​ которым является пробел после '​time'​. результат будет '​time'​. Как цикл for из первой части, счет остановится на 8, но не возвращает восьмой символ,​ которым является пробел после '​time'​.
Строка 60: Строка 63:
 Чтобы найти длину строки используем функцию len(): Чтобы найти длину строки используем функцию len():
 <​code>​ <​code>​
-print len(strng)+print (len(strng))
 </​code>​ </​code>​
 Результатом будет 17. Если мы хотим найти, где в строке находится слово '​time',​ то набираем Результатом будет 17. Если мы хотим найти, где в строке находится слово '​time',​ то набираем
Строка 74: Строка 77:
 При помощи команды split можно получить отдельные слова в строке. Разделим строку по пробелам командой:​ При помощи команды split можно получить отдельные слова в строке. Разделим строку по пробелам командой:​
 <​code>​ <​code>​
-print strng.split('​ ')+print (strng.split('​ '))
 </​code>​ </​code>​
 которая вернёт список,​ состоящий из ['​The',​ '​time',​ '​has',​ '​come'​]. Это очень мощная команда. Есть и другие операции над строками,​ которые мы рассмотрим позже. которая вернёт список,​ состоящий из ['​The',​ '​time',​ '​has',​ '​come'​]. Это очень мощная команда. Есть и другие операции над строками,​ которые мы рассмотрим позже.
Строка 82: Строка 85:
 Есть ещё одна вещь, о которой я хочу рассказать до того, как мы перейдём к следующей программе-примеру. Если мы хотим напечатать строку,​ включающую текст и переменную,​ можно использовать подстановку переменных. Это просто. Если мы хотим подставить строку,​ мы пишем '​%s'​ и затем говорим Python, что надо подставить. Например,​ чтобы напечатать название месяца из нашего списка,​ можно использовать:​ Есть ещё одна вещь, о которой я хочу рассказать до того, как мы перейдём к следующей программе-примеру. Если мы хотим напечатать строку,​ включающую текст и переменную,​ можно использовать подстановку переменных. Это просто. Если мы хотим подставить строку,​ мы пишем '​%s'​ и затем говорим Python, что надо подставить. Например,​ чтобы напечатать название месяца из нашего списка,​ можно использовать:​
 <​code>​ <​code>​
-print 'Month = %s' % month[0]+print ('Month = %s' % months[0])
 </​code>​ </​code>​
 Эта команда выведет 'Month = Jan'. Если хотите подставить целое число, используйте '​%d'​. Рассмотрим пример ниже: Эта команда выведет 'Month = Jan'. Если хотите подставить целое число, используйте '​%d'​. Рассмотрим пример ниже:
 <​code>​ <​code>​
-Months = ['​Jan','​Feb','​Mar','​Apr',​ +Months = ['​Jan','​Feb','​Mar','​Apr','​May','​Jun','​Jul','​Aug','​Sep','​Oct','​Nov','​Dec'​] 
-'​May','​Jun','​Jul','​Aug','​Sep','​Oct','​ +DaysInMonth = [31,​28,​31,​30,​31,​30,​31,​31,​30,​31,​30,​31]
-Nov','​Dec'​] +
-DaysInMonth = [31,​28,​31,​30,​31,​30,​31,​31,​30,​31,​ +
-30,31]+
 for cntr in range(0,​12):​ for cntr in range(0,​12):​
-print '%s has %d days.' % (Months[cntr],​ +    ​print ('%s has %d days.' % (Months[cntr],​DaysInMonth[cntr]))
-DaysInMonth[cntr])+
 </​code>​ </​code>​
 Вывод этой программы:​ Вывод этой программы:​
Строка 116: Строка 115:
 или так: или так:
 <​code>​ <​code>​
-st = The time has come+st = "The time has come"
 </​code>​ </​code>​
 разницы никакой нет. Но если надо включить в строку одинарную кавычку,​ как в примере ниже: разницы никакой нет. Но если надо включить в строку одинарную кавычку,​ как в примере ниже:
Строка 124: Строка 123:
 вы увидите ошибку синтаксиса. Надо делать так: вы увидите ошибку синтаксиса. Надо делать так:
 <​code>​ <​code>​
-st = He said he's on his way+st = "He said he's on his way"
 </​code>​ </​code>​
 Думайте о кавычках так. Чтобы определить строку,​ нужно поместить её между кавычками — одна в начале строки,​ а другая в конце — и они должны совпадать. Если вам надо вставить кавычки внутрь,​ используйте другой тип внешних кавычек,​ как в примере сверху. У вас может появиться вопрос,​ а если я захочу определить строку подобную “She said “Don'​t Worry””?​ В таком случае можно определить её так: Думайте о кавычках так. Чтобы определить строку,​ нужно поместить её между кавычками — одна в начале строки,​ а другая в конце — и они должны совпадать. Если вам надо вставить кавычки внутрь,​ используйте другой тип внешних кавычек,​ как в примере сверху. У вас может появиться вопрос,​ а если я захочу определить строку подобную “She said “Don'​t Worry””?​ В таком случае можно определить её так:
 <​code>​ <​code>​
-st = 'She said Don\'t Worry'+st = 'She said "Don\'t Worry"'
 </​code>​ </​code>​
 Обратите внимание на обратный слэш перед одинарной кавычкой в '​Don'​t'​. Он называется экранирующим символом и сообщает Python, что в этом случае надо напечатать одинарную кавычку,​ не считая её разграничителем строк. Существует много последовательностей управляющих символов. Некоторые из них: '​\n'​ — новая строка,​ '​\t'​ — табуляция. Мы рассмотрим их в одном из следующих примеров. Обратите внимание на обратный слэш перед одинарной кавычкой в '​Don'​t'​. Он называется экранирующим символом и сообщает Python, что в этом случае надо напечатать одинарную кавычку,​ не считая её разграничителем строк. Существует много последовательностей управляющих символов. Некоторые из них: '​\n'​ — новая строка,​ '​\t'​ — табуляция. Мы рассмотрим их в одном из следующих примеров.
Строка 152: Строка 151:
 Далее, мы должны обсудить комментарии. Комментарии важны по нескольким причинам. Они не только говорят вам или другим людям, что вы пытаетесь делать,​ но и напомнят вам через полгода,​ что же вы хотели сделать. Когда вы будете писать много программ,​ комментарии станут важными. Также при их помощи вы заставите Python игнорировать какие-либо части кода. Чтобы закомментировать строку,​ поставьте перед ней знак '#'​. Например:​ Далее, мы должны обсудить комментарии. Комментарии важны по нескольким причинам. Они не только говорят вам или другим людям, что вы пытаетесь делать,​ но и напомнят вам через полгода,​ что же вы хотели сделать. Когда вы будете писать много программ,​ комментарии станут важными. Также при их помощи вы заставите Python игнорировать какие-либо части кода. Чтобы закомментировать строку,​ поставьте перед ней знак '#'​. Например:​
  
-<​code>#</​code>​ Это комментарий+<​code>#</​code>​ Это ​комментарий.
  
 Комментарии можно вставлять в любое место в строке,​ но помните,​ что Python проигнорирует всё, что идёт после '#'​. Комментарии можно вставлять в любое место в строке,​ но помните,​ что Python проигнорирует всё, что идёт после '#'​.
Строка 171: Строка 170:
 а на Python — так: а на Python — так:
 <​code>​ <​code>​
-если ​x == y:+if x == y:
  делай то-то  делай то-то
-в противном случае:+else:
  делай что-то другое  делай что-то другое
  другие команды  другие команды
 </​code>​ </​code>​
 Самое главное заключается в следующем:​ Самое главное заключается в следующем:​
- 
   - Завершайте операторы if и else двоеточием.   - Завершайте операторы if и else двоеточием.
- 
   - Делайте ОТСТУПЫ в вашем коде.   - Делайте ОТСТУПЫ в вашем коде.
  
Строка 187: Строка 184:
 x = 5 x = 5
 if x == 1: if x == 1:
- print 'X is 1'+ print ​('X is 1')
 elif x < 6: elif x < 6:
- print 'X is less than 6'+ print ​('X is less than 6')
 elif x < 10: elif x < 10:
- print 'X is less than 10'+ print ​('X is less than 10')
 else: else:
- print 'X is 10 or greater'​+ print ​('X is 10 or greater'​)
 </​code>​ </​code>​
-Обратите внимание:​ мы используем оператор '<'​ для проверки,​ что x МЕНЬШЕ,​ ЧЕМ определенное значение — в этом случае 6 и 10. Другие часто используемые операторы сравнения:​ больше чем '>',​ меньше,​ чем или равно '<​=',​ больше чем или равно '>​='​ и не равно '​!='​.+Обратите внимание:​ мы используем оператор '<'​ для проверки,​ что x МЕНЬШЕ,​ ЧЕМ определенное значение — в этом случае 6 и 10. Другие часто используемые операторы сравнения:​ больше чем '>',​ меньше,​ чем или равно '%%<=%%', больше чем или равно '>​='​ и не равно '​!='​. 
 =====Оператор while===== =====Оператор while=====
  
-В заключении мы рассмотрим простой пример оператора while. Этот оператор позволяет повторять цикл из действий несколько раз до достижения определенного порогового значения. Рассмотрим простой пример:​ присвоим переменной ​loop” значение 1. Затем, пока значение переменной loop меньше или равно 10, выводить значение переменной ​loop, прибавлять к нему 1 и продолжать до тех пор, пока переменная ​loop” не станет больше 10, и выйти:+В заключении мы рассмотрим простой пример оператора while. Этот оператор позволяет повторять цикл из действий несколько раз до достижения определенного порогового значения. Рассмотрим простой пример:​ присвоим переменной ​"loop" ​значение 1. Затем, пока значение переменной loop меньше или равно 10, выводить значение переменной ​"loop", прибавлять к нему 1 и продолжать до тех пор, пока переменная ​"loop" ​не станет больше 10, и выйти:
 <​code>​ <​code>​
 loop = 1 loop = 1
 while loop <= 10: while loop <= 10:
- print loop+ print ​(loop)
  loop = loop + 1  loop = loop + 1
 </​code>​ </​code>​
Строка 218: Строка 216:
 10 10
 </​code>​ </​code>​
-Это то, что мы хотели увидеть. На рисунке 1 (справа вверху) изображен похожий пример,​ который чуть более сложен,​ но всё-таки простой.+Это то, что мы хотели увидеть.
  
-В этом примере,​ мы рассматриваем всё вместе:​ оператор if, цикл while, команду ​raw_input, последовательность для новой строки,​ операторы присваивания и сравнения — всё это в программе из 8 строк.+Следующий пример чуть более сложен,​ но всё-таки простой. 
 + 
 +<​code>​ 
 +loop = 1 
 +while loop == 1: 
 +    response = input("​Enter something or '​quit'​ to end => ") 
 +    if response == '​quit':​ 
 +        print ('​quitting'​) 
 +        loop = 0 
 +    else: 
 +        print ('You typed %s' % response) 
 +</​code>​ 
 + 
 +В этом примере,​ мы рассматриваем всё вместе:​ оператор if, цикл while, команду ​input, последовательность для новой строки,​ операторы присваивания и сравнения — всё это в программе из 8 строк.
  
 Если мы запустим этот пример,​ то увидим:​ Если мы запустим этот пример,​ то увидим:​
Строка 242: Строка 253:
 Обратите внимание на то, что при вводе '​QUIT'​ программа не завершила работу. Это потому,​ что мы сравниваем значение переменной response с '​quit'​ (response == '​quit'​). '​QUIT'​ НЕ равно '​quit'​. Обратите внимание на то, что при вводе '​QUIT'​ программа не завершила работу. Это потому,​ что мы сравниваем значение переменной response с '​quit'​ (response == '​quit'​). '​QUIT'​ НЕ равно '​quit'​.
  
-Ещё один пример — и мы закончим урок в этом месяце. Предположим,​ что вы хотите проверить,​ может ли пользователь работать с вашей программой. Хотя этот пример не является самым лучшим,​ он хорошо показывает некоторые вещи, которые мы уже знаем. Короче говоря,​ мы запросим у пользователя его имя и пароль,​ сравним их с информацией внутри программы и примем решение на основании результатов сравнения. Мы используем два списка:​ в одном хранятся имена пользователей,​ в другом — пароли. Затем мы используем команду ​raw_input ​для получения информации от пользователя и, наконец,​ операторы if/​elif/​else для проверки,​ может ли пользователь работать. Запомните:​ это не самый лучший способ. Мы рассмотрим другие способы в последующих уроках. Наш код показан в рамке справа.+Ещё один пример — и мы закончим урок в этом месяце. Предположим,​ что вы хотите проверить,​ может ли пользователь работать с вашей программой. Хотя этот пример не является самым лучшим,​ он хорошо показывает некоторые вещи, которые мы уже знаем. Короче говоря,​ мы запросим у пользователя его имя и пароль,​ сравним их с информацией внутри программы и примем решение на основании результатов сравнения. Мы используем два списка:​ в одном хранятся имена пользователей,​ в другом — пароли. Затем мы используем команду ​input для получения информации от пользователя и, наконец,​ операторы if/​elif/​else для проверки,​ может ли пользователь работать. Запомните:​ это не самый лучший способ. Мы рассмотрим другие способы в последующих уроках. Наш код показан в рамке справа.
  
 Сохраните его как '​password_test.py',​ запустите и вводите разнообразные значения. Сохраните его как '​password_test.py',​ запустите и вводите разнообразные значения.
  
-Мы ещё не обсудили одну команду в процедуре проверки,​ которая начинается с 'if usrname in users:'​. Здесь мы проверяем,​ есть ли введённое имя пользователя в списке. Если да, мы запрашиваем положение имени пользователя в списке users. Затем мы получаем позицию имени пользователя в списке имён, чтобы получить пароль,​ который хранится в той же позиции в списке паролей. Например,​ имя John хранится в позиции 1 списка пользователей. Его пароль,​ '​dog'​ хранится в позиции 1 списка паролей. Таким образом,​ мы сопоставляем имя и пароль. Сейчас вам должен быть понятен смысл программы.|+Мы ещё не обсудили одну команду в процедуре проверки,​ которая начинается с 'if usrname in users:'​. Здесь мы проверяем,​ есть ли введённое имя пользователя в списке. Если да, мы запрашиваем положение имени пользователя в списке users. Затем мы получаем позицию имени пользователя в списке имён, чтобы получить пароль,​ который хранится в той же позиции в списке паролей. Например,​ имя John хранится в позиции 1 списка пользователей. Его пароль,​ '​dog'​ хранится в позиции 1 списка паролей. Таким образом,​ мы сопоставляем имя и пароль. Сейчас вам должен быть понятен смысл программы. 
 Для одного раза достаточно. В следующем месяце мы изучим функции и модули. А пока развлекайтесь с тем, что уже узнали. Для одного раза достаточно. В следующем месяце мы изучим функции и модули. А пока развлекайтесь с тем, что уже узнали.
  
  
 +=====Код к password_test.py =====
 +
 +<​code>#​!/​usr/​bin/​env python3
 +#​-----------------------------------------------
 +#​password_test.py
 +# example of if/else, lists, assignments,​ input,
 +# comments and evaluations
 +#​-----------------------------------------------
 +# Assign the users and passwords
 +users = ['​Fred','​John','​Steve','​Ann','​Mary'​]
 +passwords = ['​access','​dog','​12345','​kids','​qwerty'​]
 +#​-----------------------------------------------
 +# Get username and password
 +usrname = input('​Enter your username => ')
 +pwd = input('​Enter your password => ')
 +#​-----------------------------------------------
 +# Check to see if user is in the list
 +if usrname in users:
 + position = users.index(usrname) #Get the position in the list of the users
 + if pwd == passwords[position]:​ #Find the password at position
 + print ('Hi there, %s. Access granted.'​ % usrname)
 + else:
 + print ('​Password incorrect. Access denied.'​)
 +else:
 + print ("​Sorry...I don't recognize you. Access denied."​)
 +</​code>​
 --------------------------------------- ---------------------------------------
  
Строка 259: Строка 297:
  
 {{tag>​howto Full_Circle}} {{tag>​howto Full_Circle}}
-