Tuesday, October 12, 2010

Урок 4, про исскуство. Ввод и вывод данных.

Хватит наверно с математикой, перейдем к искуству.
Изобразим квадрат Малевича. Вот такой:
####
####
####
####
Похож, правда?
Кроме того, пусть размер квадрата будет не постоянный, а задаваться пользователем.

Разбиваем задачу на несколько простых блоков:
1. Получить от пользователя число - размер стороны квадрата, и записать его в переменную (назовем ее size).
2. Напечатать одну строку - вывести квадратик # столько раз, сколько записано в size.
3. Повторить эту строку столько раз, сколько записано в size.

Для получения данных от пользователя знакомимся с новой командой:

raw_input("Preved medved, kak dela?")

Пользователь получит окошка для ввода с заголовком "Preved medved, kak dela?" и строчкой для ввода данных. Эти данные, полученные от пользователя мы можем записать в переменную вот так:

otvet = raw_input("Preved medved, kak dela?")

Отлично. Нас правда интересует размер квадрата, а не дела медведя, и в нашем случае строчка будет выглядеть вот так:

size = raw_input("Ukazhite razmer kvadrata")

Есть только одна проблема. Рассмотрим два примера:
1. size=3
В переменную size записали число - 3.

2. size="3"
В переменную size записали текст - "3".

В первом примере, наша переменная число, во втором текст.
Если наша следующая команда:
size = size -1
То в первом примере, переменная size теперь содержит число 2, а во втором пайтон недоуменно смотрит на нас и удивляется, ведь отнять от текста число мы уже пробовали в уроке 0, и это у нас не получилось.

Команда raw_input всегда возвращает данные как текст.
Для преобразования текста в число, знакомимся с новыми командами:
Целые числа - int
Дробные числа - float

Пример:
text = "345"
num = int(text)
num = num - 5
print num

Важно отметить, попытка преобразовать текст "3.45" в целое число с командой int выдаст ошибку. Нам придется сделать 2 преобразования, текста в дробное число, и из дробного числа в целое:

text = "12.34"
num = float(text)
num = int(num)
num = num - 5
print num

Теперь когда мы научились преобразовать текст в числа, вернемся к Малевичу.
Мы остановились на:

size = raw_input("Ukazhite razmer kvadrata")

добавляем:

size = int(size)

получаем:

size = raw_input("Ukazhite razmer kvadrata")
size = int(size)

Отлично. Дальше мы уже умеем. Нарисуем одну строчку квадратиков:
size = raw_input("Ukazhite razmer kvadrata")
size = int(size)

i=size
while i>0:
    print "#"
    i=i-1
Запускаем. Так. Ну и какого хрена на экране столбик. С криками "глупый компьютер почему ты не делаешь то что я хочу, ведь я твой властелин" мы колошматим клавиатуру, выпиваем стакан воды и начинаем думать.
Ну да, конечно, ведь команда print после каждого вывода переходит на новую строку. Во избежания этого добавим в конце команды print знак "," который сообщает что мы еще не закончили писать на этой строке, а в конце пустой print для того чтобы перейти на новую строку, и получим:
size = raw_input("Ukazhite razmer kvadrata")
size = int(size)

i=size
while i>0:
    print "#",
    i=i-1
print
Работает. Так, теперь берем весь этот кусок печатания строки, начиная с i=size, и заканчивая print, и вставляем его в цикл, который повторит вывод одной строки много раз и получим:
size = raw_input("Ukazhite razmer kvadrata")
size = int(size)
j=size
while j>0:
    i=size
    while i>0:
        print "#",
        i=i-1
    print
    j=j-1

Великая победа альянса. (ц)

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

1. Напишите программу которая рисует вот такой треугольник:

*
**
***
****
*****

2. А теперь стрелочку:

*
**
***
****
*****
****
***
**
*