{page title="Задания по программированию для 2017а"} {body}
КМП.
Задание в классе: на основе этого реализовать крестики-нолики для двух игроков.
from http.server import HTTPServer, SimpleHTTPRequestHandler import time hostName = "localhost" hostPort = 566 class Model: def __init__(self, n): self.__n = n self.__field = None self.restart() def restart(self): self.__field = [[0 for i in range(self.__n)] for j in range(self.__n)] def n(self): return self.__n def field(self): return self.__field # TODO: clone def move(self, x, y): self.__field[x][y] += 1 class MyHandler(SimpleHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() html = control.get_html(self.path) self.wfile.write(bytes(html, "utf-8")) class Control: def __init__(self, model, view): self.__model = model self.__view = view def get_html(self, path): if path == "/index.html" or path == "/index.htm": path = "/" if len(path) >= 5: x, y = map(int, path[2:].split(",")) self.__model.move(x, y) if path == "/": self.__model.restart() html = "<html><body>" html += self.__view.draw_field() html += "</body></html>" return html class HTMLView: def __init__(self, model): self.__model = model def draw_field(self): html = "<table>" for i in range(self.__model.n()): html += "<tr>" for j in range(self.__model.n()): html += "<td><a href='/?%s,%s'>" % (i, j) html += str(self.__model.field()[i][j]) html += "</a></td>" html += "</tr>" html += "</table>" html += "<br/><a href='/'>Restart</a>" return html model = Model(3) view = HTMLView(model) control = Control(model, view) myServer = HTTPServer((hostName, hostPort), MyHandler) print(time.asctime(), "Server Starts - %s:%s" % (hostName, hostPort)) try: myServer.serve_forever() except KeyboardInterrupt: pass
Реализовать свой сервер, который делает перевод из римских чисел в арабские и наоборот.
from http.server import HTTPServer, SimpleHTTPRequestHandler
import time
hostName = "localhost"
hostPort = 80
class MyHandler(SimpleHTTPRequestHandler):
def write(self, s):
self.wfile.write(bytes(s, "utf-8"))
def do_GET(self):
global counter
if self.path == "/":
self.path = "/favicon.ico"
if self.path == "/favicon.ico" or self.path == "/a.py":
SimpleHTTPRequestHandler.do_GET(self)
return
a = self.path[1:].split("+")
print(a)
a = map(int, a)
ans = sum(a)
counter += 1
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.write("Title goes here.")
self.write("This is a test.")
self.write("You accessed path: " + self.path + "")
self.write("Answer: " + self.path[1:] + "=" + str(ans) + "")
self.write("You are Number " + str(counter) + ".")
self.write("")
counter = 0
#HTTPServer((hostName, hostPort), MyHandler).serve_forever()
myServer = HTTPServer((hostName, hostPort), MyHandler)
print(time.asctime(), "Server Starts - %s:%s" % (hostName, hostPort))
try:
myServer.serve_forever()
except KeyboardInterrupt:
pass
myServer.server_close()
print(time.asctime(), "Server Stops - %s:%s" % (hostName, hostPort))Задание «Web-запросы-1»
Пример: 7373 -> Mikhail Dvorkin -> MD -> molecular dynamics
Интеллектуальная забава "Антибуриме" заключается в восстановлении последних слов в данной строфе. Например:
Котлете радуюсь _____
Она не раз воспета _____
Но в то же время и _____
Неоднократно мной _____
Ваша программа должна:
<div class="poem-body"><br> Я с вами жил, страдал и плакал вместе с вами.<br> Кто честен был, тот никогда мне не был дальным.<br> Теперь иду от вас я к духам, жить с тенями<br> И, точно счастье было здесь, иду печальным.<br>Показать эти 4 строки пользователю с последними словами, замененными на _____. Спросить у пользователя его вариант заполнения пропусков. Выдать пользователю его результат — число от 0 до 4.
Примечание. Пример работы с кодировками: r = requests.get("http://www.vekperevoda.com/alphabet.htm") s = r.content.decode(r.apparent_encoding)
x y цвет надпись_без_пробеловНапример:
2 300 50 green HELLO_WORLD 50 200 red GOOD_LUCKВывести на экране эти надписи в этих позициях с этими цветами. На экране четыре кнопки по краям окошка с надписями вверх, вниз, влево, вправо соответственно. В центре экрана 25 кнопок в форме квадрата 5×5, на которых написаны номера от 0 до 24. Сверху экрана поле для ввода (Entry). При нажатии кнопки вверх, вниз, влево, вправо происходит следующее: Из поля ввода берется число m (гарантируется, что там натуральное число), и все кнопки из центрального блока, номера которых делятся на m, двигаются на 5 пикселей в соответствующем направлении. Задание номер 1, но с «защитой от дурака»: при некорректном вводе в текстовое поле должен выводиться текст "Error". На экране одна кнопка. При нажатии на клавиатуре клавиш "w", "a", "s", "d" она двигается вверх, влево, вниз, вправо соответственно. При нажатии "i" она становится больше, при нажатии "k" — меньше. На самой кнопке всегда отображаются её текущие координаты и размер, в формате: "x=5, y=100, size=20". {* *}
(Хозяйке на заметку: шпаргалка по LaTex.)
Написать и сверстать в системе LaTeX своё резюме.
Содержательно — не забудьте включить туда следующие данные о вас:
Технически — ваша задача использовать:
Результат прислать М. Э. на почту. Причём, возможно, всем будет удобнее, если вы создадите документ на сайте Papeeria или ShareLaTeX, и пришлёте М. Э. просто ссылку на него. Но, внимание, тогда, оказывается, нужно, зайти на этот сервис не анонимно, а залогинившись и специально отметить этот документ как публичный, а не приватный.
Здесь появится описание проекта и этапов работы над ним.
В левой части экрана поле лабиринта — прямоугольник с препятствиями. По нему ходит герой (окружность, а лучше человечек, а ещё лучше изображение из файла).
В правой части экрана кнопки управления вверх-вниз-вправо-влево.
Есть несколько прогрессбаров, со временем уровень каждого из них понижается. Дошедший до нуля прогрессбар становится выключенным (disabled).
Рядом с каждым есть кнопочка повышения его уровня на несколько пунктов.
Есть слайдер, регулирующий скорость уменьшения уровней и одновременно скорость получения очков.
Очки увеличиваются пропорционально кол-ву активных прогрессбаров и скорости.
Пользователю показывается прямоугольник из чекбоксов.
В начале поле заполняется произвольным образом (каждый чекбокс либо выбран, либо нет, с вероятностью 50%).
При нажатии на любой чекбокс, содержащий его крестик (его строка + его столбец) инвертируется (выбранные становятся невыбранными и наоборот).
Если все чекбоксы стали выбранными, игрок выиграл, не забудьте его поздравить с этим.
Написать апплет, который задает пользователю вопрос(ы) c ответами да/нет.
После изучения формата BMP, напишите программу, реализующую следующую процедуру:
Должны корректно обрабатываться случаи вертикального и горизонтального отрезков и отрезка нулевой длины.
Ваша задача — самостоятельно разобраться в том, как устроен формат BMP.
Серьезное улучшение относительно того, что было рассказано на уроке:
Лучше читать файл с помощью FileInputStream, а записывать с помощью FileOutputStream.
FileInputStream in = new FileInputStream("a.bmp"); in.read(); // вернет один байт из файла или -1, если файл закончился. FileOutputStream out = new FileOutputStream("b.bmp"); out.write(239); // запишет в файл байт равный 239 in.close(); out.close(); // не забывайте это делать
Предлагаемый (но не обязательный) план работы таков:
.write(x)
), в котором изображено то, что вы хотите
(разноцветные линии и фигуры, первая буква вашего имени и т. д.)
Дополнительное задание: научиться работать с файлами не зафиксированного, а произвольного размера.
В любом порядке задачи из этих трех наборов:
Прочитать файл romeo_and_juliet.txt и вывести в файл analysis.txt результат частотного анализа слов в тексте.
Базовый вариант: вывести в любом порядке слова, встречающиеся в тексте,
и их количество, например:
not 30
the 566
a 239
Продвинутый вариант: только 20 самых частых слов, в порядке уменьшения частоты.
Напишите рекурсивные методы, вычисляющие:
Реализовать одну программу (один класс), в котором присутствуют методы, решающие эти задачки, а также метод main, в котором эти методы вызываются на примерах (хотя бы один пример на каждую задачку). Программу прислать по почте М. Э.
Будем работать со следующим классом чисел: четырехзначные, все цифры разлиные, и первая цифра — не ноль.
Ваша программа загадывает произвольное число из описанного выше класса (но не сообщает его пользователю).
Пользователь много раз вводит свою попытку — число из того же класса. Программа в ответ сообщает пользователю количество «быков» и «коров» — цифр, угаданных пользователем и стоящих на своих местах, и цифр, угаданных пользователем, но стоящих не на своих местах.
Если попытка пользователя совпала с загаданным числом, его надо поздравить, а игру закончить.
Пользователь вводит строку s. Обозначим буквой L длину введённой строки.
*hip s*ip sh*p shi*Определить, является ли строка s палиндромом. Вывести все циклические сдвиги строки s, например:
ship hips ipsh pshi(Задание на 5+) Среди всех циклических сдвигов строки s найти наименьший (в примере: hips).
Все задания можно сделать в одной программе: пользователь вводит одну строку, а программа выдает подряд ответы на вышеперечисленные задания. Сделанную программу прислать по эл. почте М. Э.
1) Доделать задание с урока:
Рассматривается процесс: текущее число делится пополам, если оно четное, и умножается на три и увеличивается на единицу, если нечетное. (Например, 3, 10, 5, 16, 8, 4, 2, 1, 4.)
Пользователь вводит два числа a и b, программа должна для каждого натурального числа из диапазона от a до b вывести количество действий, за которое из этого числа процесс доходит до цикла 4-2-1-4.
2) Пользователь вводит с клавиатуры число n. Программа должна вывести на экран вот такой набор изображений (это просто пример для n=5, программа же должна работать для произвольного n):
***** ***** ***** ***** ***** (квадрат n*n) . / \ / \ / \ / \ ("горка" высоты n) ***** * * * * * * ***** ("полый" квадрат n*n) ***** ***** *\ * * /* * \ * * / * * \* */ * ***** ***** (именно так, два квадрата с диагоналями рядом по горизонтали, а не друг под другом) ********************* * * * * * * * * * * * * * * * * * * ********************* (это n квадратов n*n, у которых "слиплись" соседние стороны) . . . / \ / \ / / \ / \ / / \ / \ / . . . (это ломаная, в которой n звеньев, а ее высота составляет n строчек) (ваша программа должна работать и для четных, и для нечетных n) И ещё 1 любая картинка на ваше усмотрение :)
Считайте, что пользователь вводит n не меньшее 3 (ну или разберите случаи 1 и 2 вручную, но это необязательное задание).
Сделанные программы прислать по эл. почте М. Э.
1) Исследовать, как работают операторы деления ("/") и остатка ("%"), если один или оба операнда — отрицательные. Каков знак результата? Куда происходит округление?
Результатом выполнения этого задания является связный текст на русском языке, в котором описывается работа этих операторов при всех вариантах знаков операндов.
2) Напишите программу, в которой сначала объявляются и инициализируются две целочисленные переменные:
int x = (некоторое целое число); int y = (некоторое целое число);
А затем на экран выводятся на отдельных строчках следующие данные:
Выполняя последние три пункта, можете считать, что x и y — оба положительные.
Обязательно запустите вашу программу для нескольких различных пар значений x и y, чтобы убедиться в правильности ее работы.
На эл. почту надо прислать и текст из пункта 1, и программу из пункта 2. Желательно прислать одно письмо, в «теле» которого текст из пункта 1, а во вложении — программа.
1) Написать и прислать по эл. почте М. Э. программу, в которой:
2) Заметим, что команда
System.out.println(1e3);
выводит на экран тысячу в «обычном» виде.
А вот команда
System.out.println(1e12);
выводит на экран триллион в «научном» виде.
Исследуйте, где же проходит граница — начиная с какой величины вещественные числа выводятся в «научном» виде.