1
import math
pi = 3.1415

r = float(input("Enter the radius: "))
angle = float(input("Enter the angle: "))
x = r * math.cos(angle)
y = r * math.sin(angle)

print ('x =', x, 'y =', y)

当我输入 pi 或任何带有 pi 的东西作为角度提示的答案时,我收到此错误:

ValueError: could not convert string to float: 'pi'

有什么建议该怎么做吗?

4

2 回答 2

3

您收到错误是因为"pi"不是数字。如果您希望它识别该字符串,则需要在尝试将其转换为浮点数之前手动执行此操作。

def get_number(what):
    # Get value from user; remove any leading/trailing whitespace
    val = input('Enter the {}:'.format(what)).strip()
    if val.lower() == 'pi': # case insensitive check for "pi"
        return math.pi
    try: # try converting it to a float
        return float(val)
    except ValueError: # the user entered some crap that can't be converted
        return 0

然后,在您的主代码中,只需使用以下代码:

r = get_number('radius')
angle = get_number('angle')

并且请摆脱pi = 3.1415- 当您需要 pi 时,您可以使用math.pi更准确的方法和要走的路。

于 2012-09-01T12:22:47.683 回答
0

此代码在 python 2 中运行良好,但input函数在 python 2 和 python 3 之间更改,符合PEP 3111

  • python 2 中的内容现在只在 python 3 中raw_input调用。input
  • python 2中input(x)的内容等同eval(input(x))于 python 3 中的内容。

这本来应该是这样,因为调用eval用户输入是不安全和不直观的,当然不应该是用户输入的默认设置,如果这是你真正想要的,仍然很容易做到。

将您的代码示例作为玩具示例,您可以通过替换使其工作

r = float(input("Enter the radius: "))
angle = float(input("Enter the angle: "))

r = float(eval(input("Enter the radius: ")))
angle = float(eval(input("Enter the angle: ")))

但你不想在现实世界的代码中这样做相反,您可能希望使用此问题中建议的解决方案之一:Equation parsing in Python

于 2012-09-12T08:26:19.063 回答