Форум сайта python.su
0
Простая функция, которая выводит члены последовательности
(sinx - cosx)/x до тех пор пока последний элемент не становится меньше 0.01
import math
def calc():
x = 1
sinx = math.sin(x)
cosx = math.cos(x)
while (sinx - cosx)/x > 0.01:
print(x, (sinx - cosx)/x)
x += 1
def check():
x = 1
sinx = math.sin(x)
cosx = math.cos(x)
print("x is", x)
print("sinx is", sinx, "cosx is", cosx)
print("(sinx - cosx) is", sinx - cosx)
print("(sinx - cosx)/x is", (sinx - cosx)/x)
print("---Start calc()---")
calc()
print("---Start check()---")
check()
---Start calc()---
1 0.30116867893975685
2 0.15058433946987843
3 0.10038955964658562
4 0.07529216973493921
5 0.06023373578795137
6 0.05019477982329281
7 0.04302409699139383
8 0.037646084867469606
9 0.03346318654886187
10 0.030116867893975684
11 0.02737897081270517
12 0.025097389911646405
13 0.023166821456904373
14 0.021512048495696916
15 0.020077911929317124
16 0.018823042433734803
17 0.017715804643515107
18 0.016731593274430936
19 0.015850983102092465
20 0.015058433946987842
21 0.014341365663797945
22 0.013689485406352585
23 0.01309429038868508
24 0.012548694955823203
25 0.012046747157590274
26 0.011583410728452186
27 0.01115439551628729
28 0.010756024247848458
29 0.010385126859991616
30 0.010038955964658562
---Start check()---
x is 1
sinx is 0.8414709848078965 cosx is 0.5403023058681397
(sinx - cosx) is 0.30116867893975685
(sinx - cosx)/x is 0.30116867893975685
---Start calc()---
1 0.30116867893975685
2 0.15058433946987843
3 0.10038955964658562
4 0.07529216973493921
5 0.06023373578795137
6 0.05019477982329281
7 0.04302409699139383
8 0.037646084867469606
9 0.03346318654886187
10 0.030116867893975684
11 0.02737897081270517
12 0.025097389911646405
13 0.023166821456904373
14 0.021512048495696916
15 0.020077911929317124
16 0.018823042433734803
17 0.017715804643515107
18 0.016731593274430936
19 0.015850983102092465
20 0.015058433946987842
21 0.014341365663797945
22 0.013689485406352585
23 0.01309429038868508
24 0.012548694955823203
25 0.012046747157590274
26 0.011583410728452186
27 0.01115439551628729
28 0.010756024247848458
29 0.010385126859991616
30 0.010038955964658562
---Start check()---
x is 2
sinx is 0.9092974268256817 cosx is -0.4161468365471424
(sinx - cosx) is 1.325444263372824
(sinx - cosx)/x is 0.662722131686412
Офлайн
47
rudmнафига это?
sinx = math.sin(x)
cosx = math.cos(x)
Офлайн
568
rudm,
может я понял неправильно, но вроде как Вы ожидаете, что при изменении х в цикле
x += 1
Офлайн
0
2FishHook
>вы ожидаете, что синхронно изменятся значения sinx и cosx
>правильно?
Да, верно. Очевидно, я не вижу какую то ошибку в коде. Или неверное понимаю принцип работы программы.
Офлайн
47
чтобы работало надо так
from math import cos, sin def calc(): x = 1 while (sin(x) - cos(x))/x > 0.01: print(x, (sin(x) - cos(x))/x) x += 1
Офлайн
857
>>> import itertools as itools >>> import operator as op >>> import math >>> >>> g = ((x, (math.sin(x) - math.cos(x)) / x) for x in itools.count(1)) >>> it = itools.takewhile(lambda y: op.itemgetter(1)(y) >= 0.01, g) >>> >>> for x, y in it: ... print(x, y) ... 1 0.30116867893975674 2 0.662722131686412 3 0.3770375015534375 >>>
Офлайн
0
Хм, что то не вижу разницы между
import math
math.sin(x)
math.cos(x)
from math import cos, sin
sin(x)
cos(x)
Офлайн
47
потому что sinx и cosx не меняются в цикле, чтоб работало, надо продублировать их присвоение в цикле
Отредактировано bismigalis (Июнь 20, 2013 11:22:45)
Офлайн
0
Спасибо, при внимательном взгляде, разобрался. Благодарю за помощь.
Офлайн