Различия между версиями 11 и 12
Версия 11 от 2012-11-09 01:02:56
Размер: 5849
Редактор: FrBrGeorge
Комментарий:
Версия 12 от 2012-11-09 01:05:09
Размер: 5851
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 74: Строка 74:
    * [[attachment:2012-11-02.palindrom.py]]     * [[attachment:2012-11-02.summa_kubov.py]]

Логические и побитовые операции

  • (к теме «операторы цикла») Оператор цикла с последовательностью for: простейшее использование с xrange()

  • Основы булевой алгебры: операции «И», «ИЛИ», «НЕ»
    • Таблицы истинности
    • Другие операции
  • Двоичное представление чисел. Побитовые булевы операции.
    • Функции hex(), oct() и bin()

    • Решение задачи «a,b=b,a» с помощью «исключающего ИЛИ»
  • Особенности операций and и or в Python

Домашнее задание

  1. {i} Прочитать о логических операциях и о побитовых операциях в Википедии

  2. Сколько всего может быть различных двухместных логических операций?

  3. Решить задачу о неравенстве треугольника (вести три числа (A, B, C) и вывести, являются ли они сторонами треугольника)
    • в три-пять строк
         1 a, b, c = input("Введите длины сторон через запятую: ")
         2 if a+b>c and b+c>a and c+a>b:
         3     print "Треугольник возможен"
         4 else:
         5     print "Треугольник невозможен"
      
    • в две строки. Обратите внимание на использование and и or в качестве условного оператора

         1 a, b, c = input("Введите длины сторон через запятую: ")
         2 print a+b>c and b+c>a and c+a>b and "Да" or "Нет"
      
    • <!> в одну строку. Основная проблема: надо несколько раз воспользоваться результатами ввода. Можно определить lambda-функцию:

         1 (lambda l: max(l)<sum(l)-max(l) and "Да" or "Нет")(input("Введите три числа через запятую: "))
      
  4. (Брудно, Каплан) Вывести все четырёхзначные натуральные числа, в десятичной записи которых нет одинаковых цифр
       1 for a in xrange(1,10):
       2     for b in xrange(10):
       3         if b == a:
       4             continue
       5         for c in xrange(10):
       6             if c == b or c == a:
       7                 continue
       8             for d in xrange(10):
       9                 if d == c or d == b or d == a:
      10                     continue
      11                 print (((a*10+b)*10)+c)*10+d
    
  5. Проверить, является ли введённое число палиндромом (т. е. в десятичной записи первая цифра совпадает с последней, вторая -- с предпоследней и т. д.)
    • Сделать это без использования последовательностей (списков, строк и т. п.)

         1 N=input("Введите число: ")
         2 # Здесь можно было написать w=len(str(N)), но см. условие
         3 # Можно было и цикл написать, но это некрасиво
         4 from math import *
         5 w=int(log10(N))                 # (Количество десятичных знаков в N)-1
         6 
         7 while w>0:
         8     if N%10 != N/10**w:         # Первая и последняя цифры
         9         print "Не палиндром"
        10         break
        11     N/=10                       # Убираем последнюю цифру
        12     N%=(10**(w-1))              # Убираем первую цифру
        13     w-=2                        # Уменьшаем количество знаков
        14 else:
        15     print "Палиндром"
      
  6. Решить-таки олимпиадную задачу из предыдущего Д/З: <!> Сумма кубов (Брудно А. Л., Каплан Л. И.). Сколькими способами заданное натуральное число N можно представить в виде суммы двух кубов натуральных чисел: N = i3 + j3. Перестановка слагаемых нового способа не дает. Операцией возведения в степень 1/3 пользоваться можно только для первоначального приближённого вычисления N1/3, т. к. надеяться на равенство a1/3 == b1/3 нельзя.

    • Для начала решить задачу любым способом
    • Решить задачу при N приблизительно равном 1000000000001

Условные обозначения

  • {o} — тема по Linux

  • <!> ­— необязательная тема

  • {i} — теоретическое задание

  • {*} — тема для самостоятельного изучения


CategoryClass CategoryVmsh

LecturesVMSH/Python/2012-11-02 (последним исправлял пользователь FrBrGeorge 2012-11-17 23:00:28)