Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные_Python / тема7_икз

.pdf
Скачиваний:
17
Добавлен:
09.08.2021
Размер:
153.38 Кб
Скачать

Решения некоторых икз по темам 7,8

1. Разработайте функцию с одним аргументом – числом элементов. Функция должна включать анонимную функцию с аргументом Х, вычисляющую от заданного входного числового аргумента X значение логистической функции: 1/(1+exp(X)). Общая функция должна создавать список с заданным в аргументе числом случайных элементов, равномерно распределенных в диапазоне от -20 до +68. После этого она должна формировать кортеж с элементами – значениями логистической функции от соответствующих элементов списка. Этот кортеж должен возвращаться, как результат функции.

def f(N):

import random, math

anfun=lambda X: 1/(1+math.exp(X))

sp=[];kort=()

for i in range(N):

sp.append(random.uniform(-20,68))

for s in sp:

kort+=(anfun(s),)

return kort

2. Разработайте функцию с 3 аргументами: N, D, G, создающую словарь с заданным числом N элементов: ключи - числа 1,2,…,N, значения – случайные числа, равномерно распределенные в диапазоне значений от D до G.

def ff(N,D,G): sl={}

import random for i in range(N):

sl.update({str(i+1):random.uniform(D,G)}) return sl

3. Разработайте функцию с 4 аргументами, создающую последовательность отсчетов синусоидального сигнала с заданными параметрами: амплитуда, период, фаза, число отсчетов (аргументы функции). Сигнал должен быть возвращен в вызывающую программу в виде списка.

а)

def ff0(A,T,fi,N): t=0;f=1000;y=[] for k in range(N):

i=0 while i<f:

t=t+T/f

y.append(A*math.sin(t*2*math.pi/T+fi))

1

i+=1

return y

б)

#первое значение из списка t - первое значение времени, A - амплитуда, fi - фаза сдвига, N - число отсчетов (число периодов), T - продолжительность периода def ff0(A,T,fi,N):

t=0;f=1000;y=[];tt=[] for k in range(N):

i=0 while i<f:

t=t+T/f; tt.append(t) y.append(A*math.sin(t*2*math.pi/T+fi)) i+=1

return [tt,y] [t,y]=ff0(5,3,math.pi/2,2) pylab.plot(t,y) pylab.show()

в)

>>>def ff0(A,T,fi,N): n=0;y=[]

for k in range(T): i=0

while i<N/T: n=n+2*math.pi*T/N

y.append(A*math.sin(n+fi))

i+=1

return y

>>>y=ff0(5,5,math.pi,200)

>>>pylab.plot(y)

>>>pylab.show()

4. Создайте список с последовательностью из 100 значений входного синусоидального сигнала с амплитудой 2 и фазой 0.35.

def ff0(A,fi,N): n=0;y=[];i=0 while i<N:

n=n+2*math.pi/N

y.append(A*math.sin(n+fi))

i+=1 return y

y=ff0(2,0.35,100)

pylab.plot(y)

pylab.show()

5. Разработайте функцию с 3 аргументами, создающую последовательность отсчетов случайного, нормально распределенного сигнала типа белого шума с заданными параметрами: математическое ожидание и дисперсия, число отсчетов (аргументы функции).

def f1(m,D,N):

import random, math

2

y=[]

for i in range(N): y.append(random.gauss(m,math.sqrt(D)))

return y

6.Разработайте функцию с 2 параметрами: х и А, реализующую преобразование входного сигнала x по формуле: y=i, если i*A<=x<(i+1)*A, y=-i, если -(i+1)*A>=x>-i*A.

def f2(A,x): y=[]

for xx in x: i=x.index(xx)+1

if i*A<=xx and xx<(i+1)*A: y.append(i) elif -(i+1)*A>=xx and xx>-i*A: y.append(-i) else: y.append(0)

return y

7.Разработайте функцию с 3 параметрами: х, yT и T, реализующую расчет по значениям последовательности значений входного сигнала х значений выходного сигнала по формуле: y= (x+T*yТ)/(T+1). Рассчитайте последовательность значений выходных сигналов, принимая Т=3 и yT равным предыдущему в последовательности вычисленных значений y (для первого значения х принять yT=0).

