Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

Jupyter notebook Assignments/Lab_1/Lab_1.ipynb

Views: 17
Kernel: Python 3 (Ubuntu Linux)

Exercise 1. A few things to get started

  • Опишите лямбда-функцию cosecn(x,n), вычисляющую значение функции cosec x=1sinx{\rm cosec\ }x=\dfrac{1}{\sin x} произвольного аргумента x с точностью до n знаков после запятой.

  • Создайте список L из 10 случайных действительных чисел из промежутка [-π\pi; π\pi]. Используйте генераторы списков.

  • Создайте список CosecL, содержащий косекансы аргументов, взятых из списка L, с точностью до четырёх знаков после запятой.

  • "Профильтруйте" полученный список, оставив только положительные значения.

  • Найдите сумму значений и максимальное значение в полученном списке.

Note: functions to generate random numbers in Python

from random import *

  • x = randint(a, b): a random integer from [a; b]

  • x = random(): a random floating point number from [0; 1)

  • x = choice(seq): a random element from the non-empty sequence seq

  • x = sample(population, k): a k-length list of unique elements chosen from the population sequence

See more: https://docs.python.org/3.5/library/random.html

from math import * from random import * f=lambda x,n:round(1/sin(x),n) L=[2*pi*random()-pi for i in range(10)] #while len(L)<10: # L = L + [2*pi*random()-pi] print(L) M=[f(x,4) for x in L] # Здесь лучше будет написать [f(x,4) for x in L], так как номер [i] роли не играет. - Е. М. #for i in range(len(L)): #M=M+[f(L[i],4)] print(M) N=[i for i in M if i>0] # Это действие тоже нужно реализовать с помощью генератора. - Е. М. print(N) print(sum(N)) print(max(N))
[1.9892538954587105, 1.4949390896436547, 1.4420423938461626, -3.0502707326771374, -2.350851451550553, 0.6967556192343469, -2.871951190922033, 0.9712493223674556, -2.4536541194842116, -2.7193158403457067] [1.0944, 1.0029, 1.0083, -10.9655, -1.4067, 1.5583, -3.754, 1.2113, -1.5749, -2.44] [1.0944, 1.0029, 1.0083, 1.5583, 1.2113] 5.8751999999999995 1.5583

Exercise 2. Files

  • Создайте текстовый файл input.txt, содержащий 20 случайных трёхзначных натуральных чисел (по одному в строке).

  • Выберите те из них, сумма цифр которых больше 15. Результат запишите в файл output.txt.

  • Найдите сумму чисел в файле output.txt. Результат добавьте в конец файла в виде строки: "Сумма чисел равна ...".

from random import* M=[randint(100,999) for i in range(20)] f=open('input.txt','w') for i in range(20): f.write(str(M[i])+'\n') print(str(M[i])) f.close() f1=open('output.txt','w') # Здесь нужно открыть файл в режиме записи ('w'), чтобы при повторных запусках M1=[j for j in M if (j%10+(j//10)%10+j//100)>15 ] # информация из него стиралась. - Е. М. f1.write(str(M1)+'\n') f1.close() print(M1) # Нет необходимости открывать файл, если вы считаете сумму как сумму эл-тов списка. - Е. М. print('Сумма чисел равна -',sum(M1)) f2=open('output.txt','a') f2.write('Сумма чисел равна - ' + str(sum(M1))) f2.close()
129 567 251 123 878 476 993 625 789 626 301 913 795 109 750 274 686 775 614 857 [567, 878, 476, 993, 789, 795, 686, 775, 857] Сумма чисел равна - 6816

Home assignment

1. Generators

  • Опишите функцию v2normalize(x), которая по заданному вектору xR2x\in\mathbb{R}^2 возвращает нормированный вектор.

  • Создайте список V из 10 случайных векторов с целочисленными координатами из промежутка [-5; 5].

  • Пронормируйте векторы из списка V.

  • Профильтруйте полученный список, оставив только векторы с положительными координатами.

  • В полученном списке найдите вектор с максимальной суммой координат.

Примечание. Вектор в данной задаче удобно представлять как кортеж.

