当前位置: 首页 > 面试题库 >

ValueError:int()以10为底的无效文字

锺离声
2023-03-14
问题内容

我编写了一个程序来求解y = a^x,然后将其投影在图形上。问题是,每当a < 1出现错误时:

ValueError:int()以10为底的无效文字。

有什么建议?

这是回溯:

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")

问题答案:

您的回溯告诉您int()采用整数,您试图给出一个十进制数,因此您需要使用float()

a = float(a)

这应该按预期工作:

>>> int(input("Type a number: "))
Type a number: 0.3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '0.3'
>>> float(input("Type a number: "))
Type a number: 0.3
0.3

计算机以各种不同的方式存储数字。Python有两个主要的。存储整数(ℤ)的整数,以及存储实数(ℝ)的浮点数。您需要根据自己的需求使用正确的选项。

(请注意,Python非常擅长将其抽象出来,例如,大多数其他语言也具有双精度浮点数,但您不必担心。从3.0开始,Python还将自动转换整数如果将它们分开就浮起来了,所以实际上很容易使用。)

追溯之前的答案猜测:

您的问题是您输入的内容无法转换为数字。这可能是由很多原因引起的,例如:

>>> int(input("Type a number: "))
Type a number: -1
-1
>>> int(input("Type a number: "))
Type a number: - 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '- 1'

-和之间添加空格1将导致字符串无法正确解析为数字。当然,这只是一个例子,您必须告诉我们您所提供的意见,以便我们能够确定问题所在。

有关代码样式的建议:

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)]

这是一个非常糟糕的编码习惯的例子。在您一次又一次地复制某些内容的地方,出现了错误。首先,您int(a)需要花费大量的时间,无论您在何处执行此操作,都应将值分配给变量,然后使用该值,避免一次又一次地键入(并迫使计算机计算)该值:

a = int(a)

在此示例中,我将值分配回a,用我们要使用的新值覆盖旧值。

y = [a**i for i in x]

这段代码产生的效果与上面的怪物相同,而无需大量重复编写相同的内容。这是一个简单的列表理解。这也意味着,如果您编辑x,则无需对进行任何操作y,它自然会更新以适合您。

还要注意的是PEP-8,Python的风格指南,强烈建议进行一个函数调用时,不要给自己留下一个标识符和括号之间的空格。



 类似资料:
  • 问题内容: 每次尝试编码时,它都有效,但是当我键入代码时,出现错误: ValueError:int()以10为基的无效文字:“停止” 问题答案: 传递给的字符串应仅包含数字: 一个快速的解决方法是在此处使用异常处理: 而且您可以使用匹配“ stop”的任何大小写组合:

  • 问题内容: 我正在创建一个读取文件的程序,如果文件的第一行不为空白,它将读取接下来的四行。在这些行上执行计算,然后读取下一行。如果该行不为空,则继续。但是,我收到此错误: 它正在读取第一行,但无法将其转换为整数。 我该怎么做才能解决此问题? 代码: 问题答案: 仅作记录: 我在这里…

  • 问题内容: 我正在尝试做: 我得到以下错误: ValueError:以10为底的long()无效文字:‘12 .0’ 我的数据如下所示: 知道如何正确进行转换吗? 感谢帮助。 问题答案: 有一些值,无法将其转换为。 您可以使用并获得存在问题的价值: 如果需要检查值有问题的行,请与mask配合使用: 样品:

  • 问题内容: 我正在为某个项目编写代码来确定信用卡的有效性,但是我碰壁了,看来到目前为止我尝试过的所有方法都没有用。 这给了sumofodds函数一个错误,其中j = int(card [i]) 错误是“无效的文字为Int()与Base 10 有没有人可以给我一些帮助? 这是那些想知道的人的完整追溯 问题答案: 好吧,无论您输入什么内容,实际上都不是以10为底的数字。这包括非数字字符或空格的任何内容

  • 问题内容: 我有一个以10为底的数字。是否有将其转换为以62为底的数字? 例: PHP 可以转换为基数36。 问题答案: OLD :一个快速而肮脏的解决方案可以是使用如下函数: 基数转换将您的数字转换为数字为0-9a-p的基数,然后使用快速的char替换摆脱其余的数字。 如您所见,该功能易于逆转。 顺便说一句,您将使用此功能做什么? 编辑: 根据问题的更改和@jnpcl的答案,这是一组函数,它们执

  • 给定一个有符号的32位整数x,返回其数字颠倒的x。如果反转x导致值超出有符号32位整数范围[-2**31, 2**31 - 1],则返回0。 假设环境不允许存储64位整数(有符号或无符号)。 这是我的意见书 int()方法应该允许我传递一个字符串值(“12”),但是它返回一个错误,说它是int()的无效文本。 第3行中的变量sp是str而不是float,所以我不知道为什么它不在leetcode提交