我创建了一个代码,要求用户输入一个数字。以下代码仅允许用户输入数字。
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)'没有错误的行?
答案 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你想从它做一个浮点数,你做了。执行此操作时,它将返回您需要使用的新浮点数而不是字符串。通过指定相同的名称,您可以实现所需的效果。
或者,只需使用该点上的新名称。