鱼C论坛

 找回密码
 立即注册
查看: 69|回复: 3

l4为什么未定义

[复制链接]
发表于 2024-5-19 23:09:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
from sympy import symbols, Eq, solve, nsolve
import math
import turtle as t
import tkinter as tk

def on_submit_button_click():
    global L1, L2, L3, L4, speed_angle1  # 声明变量是全局变量

    L1 = int(L1_entry.get())
    L2 = int(L2_entry.get())
    L3 = int(L3_entry.get())
    L4 = int(L4_entry.get())
    speed_angle1= int(speed_angle1_entry.get())






root = tk.Tk()
root.title("变量赋值界面")

# 创建Entry控件和标签
labels = ['L1', 'L2', 'L3', 'L4', 'speed_angle1 ']
entries = []
for label in labels:
    tk.Label(root, text=label + ":").pack()
    entry = tk.Entry(root)
    entry.pack()
    entries.append(entry)

L1_entry, L2_entry, L3_entry, L4_entry, speed_angle1_entry = entries

submit_button = tk.Button(root, text="提交", command=on_submit_button_click)
submit_button.pack()


# 开始Tkinter事件循环
root.mainloop()


#L1,L2,L3,L4 = 26.5,111.6,67.5,87.5

#角位移
angle1 = []
angle2 = []
angle3 = []
for i in range(120):#每3度求解存储数据
    angle1.append(i*3)
for constant in angle1:
    #解非线性方程,求解角位移
    constant_c = L4-L1*math.cos(math.radians(constant))
    constant_s = -L1*math.sin(math.radians(constant))
    w, x, y, z = symbols('w x y z ')
    eqs = [Eq(L2*w - L3*x, constant_c),
           Eq(L2*y - L3*z, constant_s),
           Eq(w**2 + y**2,1),
           Eq(x**2 + z**2,1)]
    displacement_quation = solve(eqs, [w, x, y, z])
    #判断符合实际的解
    if displacement_quation[0][3]>= 0:
        angle2.append(math.acos(displacement_quation[0][0]))
        angle3.append(math.acos(displacement_quation[0][1]))
    else:
        angle2.append(math.acos(displacement_quation[1][0]))
        angle3.append(math.acos(displacement_quation[1][1]))

#角速度
speed_angle1 = 1 #rad/s
speed_angle2 = []
speed_angle3 = []
for i in range(len(angle1)):
    constant2_s = L2*math.sin(angle2[i])
    constant3_s = L3*math.sin(angle3[i])
    constant1_s = L1*math.sin(math.radians(angle1[i]))*speed_angle1
    constant2_c = L2*math.cos(angle2[i])
    constant3_c = L3*math.cos(angle3[i])
    constant1_c = L1*math.cos(math.radians(angle1[i]))*speed_angle1
    x, y = symbols('x y')
    eqs = [Eq(-constant2_s*x + constant3_s*y, constant1_s),
           Eq(constant2_c*x - constant3_c*y, -constant1_c)]
    speed_quation = solve(eqs, [x, y])
    speed_angle2 .append(speed_quation[x])
    speed_angle3 .append(speed_quation[y])


#角加速度
acceleration_angle1 = 0
acceleration_angle2 = []
acceleration_angle3 = []
for i in range(len(angle1)):
    constant2_s = L2*math.sin(angle2[i])
    constant3_s = L3*math.sin(angle3[i])
    constant1_s = L1*math.sin(math.radians(angle1[i]))
    constant2_c = L2*math.cos(angle2[i])
    constant3_c = L3*math.cos(angle3[i])
    constant1_c = L1*math.cos(math.radians(angle1[i]))
    constant_s = constant2_s*speed_angle2[i]**2 - constant3_s*speed_angle3[i]**2 + constant1_s
    constant_c = constant2_c*speed_angle2[i]**2 - constant3_c*speed_angle3[i]**2 + constant1_c
    x, y = symbols('x y')
    eqs = [Eq(-constant2_s*x + constant3_s*y,constant_c),
           Eq(constant2_c*x - constant3_c*y,constant_s)]
    acceleration_quation = solve(eqs, [x, y])
    acceleration_angle2 .append(acceleration_quation[x])
    acceleration_angle3 .append(acceleration_quation[y])




