2015-04-12 43 views
-1

我创建了一个代码,要求用户输入一个数字。以下代码仅允许用户输入一个数字。确定输入是否是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格式化为float,但输入只能接受float。

此外在代码有这涉及到V ** 2

如果我摆脱“strainx =浮子(strainx)”行和所有的其它输入的同一行的(包括的方程v)涉及v ** 2的方程不再有效,并给出了错误:

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

任何人都可以帮助解释为什么这是?当然,我应该能够摆脱'strainx = float(strainx)'行而不会出现错误?

回答

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

The last line 'strainx=float(strainx)' doesn't make sense to me as it is formatting strainx to be a float, however the input should only accept floats anyway.

它不格式化,而是建立从字符串的浮动。 Python中的对象定义了类型,它们是如何在内部表示的。如果你的变量是一个字符串,你不能像浮点一样使用它,你必须明确地告诉Python你想从中做出一个浮点数,你这样做。当你这样做时,它会返回一个你需要使用的新浮点数而不是字符串。通过重新分配相同的名称,您可以达到所需的效果。

或者,从这一点开始使用新名称。