# Отчет по теме 6  

***Цель работы: Научиться работать с файловым устройством в качестве накопителя или источника данных для проведения расчетов.***  

Терехов Фёдор Валерьевич, А-01-23  


## 1. Вывод данных на экран дисплея.  

### 1.1. Вывод с использованием функции  print.  

>Этот способ можно применять и в командной строке,  и в функциях, поэтому привыкайте использовать только его! По умолчанию вывод будет осуществляться на экран, но, как увидим дальше, пункт назначения выводимых данных можно переопределить.  


```python
fff=234.5;gg='Значение температуры = '
print(gg, fff)
```

Ответ программы:  
```shell
Значение температуры =  234.5
```

*По умолчанию выводимые объекты разделяются одним пробелом. Если нужен другой разделитель его можно указать в отдельном аргументе sep.*  

```python
fff=234.5;gg='Значение температуры = '
print(gg, fff)
print(gg, fff, sep='/')
```

Ответ программы:  
```shell
Значение температуры =  234.5
Значение температуры = /234.5
```

*После вывода автоматически осуществляется переход на другую строку. Если курсор надо оставить в той же строке, то следует использовать еще один аргумент.*  

```python
fff=234.5;gg='Значение температуры = '
print(gg, fff)
print(gg, fff, sep='/')
print(gg, fff,sep='/',end='***'); print('____')
```

Ответ программы:  
```shell
Значение температуры =  234.5
Значение температуры = /234.5
Значение температуры = /234.5***____
```

*После end= надо указать какими символами должна закончиться выводимая строка или указать пустую строку. Наоборот, если в какой-то момент требуется просто перейти на новую строку, можно использовать такое обращение к функции.*  

```python
print()
```

*Наконец, оператор вывода может располагаться на нескольких строках с использованием тройных кавычек.*  

```python
print(""" Здесь может выводиться
большой текст,
занимающий несколько строк""")
print("Здесь может выводиться",
    "большой текст,",
    "занимающий несколько строк")
```

Ответ программы:  
```shell
Здесь может выводиться
большой текст,
занимающий несколько строк
Здесь может выводиться большой текст, занимающий несколько строк
```

### 1.2. Вывод с использованием метода write  объекта sys.stdout.  

*Объект stdout представляет собой поток стандартного вывода – объект, в который программы выводят символьное представление данных. Обычно это – экран дисплея. Объект находится в модуле sys, который надо импортировать.*  

```python
import sys
sys.stdout.write('Функция write')
```

Ответ программы:  
```shell
Функция write%   
```

*Обратите внимание, что этот метод после вывода строки не осуществляет переход на новую строку. Если это требуется, то следует в конце строки добавить один или несколько символов “\n”:*  

```python
import sys
sys.stdout.write('Функция write\n')
```

Ответ программы:  
```shell
Функция write
```

## 2. Цикл по перечислению – управляющая инструкция for. 

***Общее правило написания:***  
for <Объект-переменная цикла> in <объект>:  
<отступы><Блок инструкций 1 – тело цикла>  
[else:  
< отступы ><Блок инструкций 2 – если  в цикле не сработал break>]  

>Здесь <объект> - любой определенный до начала цикла объект из классов строка, список, кортеж, множество, словарь. <Объект-переменная цикла> - объект, в качестве значений которого поочередно будут задаваться элементы объекта, которые могут быть объектами любого типа. <Блок инструкций 1 – тело цикла> - совокупность инструкций, которая может содержать или не содержать инструкцию break, вызывающую досрочное завершение цикла при некоторых условиях.  Блок инструкций 1 обычно выполняется многократно по мере того, как объект-переменная цикла принимает значения из сложного объекта. Если в цикле имеется необязательная часть: else и Блок инструкций 2, то он будет выполняться перед завершением цикла только в том случае, если при выполнении цикла не было его прерывания по инструкции break.  
Если Блоке инструкций 1 или в Блоке инструкций 2 только одна инструкция, то её можно записывать без отступов сразу за двоеточием.  

### 2.1. Простой цикл.  

```python
temperatura=5
for i in range(3,18,3):
    temperatura+=i
print(temperatura)
```

Ответ программы:  
```shell
50
```

### 2.2. Более сложный цикл.  

```python
sps=[2,15,14,8]
for k in sps:
    if len(sps)<=10:sps.append(sps[0])
    else: break
print("После первого цикла:",sps)
sps=[2,15,14,8]
for k in sps[:]:
    if len(sps)<=10:sps.append(sps[0])
    else: break
print("После второго цикла:",sps)
```

Ответ программы:  
```shell
После первого цикла: [2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2]
После второго цикла: [2, 15, 14, 8, 2, 2, 2, 2]
```

