1

我正在尝试在代码学院自学 Python,并编写了以下基本代码,无论输入的结果是什么,它都不起作用'Please Enter a Valid Number',我收到一条消息说"Oops, try again! Make sure area_of_circle takes exactly one input (radius)."

import math

radius = raw_input("Enter the radius of your circle")

def area_of_circle(radius):
    if type(radius) == int:
        return math.pi() * radius**2
    elif type(radius) == float:
        return math.pi() * radius**2
    else:
        return "'Please enter a valid number'"

print "Your Circle area is " + area_of_circle(radius) + " units squared"

原来的任务是:

编写一个名为的函数area_of_circle,将radius其作为输入并返回圆的面积。圆的面积等于 pi 乘以半径的平方。(使用 math.pi 来表示 Pi。)

4

4 回答 4

5

程序中的错误:

  1. raw_input()返回一个字符串,您必须先转换为 afloatint
  2. 类型检查在 python 中是个坏主意
  3. math.pi()不是一个功能只是使用math.pi

使用异常处理将字符串转换为数字:

import math
radius = raw_input("Enter the radius of your circle: ")
def area_of_circle(radius):
    try :
        f = float(radius) #if this conversion fails then the `except` block will handle it
        return math.pi * f**2   #use just math.pi
    except ValueError:
        return "'Please enter a valid number'"

print "Your Circle area is {0} units squared".format(area_of_circle(radius))
于 2013-05-19T12:12:50.240 回答
2

raw_input() 总是返回一个str. 您需要将其传递给另一种类型的构造函数才能对其进行转换。

radius_val = float(radius)
于 2013-05-19T12:05:06.183 回答
1

您可以在阅读输入时键入 cast 它:

radius = float(raw_input("Enter the radius of your circle"))

于 2013-05-19T12:10:59.573 回答
0

如果输入是 int 或 float,则需要不同的路径(这没有多大意义)

if type(radius) == int:
        return math.pi() * radius**2
elif type(radius) == float:

由于raw_input()'s string 的解释可以是 int 或 float 你应该像这样评估它:

import ast
radius = ast.literl_eval(raw_input("Enter the radius of your circle"))

这样您就可以避免尝试检查它是浮点数还是整数等...

>>> type(ast.literal_eval(raw_input("Number: ")))
Number: 2.5
<type 'float'>
>>> type(ast.literal_eval(raw_input("Number: ")))
Number: 5
<type 'int'>
于 2013-05-19T12:11:47.717 回答