Программирование. Работа. Напишем программу для вычисления корня нелинейного уравнения y(х) х 2 4
Скачать 66.46 Kb.
|
напишем программу для вычисления корня нелинейного уравнения y(х) = х^2 – 4 from math import * a = -10 b = 10 while (b-a) > 10**(-10): c = (a+b)/2 f_a = a**2-4 f_b = b**2-4 f_c = c**2-4 if f_a*f_c > 0: a = c else: b = c print ((a+b)/2) Перепишем программу с помощью функции: from math import * def funkcija(x): f = x**2+4*x+4 return f a = -4 b = 0 while (b-a) > 10**(-10): c = (a+b)/2 f_a = funkcija(a) f_b = funkcija(b) f_c = funkcija(c) if f_a*f_c > 0: a = c else: b = c print ((a+b)/2) Те же самые инструкции можно переписать в виде функции Bisection, которой передаются данные из основной программы, и которая возвращается корень уравнения с заданной точностью: from math import * def function(x): f = x**2-4 return f def Bisection(a, b, e): while (b-a) > e: c = (a+b)/2 f_a = function(a) f_b = function(b) f_c = function(c) if f_a*f_c > 0: a = c else: b = c return ((a+b)/2) A = -10 B = 10 E = 10**(-15) print (Bisection(A, B, E)) В Python результатом функции может быть только одно значение. Если необходимо в качестве результата выдать значения сразу нескольких переменных, используют кортеж. Продемонстрируем это, дополнив программу вычислением количества шагов, за которые достигается значения корня с заданной точностью: from math import * def function(x): f = x**2-4 return f def Bisection(a, b, e): n = 0 while (b-a) > e: n = n + 1 c = (a+b)/2 f_a = function(a) f_b = function(b) f_c = function(c) if f_a*f_c > 0: a = c else : b = c return ((a+b)/2, n) A = -10 B = 10 E = 10**(-15) print (Bisection(A, B, E)) # -*- coding: cp1251 -*- def summa(a,b): c = a + b return c num1 = int (input ('Введите первое число: ')) num2 = int (input ('Введите второе число: ')) print('Сумма = ',summa(num1 , num2)) Задания 1. Реализовать примеры определения функций, листинг которых приведен в теоретической части. 2. Вычислить значение выражения y(х) в точке х, значение которой ввести с клавиатуры. Выражение задать функцией. Варианты приведены в таблице 1 (номер варианта согласовать с преподавателем). # -*- coding: cp1251 -*- # вариант 15 def f(x): y = x**3-12*x return y x = int (input ('Введите x: ')) print('y = x**3-12*x = ',f(x),' при х = ',x) 3. Вычислить значение выражения y(х,у) в точке (х, у) значение которой ввести с клавиатуры. Выражение задать функцией. Варианты приведены в таблице 2 (номер варианта согласовать с преподавателем). # -*- coding: cp1251 -*- # вариант 1 import math def z1(x,y): y = -math.cos(x+1)+2*y return y def z2(x,y): y = x+math.sin(y)+0.4 return y x = float(input ('Введите x: ')) y = float(input ('Введите y: ')) print('z1= -cos(x+1)+2*y = %.3f при х = %.3f и y = %.3f' % (z1(x,y),x,y)) print('z2 = x+sin(y)+0.4 = %.3f при х = %.3f и y = %.3f' % (z2(x,y),x,y)) 4. Решить задачу, определив дополнительно функцию. Варианты приведены таблице 3 (номер варианта согласовать с преподавателем) Составить программу для нахождения общего количества заданной буквы в трех заданных предложениях. (Определить функцию для расчета количества некоторой буквы в предложении). # -*- coding: cp1251 -*- # вариант 15 import math import random def num_symbol(x,a): return x.count(a) find_symbol='е' a = 'Составить программу для нахождения общего количества заданной буквы в трех заданных предложениях' b = 'Определить функцию для расчета количества некоторой буквы в предложении' c = 'Дан список целых чисел' print('Имеем предложения') print(a) print(b) print(c) print() print('Ищем букву ',find_symbol) print('Число вхождений = ',num_symbol(a,find_symbol) + num_symbol(a,find_symbol) + num_symbol(a,find_symbol)) 5. Дан список целых чисел. Написать функцию, возвращающую... (продолжение условия по варианту в таблице 4). Реализовать двумя способами: 1- функция принимает на вход список, 2- функция принимает на вход переменное число параметров. Вариант 15 стандартное отклонение и максимальное по модулю значение # -*- coding: cp1251 -*- # вариант 15 #import math import numpy as np import statistics def my_func(nums): my_max=nums[0] for x in nums: if abs(x) > abs(my_max): my_max=x return (statistics.stdev(a),my_max) def my_func_1(*args): m=max(*args, key=lambda i: abs(int(i))) n=statistics.stdev(*args) return (n,m) n=10; a = np.random.randint(-100, 50,10) print(a) print(my_func(a)) print(my_func_1(a)) 6. Написать рекурсивную процедуру перевода натурального числа из десятичной системы счисления в (N-ричную. Значение N в основной программе вводится с клавиатуры (2< = N< = 16). # -*- coding: cp1251 -*- def conv(n,r): if n return "0123456789ABCDEF"[n] else: k=n%r return conv(n//r,r)+"0123456789ABCDEF"[k] n=255 r=16 print('в ',r,'системе число ',n,'(10) есть ',conv(n,r)) 7. Написать рекурсивную функцию, определяющую, является ли заданное натуральное число простым (простым называется натуральное число, большее 1, не имеющее других делителей, кроме единицы и самого себя) # -*- coding: cp1251 -*- def isPrime(num, ans = 2): if num < ans*ans: return True if num % ans == 0: return False return isPrime(num, ans + 1) n = int(input("Введите число: ")) if isPrime(n): print('Число ',n,' простое') else: print('Число ',n,' не простое') 8. Дан список вещественных чисел. Используя lambda-функцию и функцию mар выведите список остатков от деления этих чисел на 7. # -*- coding: cp1251 -*- import numpy as np n=10; a = np.random.randint(1, 20,n) b = list(map(lambda x: x%7, a)) print('Исходный список чисел') print(a) print('Список остатков от деления чисел на 7') print(b) 9. Дан список имен детей: ['катя', 'маша', 'таня', 'саша']. Сделайте так, чтобы имена начинались с заглавной буквы. # -*- coding: cp1251 -*- a = ['катя', 'маша', 'таня', 'саша'] b = list(map(lambda x: x.title(), a)) print('Исходный список') print(a) print('Конечный список') print(b) 10. Попробуйте переписать следующий код через mар и lambda-функцию. Он принимает список реальных имён и заменяет их прозвищами, используя надёжный метод. # -*- coding: cp1251 -*- a = ['Маша', 'Петя', 'Вася','Таня'] b = list(map(lambda x: hash(x), a)) print('Исходный список') print(a) print('Конечный список') print(b) 11. Следующий пример считает, как часто слово «сети» встречается в списке строк: Перепишите этот же код с использованием reduce и lambda-функции. # -*- coding: cp1251 -*- from functools import reduce sentences = ['научиться плести рыболовные сети', 'обучать нейронные сети', 'паук ловит в сети мух'] print ('число вхождений = ',reduce(lambda a,x: a+x.count('сети'),sentences,0)) 12. Дан список натуральных чисел. Вывести список чисел, кратных 7, используя lambda-функцию и filter. # -*- coding: cp1251 -*- my_list = [12, 65, 49, 39, 102, 14, 221, 50, 70] result = list(filter(lambda x: (x % 7 == 0), my_list)) print ('Список чисел, кратных 7 = ',result) 13. Дано три списка: 1- имена абитуриентов, 2 - баллы за ЕГЭ по математике, 3- баллы за ЕГЭ по русскому, 4 - баллы за ЕГЭ по информатике. Составить список в формате: [('Василий Акимович Кузнецов',85,42,65), ('Петр Николаевич Чириков',79,49,78),...]. list_family = ['Василий Акимович Кузнецов', 'Петр Николаевич Чириков','Иван Петрович Судаков','Ирина Николаевна Прохорова'] list_ball_1 = [85,42,65,76] list_ball_2 = [22,23,24,25] list_ball_3 = [44,45,46,47] result = list(zip(list_family, list_ball_1, list_ball_2,list_ball_3)) print(result) print() for row in result: for elem in row: print(elem) |