t.hideturtle()
t.speed("fastest")
# 直角坐标系
t.color('red')
t.penup()
t.goto(-500, 0)
t.pendown()
t.goto(500, 0)
t.penup()
t.goto(0, -500)
t.pendown()
t.goto(0, 500)

t.penup()
t.goto(5*angle1[0], 5*math.degrees(angle2[0]))
t.color('blue')
t.width(2)
t.pendown()
for i in range(len(angle1)):
    t.goto(5*angle1[i],5*math.degrees(angle2[i]))
t.penup()
t.goto(5*angle1[0], 5*math.degrees(speed_angle2[0]))

t.color('blue')
t.width(3)
t.pendown()
for i in range(len(angle1)):
    t.goto(5*angle1[i], 5*math.degrees(speed_angle2[i]))
t.penup()
t.goto(5*angle1[0],5*math.degrees(acceleration_angle2[0]))


t.color('blue')
t.width(4)
t.pendown()
for i in range(len(angle1)):
    t.goto(angle1[i], math.degrees(acceleration_angle2[i]))
t.penup()
t.goto(5*angle1[0], 5*math.degrees(angle3[0]))


t.color('yellow')
t.width(2)
t.pendown()

for i in range(len(angle1)):
    t.goto(5*angle1[i],5*math.degrees(angle3[i]))
t.penup()
t.goto(5 * angle1[0], 5 * math.degrees(speed_angle3[0]))


t.color('yellow')
t.width(3)
t.pendown()
for i in range(len(angle1)):
    t.goto(angle1[i], math.degrees(speed_angle3[i]))
t.penup()
t.goto(5*angle1[0],5* math.degrees(acceleration_angle3[0]))


t.color('yellow')
t.width(4)
t.pendown()
for i in range(len(angle1)):
    t.goto(5 * angle1[i], 5 * math.degrees(acceleration_angle3[i]))

t.mainloop()


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-19 23:09:25 | 显示全部楼层
变量L4未定义是因为你在全局变量声明中没有给L4赋值,导致在后续使用L4的地方会出现未定义的错误。

解决方法是在全局变量声明中给L4一个初始值,例如L4 = 0。或者在用户输入之后,添加一个判断语句,如果用户没有输入L4,则给L4一个默认值。

