gpt4 book ai didi

python - 在 raw_input 中输入 float 、整数或方程来定义变量

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:35 27 4
gpt4 key购买 nike

我已经编写了这个程序,因此可以根据用户定义的值求解两个方程。我将常数 kx 和 ky 定义为 float 。对于范围 - 变量开始和结束 - 我希望用户输入一个数字,或者类似 6 * np.pi (6Pi) 的内容。现在,我收到以下错误。如何定义此变量以允许用户输入多种类型的输入?谢谢!

    Traceback (most recent call last):
File "lab1_2.py", line 11, in <module>
x = np.linspace(start, end, 256, endpoint=True)
File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site- packages/numpy/core/function_base.py", line 80, in linspace
step = (stop-start)/float((num-1))
TypeError: unsupported operand type(s) for -: 'str' and 'float'

代码如下:

from pylab import *
import numpy as np

kx = float(raw_input("kx: "))
ky = float(raw_input("ky: "))

print "Define the range of the output:"
start = float(raw_input("From: "))
end = float((raw_input("To: "))

x = np.linspace(start, end, 256, endpoint=True)
y = np.linspace(start, end, 256, endpoint=True)

dz_dx = ((1 / 2.0) * kx * np.exp((-kx * x) / 2)) * ((2 * np.cos(kx *x)) - (np.sin(kx * x)))
dz_dy = ((1 / 2.0) * ky * np.exp((-ky * y) / 2)) * ((2 * np.cos(ky *y)) - (np.sin(ky * y)))

plot(x, dz_dx, linewidth = 1.0)
plot(y, dz_dy, linewidth = 1.0)
grid(True)


show()

最佳答案

您需要自己解析字符串(ast 模块可能会很有用),或者使用 eval:

>>> s = '6*pi'
>>> eval(s,{'__builtins__': None, 'pi': np.pi})
18.84955592153876

请注意,有一些 nasty things用户可以使用eval来执行此操作。我的解决方案可以保护您免受其中大多数的影响,但不是全部 - 预先检查字符串以确保不存在任何 __ 将使它更加安全(即消除了我所知道的所有漏洞,但可能还有其他漏洞)

关于python - 在 raw_input 中输入 float 、整数或方程来定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14566260/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com