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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
fullcircle:28:python_ч_2 [2010/10/06 19:56]
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 проигнорирует всё, что идёт после '#'​.
Строка 185: Строка 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. Другие часто используемые операторы сравнения:​ больше чем '>',​ меньше,​ чем или равно '​%%<​=%%',​ больше чем или равно '>​='​ и не равно '​!='​.
Строка 197: Строка 196:
 =====Оператор 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>​
Строка 217: Строка 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 строк.
  
 Если мы запустим этот пример,​ то увидим:​ Если мы запустим этот пример,​ то увидим:​
Строка 241: Строка 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 списка паролей. Таким образом,​ мы сопоставляем имя и пароль. Сейчас вам должен быть понятен смысл программы. 
 Для одного раза достаточно. В следующем месяце мы изучим функции и модули. А пока развлекайтесь с тем, что уже узнали. Для одного раза достаточно. В следующем месяце мы изучим функции и модули. А пока развлекайтесь с тем, что уже узнали.
  
Строка 251: Строка 264:
 =====Код к password_test.py ===== =====Код к password_test.py =====
  
-<​code>#​-----------------------------------------------+<​code>​#​!/​usr/​bin/​env python3 
 +#​-----------------------------------------------
 #​password_test.py #​password_test.py
-# example of if/else, lists, assignments,​raw_input,+# example of if/else, lists, assignments, ​input,
 # comments and evaluations # comments and evaluations
 #​----------------------------------------------- #​-----------------------------------------------
Строка 261: Строка 275:
 #​----------------------------------------------- #​-----------------------------------------------
 # Get username and password # Get username and password
-usrname = raw_input('​Enter your username => ') +usrname = input('​Enter your username => ') 
-pwd = raw_input('​Enter your password => ')+pwd = input('​Enter your password => ')
 #​----------------------------------------------- #​-----------------------------------------------
 # Check to see if user is in the list # Check to see if user is in the list
Строка 268: Строка 282:
  position = users.index(usrname) #Get the position in the list of the users  position = users.index(usrname) #Get the position in the list of the users
  if pwd == passwords[position]:​ #Find the password at position  if pwd == passwords[position]:​ #Find the password at position
- print 'Hi there, %s. Access granted.'​ % usrname+ print ​('Hi there, %s. Access granted.'​ % usrname)
  else:  else:
- print '​Password incorrect. Access denied.'​+ print ​('​Password incorrect. Access denied.'​)
 else: else:
- print "​Sorry...I don't recognize you. Access denied."​+ print ​("​Sorry...I don't recognize you. Access denied."​)
 </​code>​ </​code>​
 --------------------------------------- ---------------------------------------