>>> def f3(x,yT,T): y=((x+T*yT)/(T+1)) return y

>>> x=range(100)

>>> y=[]

>>> for i in range(len(x)):

if i==0: y.append(f3(x[i],0,3)) else: y.append(f3(x[i],y[i-1],3))

8.Разработайте функцию c 3 аргументами, реализующую запись заданной последовательности – списка или кортежа (аргумент функции) в текстовый файл с заданным именем (аргумент функции) с заданным числом (аргумент функции) элементов на строке файла, разделенных запятыми.

def f5(obj,N,file): import math

fp=open(file+'.txt','w') k=1; i=1

while k<len(obj)/N: while i<k*N:

fp.write(str(obj[i-1])+',') i+=1

fp.write(str(obj[i-1])) i+=1

fp.write('\n')

k+=1

if k==math.ceil(len(obj)/N): while i<len(obj):

fp.write(str(obj[i-1])+',') i+=1

3

fp.write(str(obj[i-1])) fp.close()

9. Разработайте функцию с 3 аргументами, которая на основе заданной целочисленной последовательности (список или кортеж) – аргумент функции - формирует два текстовых файла с заданными именами (аргументы функции), причем в первый файл записывает из исходной последовательности четные значения, а во второй – нечетные.

def f6(obj,file1,file2): import sys vr_out=sys.stdout

fp1=open(file1+'.txt','w')

sys.stdout=fp1 for i in obj[::2]: print(i)

fp1.close()

fp2=open(file2+'.txt','w')

sys.stdout=fp2 for i in obj[1::2]:

print(i)

fp2.close() sys.stdout=vr_out

10.Разработайте функцию, которая получает символьную строку с текстом на русском языке (аргумент функции), создаёт на её основе подстроку, содержащую только согласные буквы, отображает её на экране и записывает ее в файл с заданным именем (аргумент функции).

def f7(st,file): st2=''

for i in st:

if i in 'бвгджзйклмнпрстфхцчшщъь': st2+=i

else:

continue

print(st2)

fp=open(file+'.txt','w')

fp.write(st2)

fp.close()

11.Разработайте функцию с 2 аргументами, которая для заданного словаря (аргумент функции) с любыми ключами и с числовыми значениями создаёт новый словарь с теми же ключами и со значениями, равными синусам от значений из входного словаря, и записывает новый словарь в бинарный файл с заданным именем (аргумент функции). Проверьте функцию на примере двух разных входных словарей.

def f8(sl,file): import math sl2=dict() for i in sl:

sl2.update({i:math.sin(sl[i])}) import pickle fp=open(file+'.bin','wb') pickle.dump(sl2,fp)

4

fp.close() return sl2

12.Разработайте функцию с двумя аргументами: имя некоторого объектапоследовательности и имя текстового файла вывода. Функция должна осуществлять запись указанного объекта в заданный файл вывода, причем если объект – это символьная строка, то его надо записать в файл на одной строке, если объект – список или кортеж, то каждый элемент должен записываться на одной строке файла.

def f9(obj,file): fp=open(file+'.txt','w') if type('')==type(obj):

fp.write(obj)

elif type(())==type(obj) or type([])==type(obj): for k in obj:

fp.write(str(k)+'\n')

else: print('Объект непремлемого типа') fp.close()

13.Разработайте функцию с 4 аргументами: K, N, A, B, создающую список с K элементами – вложенными списками, содержащими по N случайных элементов, равномерно распределенных в диапазоне от A до B. Результаты работы функции:

сформированный список и кортеж со средними значениями элементов созданного списка. def f10(K,N,A,B):

import random sp=[]

for i in range(K): spn=[]

for k in range(N): spn.append(random.uniform(A,B))

sp.append(spn) return sp

14.Разработайте функцию, которая по заданному словарю (аргумент функции) с числовыми ключами рассчитывает сумму значений для ключей из заданного кортежа (аргумент функции).