from random import* def v2normalize(x): m=(x[0]**2+x[1]**2)**(1/2) if m!=0: x[0]=round(x[0]/m,2) x[1]=round(x[1]/m,2) y = (x[0], x[1]) return y L=[[randint(-5, 5) for i in range(2)] for i in range(10)] print(L) L1=[v2normalize(x) for x in L] print(L1) L2=[x for x in L if x[0]>=0 and x[1]>=0] # Нормализовывать здесь уже не нужно. - Е. М. print(L2) S=[x[0]+x[1] for x in L2] max = 0 i=0 while i < len(S): if S[i] > max: max = S[i] nmax = i i=i+1 n1max=L2[nmax] print(S) print(nmax+1) print(max) print(n1max) # Так мы найдём максимальную сумму координат. А нам нужен вектор с макс. суммой. - Е. М.
[[0, 3], [3, 1], [1, 1], [-5, 1], [4, 0], [-2, 3], [-3, 5], [2, -5], [-5, 0], [4, 1]] [(0.0, 1.0), (0.95, 0.32), (0.71, 0.71), (-0.98, 0.2), (1.0, 0.0), (-0.55, 0.83), (-0.51, 0.86), (0.37, -0.93), (-1.0, 0.0), (0.97, 0.24)] [[0.0, 1.0], [0.95, 0.32], [0.71, 0.71], [1.0, 0.0], [0.97, 0.24]] [1.0, 1.27, 1.42, 1.0, 1.21] 3 1.42 [0.71, 0.71]

2. Files

  • Создайте текстовый файл, содержащий произвольный (осмысленный) текст на английском языке. Для этой цели можно воспользоваться, например, сказкой "Алиса в Стране Чудес" Льюиса Кэрролла (файл alice.txt).

  • Подсчитайте частоту встречаемости каждой из 26 букв алфавита в данном тексте, а также символа пробела. Результаты запишите в файл output.txt. Частота вычисляется как отношение числа появлений данной буквы (неважно - строчной или прописной) ко всей длине текста.

  • Сверьте полученные результаты со статистикой, приведённой здесь: http://www.math.cornell.edu/~mec/2003-2004/cryptography/subs/frequencies.html

M='abcdefghijklmnopqrstuvwxyz ' for x in M: K=0 L=0 f=open('alice.txt','r') for line in f: L=L+len(line[:-1]) K=K+line.count(x) print('Частота встречаемости '+x, K/(L+1)) # print('Количество пробелов',K) f.close() # Для пробела всё ОК. - Е. М.
Частота встречаемости a 0.05758232113026983 Частота встречаемости b 0.009775191823098049 Частота встречаемости c 0.01588380191964665 Частота встречаемости d 0.033487641212944876 Частота встречаемости e 0.09455250714912654 Частота встречаемости f 0.013625810470285115 Частота встречаемости g 0.01728531385373312 Частота встречаемости h 0.05007219909963476 Частота встречаемости i 0.04787791273818624 Частота встречаемости j 0.0009768113479996603 Частота встречаемости k 0.007602140490953878 Частота встречаемости l 0.03263116169766981 Частота встречаемости m 0.01348424360825618 Частота встречаемости n 0.04871315722415697 Частота встречаемости o 0.05635068943061808 Частота встречаемости p 0.010306067555706561 Частота встречаемости q 0.0008847928876808517 Частота встречаемости r 0.037373651575639176 Частота встречаемости s 0.044359976216767176 Частота встречаемости t 0.07217786460545315 Частота встречаемости u 0.02403097482941193 Частота встречаемости v 0.005690987853563238 Частота встречаемости w 0.017221608765820098 Частота встречаемости x 0.001019281406608341 Частота встречаемости y 0.015211359325009203 Частота встречаемости z 0.0005450324188114046 Частота встречаемости 0.18100031144709647

Бонусные задания

  • Дана матрица M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]].

  • Выведите матрицу по строкам (каждая строка - список) с помощью join и генераторов списков. Код должен занимать одну строку.

  • Попробуйте записать «красивый вывод» матрицы (только элементы и пробелы) в одну строку кода с помощью join и генераторов списков.