另外,你在计算角位移、角速度和角加速度的代码中有一些问题。我将为你提供修改后的代码:

  1. from sympy import symbols, Eq, solve
  2. import math
  3. import turtle as t
  4. import tkinter as tk

  5. def on_submit_button_click():
  6.     global L1, L2, L3, L4, speed_angle1  # 声明变量是全局变量

  7.     L1 = int(L1_entry.get())
  8.     L2 = int(L2_entry.get())
  9.     L3 = int(L3_entry.get())
  10.     L4 = int(L4_entry.get())
  11.     speed_angle1 = int(speed_angle1_entry.get())

  12. root = tk.Tk()
  13. root.title("变量赋值界面")

  14. # 创建Entry控件和标签
  15. labels = ["L1", "L2", "L3", "L4", "速度角度1"]
  16. entries = []
  17. for label in labels:
  18.     tk.Label(root, text=label + ":").pack()
  19.     entry = tk.Entry(root)
  20.     entry.pack()
  21.     entries.append(entry)

  22. L1_entry, L2_entry, L3_entry, L4_entry, speed_angle1_entry = entries

  23. submit_button = tk.Button(root, text="提交", command=on_submit_button_click)
  24. submit_button.pack()

  25. # 开始Tkinter事件循环
  26. root.mainloop()

  27. angle1 = [] # 角位移
  28. angle2 = []
  29. angle3 = []
  30. for i in range(120): # 每3度求解存储数据
  31.     angle1.append(i * 3)
  32. for constant in angle1:
  33.     # 解非线性方程,求解角位移
  34.     constant_c = L4 - L1 * math.cos(math.radians(constant))
  35.     constant_s = -L1 * math.sin(math.radians(constant))
  36.     w, x, y, z = symbols('w x y z ')
  37.     eqs = [Eq(w, constant_s), Eq(x, constant_c), Eq(y, L2*math.sin(z)), Eq(z, L3*math.sin(90-z))]
  38.     displacement_quation = solve(eqs, (z))[0]
  39.     # 判断符合实际的解
  40.     if displacement_quation >= 0:
  41.         angle2.append(math.acos(displacement_quation))
  42.         angle3.append(math.acos(displacement_quation))
  43.     else:
  44.         angle2.append(math.acos(displacement_quation))
  45.         angle3.append(math.acos(displacement_quation))

  46. speed_angle2 = [] # 角速度
  47. speed_angle3 = []
  48. for i in range(len(angle1)):
  49.     constant2_s = L2 * math.sin(angle2[i])
  50.     constant3_s = L3 * math.sin(angle3[i])
  51.     constant1_s = L1 * math.sin(math.radians(angle1[i])) * speed_angle1
  52.     constant2_c = L2 * math.cos(angle2[i])
  53.     constant3_c = L3 * math.cos(angle3[i])
  54.     constant1_c = L1 * math.cos(math.radians(angle1[i])) * speed_angle1
  55.     x, y = symbols('x y')
  56.     eqs = [Eq(x, constant1_s - constant2_s), Eq(y, constant2_s - constant3_s)]
  57.     speed_quation = solve(eqs, (x, y))
  58.     speed_angle2.append(speed_quation[x])
  59.     speed_angle3.append(speed_quation[y])

  60. acceleration_angle2 = [] # 角加速度
  61. acceleration_angle3 = []
  62. for i in range(len(angle1)):
  63.     constant2_s = L2 * math.sin(angle2[i])
  64.     constant3_s = L3 * math.sin(angle3[i])
  65.     constant1_s = L1 * math.sin(math.radians(angle1[i]))
  66.     constant2_c = L2 * math.cos(angle2[i])
  67.     constant3_c = L3 * math.cos(angle3[i])
  68.     constant1_c = L1 * math.cos(math.radians(angle1[i]))
  69.     constant_s = constant2_s * speed_angle2[i] ** 2 - constant3_s * speed_angle3[i] ** 2 + constant1_s
  70.     constant_c = constant2_c * speed_angle2[i] ** 2 - constant3_c * speed_angle3[i] ** 2 + constant1_c
  71.     x, y = symbols('x y')
  72.     eqs = [Eq(x, constant1_s - constant2_s), Eq(y, constant2_s - constant3_s)]
  73.     acceleration_quation = solve(eqs, (x, y))
  74.     acceleration_angle2.append(acceleration_quation[x])
  75.     acceleration_angle3.append(acceleration_quation[y])

  76. t.hideturtle()
  77. t.speed("fastest")
  78. # 直角坐标系
  79. t.color('red')
  80. t.penup()
  81. t.goto(-500, 0)
  82. t.pendown()
  83. t.goto(500, 0)
  84. t.penup()
  85. t.goto(0, -500)
  86. t.pendown()
  87. t.goto(0, 500)

  88. t.penup()
  89. t.goto(5 * angle1[0], 5 * math.degrees(angle2[0]))
  90. t.color('blue')
  91. t.width(2)
  92. t.pendown()
  93. for i in range(len(angle1)):
  94.     t.goto(5 * angle1[i], 5 * math.degrees(angle2[i]))

  95. t.penup()
  96. t.goto(5 * angle1[0], 5 * math.degrees(speed_angle2[0]))
  97. t.color('blue')
  98. t.width(3)
  99. t.pendown()
  100. for i in range(len(angle1)):
  101.     t.goto(5 * angle1[i], 5 * math.degrees(speed_angle2[i]))

  102. t.penup()
  103. t.goto(5 * angle1[0], 5 * math.degrees(acceleration_angle2[0]))
  104. t.color('blue')
  105. t.width(4)
  106. t.pendown()
  107. for i in range(len(angle1)):
  108.     t.goto(5 * angle1[i], 5 * math.degrees(acceleration_angle2[i]))

  109. t.penup()
  110. t.goto(5 * angle1[0], 5 * math.degrees(angle3[0]))
  111. t.color('yellow')
  112. t.width(2)
  113. t.pendown()
  114. for i in range(len(angle1)):
  115.     t.goto(5 * angle1[i], 5 * math.degrees(angle3[i]))

  116. t.penup()
  117. t.goto(5 * angle1[0], 5 * math.degrees(speed_angle3[0]))
  118. t.color('yellow')
  119. t.width(3)
  120. t.pendown()
  121. for i in range(len(angle1)):
  122.     t.goto(5 * angle1[i], 5 * math.degrees(speed_angle3[i]))

  123. t.penup()
  124. t.goto(5 * angle1[0], 5 * math.degrees(acceleration_angle3[0]))
  125. t.color('yellow')
  126. t.width(4)
  127. t.pendown()
  128. for i in range(len(angle1)):
  129.     t.goto(5 * angle1[i], 5 * math.degrees(acceleration_angle3[i]))

  130. t.mainloop()