def f11(sl,kort): sm=0

for k in kort:

if k in sl: sm+=sl[k]

else:

continue

return sm

15.Создайте список со 100 значениями входного сигнала х – случайными, треугольно (triangle) распределенными числами в диапазоне значений от -5 до 25.

from random import triangular

# Задаем моду распределения mode = 0

COUNT = 100

5

triangular_dist = [triangular(-5, 25, mode) for _ in range(COUNT)] print(triangular_dist)

16. Разработайте функцию, которая по входному списку или кортежу с целочисленными элементами (аргумент функции) определяет число повторений каждого числа и формирует словарь с элементами: ключи – целые числа из входного объекта, значения – целые числа повторений значения ключа во входном объекте. Этот словарь должен возвращаться в вызывающую программу.

def countOccurances(initial_values):

# Создаем словарь

occurences = dict((element, initial_values.count(element)) for element in set(initial_values)) return occurences

17. Разработайте функцию с аргументом – именем текстового файла с записанным в него объектом – совокупностью строк, чисел, списков и т.д. В каждой строке данные разделяются запятыми. Функция должна считывать объект из файла, формировать и возвращать список, в котором каждый элемент – это список элементов из соответствующей строки файла. Сформированный список должен возвращаться в качестве результата функции.

def readObjectsFromFile(file_name): result = []

with open(file_name, 'r') as f:

#Читаем все строки из файла lines = f.readlines()

#Обрабатываем каждую строку

#Но сначала определяем тип объекта записи - и в зависимости от этого выполняем то или иное действие

first_element = lines[0].split(',')[0] type = 'строка'

if first_element.isdigit(): type = 'число'

elif first_element[0] == '[': type = 'список'

elif first_element[0] == '(': type = 'кортеж'

elif first_element[0] == '{': type = 'множество'

#Читаем объекты в результирующий список в зависимости от типа объекта

if type == 'строка': for line in lines:

result.append([element.rstrip() for element in line.split(',')]) elif type == 'число':

for line in lines: sub_list = []

for element in line.split(','):

# Отдельно проверяем какое это число - целое или вещественное? if float(element.rstrip()) % 1 == 0:

sub_list.append(int(element.rstrip())) else:

sub_list.append(float(element.rstrip()))

6

result.append(sub_list) elif type == 'список':

for line in lines:

sub_list = [element.replace('[', '').replace(']', '').rstrip() for element in line.split('],[')] for obj in sub_list:

result.append(obj.split(',')) elif type == 'кортеж':

for line in lines:

sub_list = [element.replace('(', '').replace(')', '').rstrip() for element in line.split('),(')] for obj in sub_list:

result.append(tuple(obj.split(','))) elif type == 'множество':

for line in lines:

sub_list = [element.replace('{', '').replace('}', '').rstrip() for element in line.split('},{')] for obj in sub_list:

result.append(set(obj.split(',')))

# Возвращаем сформированный список return result

18. Составить функцию расчета по выборке, содержащей N наблюдений двух случайных величин: Х1 и Х2, причем Х2 - с целочисленными значениями, оценок условных математического ожидания M(X1|X2) и дисперсии D(Х1|X2) при условии заданного значения Х2. (Предполагаем в данном решении, что N=8*2=16 )

import numpy as np x=[[1,2,3,1,1,2,2,1],[1.1,1.1,1.3,1.1,2.1,1.2,1.2,1.1]]

x2=np.array(x)

 

 

 

#>>> x2

 

 

 

#array([[ 1. , 2. ,

3. ,

1. ,

1. , 2. , 2. , 1. ],

#

[ 1.1, 1.1,

1.3,

1.1,

2.1, 1.2, 1.2, 1.1]])

def f(X, x2_val): X1 = X[0,:] X2 = X[1,:]

X1_sample = X1[X2 == x2_val]

if len(X1_sample)==0: return None, None M = np.mean(X1_sample)

D = np.var(X1_sample) return M, D

[m,d]=f(x2,1.1)

7

Соседние файлы в папке Лабораторные_Python