Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 验证来自用户输入的浮点值_Python_Validation_Input_Floating Point - Fatal编程技术网

Python 验证来自用户输入的浮点值

Python 验证来自用户输入的浮点值,python,validation,input,floating-point,Python,Validation,Input,Floating Point,此函数将以字符串作为输入。该字符串具有以下属性: 包括字符0-9 可能包括表示美分的期间。(如否) 包括(假设0美分。) 可能包括$sign 可能包括逗号 数字分隔符 函数将字符串转换为浮点数。您不能使用任何内置命令,如int或float。您必须通过分析文本字符串中的字符来解决此问题 如果输入无效,则返回-1作为函数的结果 如果我输入以下内容: 100.00 200 98.78 $1,009.78 Goat exit 这是输出的样子: Determine Price with Tax. E

此函数将以字符串作为输入。该字符串具有以下属性:

  • 包括字符0-9
  • 可能包括表示美分的期间。(如否) 包括(假设0美分。)
  • 可能包括$sign
  • 可能包括逗号 数字分隔符
函数将字符串转换为浮点数。您不能使用任何内置命令,如int或float。您必须通过分析文本字符串中的字符来解决此问题

如果输入无效,则返回-1作为函数的结果

如果我输入以下内容:

100.00
200
98.78
$1,009.78
Goat
exit
这是输出的样子:

Determine Price with Tax.
Enter 'exit' at any time to quit.
Enter Amount ($X,XXX.XX):
Amount: 100.0
Tax: 6.0
Price w/ Tax: 106.0
Enter Amount ($X,XXX.XX):
Amount: 200
Tax: 12.0
Price w/ Tax: 212.0
Enter Amount ($X,XXX.XX):
Amount: 98.78
Tax: 5.93
Price w/ Tax: 104.71
Enter Amount ($X,XXX.XX):
Amount: 1009.78
Tax: 60.59
Price w/ Tax: 1070.37
Enter Amount ($X,XXX.XX):
Amount: -1
Tax: -0.06
Price w/ Tax: -1.06
Enter Amount ($X,XXX.XX):
我的代码是:

def price_to_int(text):
    res = 0
    valid = "$,.1234567890"
    for l in text:
        if l in valid:
            res = float(text)
        else:
            return -1
    return res

#---------You may not make any changes below this line-----------   
print("Determine Price with Tax.")
print("Enter 'exit' at any time to quit.")
word = input("Enter Amount ($X,XXX.XX):\n")
while word.lower() != "exit":
    d = price_to_int(word)
    tax = 0.06
    print("Amount:",round(d,2))
    print("Tax:",round(d*tax,2))
    print("Price w/ Tax:",round(d+d*tax,2))
    word = input("Enter Amount ($X,XXX.XX):\n")

唯一错误的是函数定义。我的代码一直工作到输入“$1009.78”。我被特别要求只重写函数定义,不更改任何其他内容。

我认为您当前的解决方案不正确。您正在逐个字符地迭代字符串,强制每个参数。您希望一次转换整个字符串(否则,如何获得浮点值?)

您想要一个使用
try执行异常处理的解决方案吗。。。除了

def price_to_int(text):
    clean_text = text.lstrip('$').replace(',', '')
    try:
        return int(clean_text)
    except:
        try:
            return float(clean_text)
        except ValueError:
            return -1
此解决方案清理字符串并尝试将其强制转换为浮动。如果无法进行转换,则会引发并处理错误,并返回-1

详细信息

  • str.lstrip
    删除前导的
    $
    字符
  • str.replace
    删除逗号(当第二个参数为空字符串时)
  • 试试看
    ValueError除外:…
    将尝试在
    try
    块内运行代码,同时等待捕获
    ValueError
    异常。如果引发异常,则执行
    except
    块内的代码(否则为否)

这将接受可能允许的
100.5,0
,OP没有指定逗号使用的限制。@RyanHaining-Hmm,你有一点,但是像这样的复杂输入需要正则表达式,我假设正则表达式超出入门级python课程的范围。。。然而,如果他们决定回来,我将继续关注OP的裁决,isI的想法更像是
parts=text.split('.');美元=零件[0]
然后使用你在
美元上的钱
并将
零件[1]
粘回末端(如果有)exists@RyanHaining我仍然需要担心像
10,00.00
之类的输入,这里有很大的范围让解释器出错。。。你在哪里停?逗号只允许在从右到左的每四个位置,并且不能是第一个非数字(
,000
是错误的),所以你可以用这种方式扫描。我是正则表达式,对吗?但这似乎是我在一年级编程作业中所期望的