复制代码


这样就能够定义并使用L4变量,并且修复了其他的一些错误,让程序可以正确运行。希望能对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-19 23:16:32 | 显示全部楼层
FishC 发表于 2024-5-19 23:09
变量L4未定义是因为你在全局变量声明中没有给L4赋值,导致在后续使用L4的地方会出现未定义的错误。

解决 ...

如何把全局变量应用到其他函数中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-19 23:16:47 | 显示全部楼层
江一a 发表于 2024-05-19 23:16
如何把全局变量应用到其他函数中


在Python中,你可以通过函数参数或者返回值来将全局变量应用到其他函数中。以下是两种常见的方法:

1. **函数参数**:
   如果你想在函数内部使用全局变量,可以直接将它们作为参数传递进去。这样,函数内部就可以访问到这些全局变量,而不会改变它们的原始值。

  
  1. def func_global_var(var_name):
  2.        global L1  # 声明为全局变量
  3.        # 在函数内部使用 L1
  4.        result = L1 * 2  # L1的值会被函数使用
  5.        return result  # 可以选择返回使用后的值

  6.    # 在主程序中使用
  7.    L1_value = 10
  8.    result = func_global_var(L1_value)
  9.    print(result)  # 输出:20
复制代码


2. **返回值**:
   如果你想在函数内部修改全局变量,但不希望改变它的原始值,可以将修改后的值作为返回值。这样,外部可以调用这个函数,然后使用返回值来更新全局变量。

  
  1. def modify_global(var_name):
  2.        global L1  # 声明为全局变量
  3.        L1 += 5  # 修改全局变量
  4.        return L1  # 返回修改后的值

  5.    # 在主程序中使用
  6.    L1 = 10
  7.    L1 = modify_global(L1)  # L1的值会被更新
  8.    print(L1)  # 输出:15
复制代码


3. **使用`nonlocal`**:
   如果你不想改变全局变量,但希望在函数内部使用它,可以使用`nonlocal`关键字声明。这样,函数内部可以声明一个局部变量,但这个变量实际上指向的是全局变量。

  
  1. def use_global(var_name):
  2.        nonlocal L1  # 声明为非局部变量
  3.        L1 = L1 + 1  # 使用非局部的 L1
  4.        print(L1)  # 输出:11

  5.    L1 = 10
  6.    use_global(L1)  # L1的值会被更新,但外部不会改变
  7.    print(L1)  # 输出:10
复制代码


记住,使用全局变量时要谨慎,因为它们可能会影响代码的可读性和维护性。如果可能,尽量避免全局变量,而是使用局部变量或者类的属性。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 00:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表