>Во втором варианте итерация происходит по неизменяемой копии списка, поэтому цикл выполняется полное количество раз (4 раза), тогда как в первом варианте итерация происходит по изменяемому списку, и цикл завершается досрочно (через break, иначе цикл был бы бесконечным).  

### 2.3.  Пример: создание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сумма чисел не превышает 500, эта сумма должна быть отображена на экране.  

```python
import random as rn
sps5=[]
for i in range(10):
    sps5.append(rn.randint(1,100))
    ss=sum(sps5)
    if ss>500: break
else:
    print(ss)
```

Ответ программы (1 попытка):  
```shell

```

Ответ программы (2 попытка):  
```shell
484
```

Ответ программы (3 попытка):  
```shell
450
```

Ответ программы (4 попытка):  
```shell

```

Ответ программы (5 попытка):  
```shell
359
```

>Объяснение поведения программы:  
Почему вывод значения ss бывает не всегда:  
else относится к циклу for, а не к if  
Блок else выполняется только если цикл завершился нормально (без оператора break). Если срабатывает break, блок else пропускается.  

### 2.4. Пример с символьной строкой.  

```python
stroka='Это – автоматизированная система'
stroka1=""
for ss in stroka:
    stroka1+=" "+ss
print(stroka1)
```

Ответ программы:  
```shell
 Э т о   –   а в т о м а т и з и р о в а н н а я   с и с т е м а
```

### 2.5. Запись цикла в строке. Пример: создание списка с синусоидальным сигналом.  

```python
import math
import pylab

sps2 = [math.sin(i * math.pi / 5 + 2) for i in range(100)]

pylab.plot(sps2)
pylab.title('Синусоидальный сигнал')
pylab.xlabel('Отсчеты')
pylab.ylabel('Амплитуда')
pylab.grid(True)
pylab.show()
```

Ответ программы:  
![График](Graf_2.5.png)

## 3. Цикл «пока истинно условие» – управляющая инструкция while.  

***Общее правило написания:***  
while <Условие>:
<отступы><Блок инструкций 1 – тело цикла>
[else:
<отступы><Блок инструкций 2 – если в цикле не сработал break>]

>Здесь <Условие> - некоторое логическое выражение. Если на очередном витке цикла оно принимает значение True (или ≠0), то выполняется Блок инструкций 1. При этом, если в этом блоке присутствует инструкция break и она будет выполнена, то цикл завершается, иначе – переходит к новому витку цикла. В блоке инструкций 1 могут быть изменены значения объектов, входящих в Условие и его значение тоже может измениться, Если же его значением останется True, то вновь выполняется Блок инструкций 1 и т.д. Если в цикле присутствует Блок инструкций 2, то он будет выполнен, если завершение цикла произошло не по инструкции break, а по значению False (или значению =0) Условия.

### 3.1. Цикл со счётчиком.  

```python
rashod=300
while rashod:
    print("Расход=",rashod)
    rashod-=50
```

Ответ программы:  
```shell
Расход= 300
Расход= 250
Расход= 200
Расход= 150
Расход= 100
Расход= 50
```

Цикл завершился, потому что в Python число 0 интерпретируется как логическое значение False.  

### 3.2. Пример с символьной строкой.  

```python
import math
stroka='Расчет процесса в объекте регулирования'
i=0
sps2=[]
while i<len(stroka):
    r=1-2/(1+math.exp(0.1*i))
    sps2.append(r)
    print('Значение в момент',i,"=",r)
    i+=1
```

Ответ программы:  
![График 3.2](Graf_3.2.png)


### 3.3. Определение, является ли число простым (делится только на самого себя или 1).  

```python
# Проверка одного числа
chislo = 267
kandidat = chislo // 2
while kandidat > 1:
    if chislo % kandidat == 0:
        print(chislo, ' имеет множитель ', kandidat)
        break
    kandidat -= 1
else:
    print(chislo, ' является простым!')

print("\nПростые числа в диапазоне от 250 до 300:")

# Проверка всех чисел в диапазоне от 250 до 300
for chislo in range(250, 301):
    kandidat = chislo // 2
    while kandidat > 1:
        if chislo % kandidat == 0:
            break
        kandidat -= 1
    else:
        print(chislo, end=' ')
```

Ответ программы:  

```shell
267  имеет множитель  89

Простые числа в диапазоне от 250 до 300:
251 257 263 269 271 277 281 283 293
```

### 3.4. Continue.  

>Помимо инструкции break в обоих видах циклов могут использоваться инструкции continue, которые не вызывают завершения цикла, но завершают его текущий виток и обеспечивают переход к следующему витку.

Пример: Вывод четных чисел от 1 до 10 с использованием continue.  

```python
for i in range(1, 11):
    if i % 2 != 0:
        continue
    print(i, end=' ')
```

Ответ программы:  

```shell
2 4 6 8 10 
```
