如果语句检查错误



我有一个带有if语句的代码,该代码在径向中找到了用户定义角度的余弦值。我把代码打到泰勒级数,最多12!。代码为;

import numpy as np
import matplotlib.pyplot as plt
import math 
teta = np.arange(-8*np.pi, 8*np.pi+0.1,0.1)
P_ = [None]*len(teta)
ang_ = np.zeros(len(teta))
def func(teta):
for i in range(len(teta)):
if teta[i]<=0: 
if abs(teta[i])%np.pi>=np.pi:
ang_[i] = (abs(teta[i])%(2*np.pi)-2*np.pi)*(-1)
else:
ang_[i] = (abs(teta[i])%(2*np.pi))*(-1)
else:
if teta[i]%2*np.pi >= np.pi: 
ang_[i] = teta[i] % (2*np.pi) - 2*np.pi
else:
ang_[i] = teta[i] % (2*np.pi)
P_[i] = 1 - (1/2)*((ang_[i])**2) + (1/math.factorial(4))*((ang_[i])**4) - (1/math.factorial(6))*((ang_[i])**6) + (1/math.factorial(8))*((ang_[i])**8) - (1/math.factorial(10))*((ang_[i])**10) + (1/math.factorial(12))*((ang_[i])**12)
return P_
plt.plot(teta, func(teta), "b:+")
plt.plot(teta, np.cos(teta), "k--")
plt.grid()
plt.show

teta角度大于6或-6时,代码无法计算。当我通过调试步骤检查代码时,teta角是-6.18319,跳过if语句

if abs(teta[i])%2*np.pi >= np.pi and teta[i]<-np.pi: 

并跳转到

elif abs(teta[i])%np.pi >= 0 and teta[i]<0:

并将teta值横向编码到另一个名为ang_的角度阵列,由确定

ang_[i] = (abs(teta[i])%(2*np.pi))*(-1)

因此,函数的结果超过2。如果你能帮我,我会很高兴的。非常感谢。

我发现了错误,正确的代码是;

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Mar  1 13:54:51 2022
@author: burak
"""
import numpy as np
import matplotlib.pyplot as plt
import math 
user_degree = int(input('cosine value of angle in degree')) / 180 * np.pi
teta = np.arange(-user_degree, user_degree+0.1,0.1)
P_ = [None]*len(teta)
ang_ = np.zeros(len(teta))
def func(teta):
for i in range(len(teta)):
if teta[i]<=0: 
teta = abs(teta)
if teta[i]%(2*np.pi) >= np.pi:
ang_[i] = (teta[i]%(2*np.pi)) - 2 * np.pi
else:
ang_[i] = (teta[i]%(2*np.pi))
else:
if teta[i]%(2*np.pi) >= np.pi:
ang_[i] = teta[i] % (2*np.pi) - 2 * np.pi
else:
ang_[i] = teta[i] % (2*np.pi)
P_[i] = 1 - (1/2)*((ang_[i])**2) + (1/math.factorial(4))*((ang_[i])**4) - (1/math.factorial(6))*((ang_[i])**6) + (1/math.factorial(8))*((ang_[i])**8) - (1/math.factorial(10))*((ang_[i])**10) + (1/math.factorial(12))*((ang_[i])**12)
return P_
plt.plot(teta, func(teta), "b:+")
plt.plot(teta, np.cos(teta), "k--")
plt.grid()
plt.show

该代码的目的是获得给定角度的正确余弦值。我问qs代码不能进入正确的if条件。例如,当角度大于np.pi时,resul大于1。我更改了代码,当角度小于零且大于np.pi时,代码计算角度的绝对值。然后步骤移至正确的状态。下一个计算是当teta的绝对值大于np.pi时,代码子串为np.pi。最后,泰勒级数计算与np.cos((计算相匹配。

最新更新