我写了一个程序来解决 y = a^x
然后将它投影到图形上。问题是每当 a < 1
我得到错误:
ValueError:以 10 为底的 int () 的无效文字。
有什么建议么?
这是回溯:
Traceback (most recent call last):
File "C:\Users\kasutaja\Desktop\EksponentfunktsioonTEST - koopia.py", line 13, in <module>
if int(a) < 0:
ValueError: invalid literal for int() with base 10: '0.3'
每当我输入一个小于 1 但大于 0 的数字时,问题就会出现。对于这个例子,它是 0.3 。
这是我的代码:
# y = a^x
import time
import math
import sys
import os
import subprocess
import matplotlib.pyplot as plt
print ("y = a^x")
print ("")
a = input ("Enter 'a' ")
print ("")
if int(a) < 0:
print ("'a' is negative, no solution")
elif int(a) == 1:
print ("'a' is equal with 1, no solution")
else:
fig = plt.figure ()
x = [-2,-1.75,-1.5,-1.25,-1,-0.75,-0.5,-0.25,0,0.25,0.5,0.75,1,1.25,1.5,1.75,2]
y = [int(a)**(-2),int(a)**(-1.75),int(a)**(-1.5),int(a)**(-1.25),
int(a)**(-1),int(a)**(-0.75),int(a)**(-0.5),int(a)**(-0.25),
int(a)**(0),int(a)**(0.25),int(a)**(0.5),int(a)**(0.75),
int(a)**1,int(a)**(1.25),int(a)**(1.5),int(a)**(1.75), int(a)**(2)]
ax = fig.add_subplot(1,1,1)
ax.set_title('y = a**x')
ax.plot(x,y)
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')
ax.spines['left'].set_smart_bounds(True)
ax.spines['bottom'].set_smart_bounds(True)
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
plt.savefig("graph.png")
subprocess.Popen('explorer "C:\\Users\\kasutaja\\desktop\\graph.png"')
def restart_program():
python = sys.executable
os.execl(python, python, * sys.argv)
if __name__ == "__main__":
answer = input("Restart program? ")
if answer.strip() in "YES yes Yes y Y".split():
restart_program()
else:
os.remove("C:\\Users\\kasutaja\\desktop\\graph.png")
原文由 user1901162 发布,翻译遵循 CC BY-SA 4.0 许可协议
回答:
你的回溯告诉你
int()
取整数,你试图给出一个小数,所以你需要使用float()
:这应该按预期工作:
计算机以各种不同的方式存储数字。 Python有两个主要的。存储整数 (ℤ) 的整数和存储实数 (ℝ) 的浮点数。您需要根据需要使用正确的。
(请注意,Python 非常擅长从您那里抽象出来,例如,大多数其他语言也有双精度浮点数,但您不必担心。自 3.0 以来,Python 也会自动转换整数如果你把它们分开就会浮起来,所以它实际上很容易使用。)
在我们进行回溯之前之前对答案的猜测:
你的问题是无论你输入什么都不能转换成数字。这可能是由很多事情引起的,例如:
在
-
和1
之间添加一个空格会导致字符串不能被正确解析为数字。当然,这只是一个示例,您必须告诉我们您提供的意见,我们才能确定问题出在哪里。代码风格建议:
这是一个非常糟糕的编码习惯的例子。在您一次又一次复制某些内容的地方出了问题。首先,你使用
int(a)
很多次,无论你在哪里这样做,你都应该将值赋给一个变量,然后使用它,避免再次输入(并强制计算机计算)该值并且再次:在此示例中,我将值重新分配给
a
,用我们要使用的新值覆盖旧值。这段代码产生了与上面的怪物相同的结果,没有大量重复写出相同的东西。这是一个简单的 列表理解。这也意味着如果你编辑
x
,你不需要对y
做任何事情,它自然会更新以适应。另请注意, Python 风格指南 PEP-8 强烈建议您在进行函数调用时不要在标识符和括号之间留有空格。