确定输入是否是Python中的数字

时间:2015-04-12 22:26:32

标签: python

我创建了一个代码,要求用户输入一个数字。以下代码仅允许用户输入数字。

while True:
    strainx =input("Please enter a value for strain in the x-direction: ")

    try:
        num_format=float(strainx)
        break
    except ValueError:
        print("Invalid Entry")

strainx=float(strainx)

这只是代码的一部分。我有几个输入具有完全相同的代码,但名称不同。其中之一是输入' v'。

的值

最后一行' strainx = float(strainx)'对我来说没有意义,因为它将strainx格式化为浮点数,但是输入应该只接受浮点数。

在代码中还有一个涉及v ** 2

的等式

如果我摆脱了' strainx = float(strainx)'对于所有其他输入(包括v)的行和相同的行,涉及v ** 2的等式不再起作用并给出错误:

TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

任何人都可以帮我解释一下为什么会这样吗?当然,我应该能够摆脱' strainx = float(strainx)'没有错误的行?

1 个答案:

答案 0 :(得分:0)

问题是在try块中,您分配了一个新变量。如果您分配回strainx,则无需再做任何其他事情。

while True:
    strainx = input("Please enter a value for strain in the x-direction: ")
    try:
        strainx = float(strainx)
        break
    except ValueError:
        print("Invalid Entry")
  

最后一行' strainx = float(strainx)'对我来说没有意义   将strainx格式化为浮点数,但输入应该只是   无论如何都接受花车。

它不是格式化,而是从字符串创建浮点数。 Python中的对象定义了类型,它们是内部表示的类型。如果你的变量是一个字符串,你就不能像浮点数一样使用它,你必须明确地告诉Python你想从它做一个浮点数,你做了。执行此操作时,它将返回您需要使用的新浮点数而不是字符串。通过指定相同的名称,您可以实现所需的效果。

或者,只需使用该点上的新名称。