python - 如何在不使用 try-except 的情况下检查原始输入是整数还是浮点数(包括负数)
问题描述
作为更大的 Python 作业问题的一部分,我正在尝试检查字符串输入是否包含正/负整数或浮点数,如果包含则返回 True,否则返回 False。
作业问题将假设用户输入一个非常简单的数学表达式,用空格分隔(例如 8 / ( 2 + 2 )),之后,表达式将被分解为列表中的单独字符(例如 ["8 "、"/"、"("、"2"、"+"、"2"、")"])。然后,我将通过一个'for'循环运行这个列表,该循环根据当前令牌的类型增加计数器变量的数量(例如,如果 currentToken 是“2”,那么operandCount += 1)。
到目前为止,我很难尝试使用包含正/负浮点数或整数类型数字(例如“8”、“-9”、“4.6”)的 currentToken 来完成此操作。这里的主要挑战是我的教授不允许我们在代码中的任何地方使用 try-except,因此排除了我在网上找到的许多解决方案,因为其中许多都涉及捕获错误消息。
我最接近解决这个问题的是使用 'isnumeric()' 和 'isdigit()' 方法。
# Assume that the user will enter in a simple math expression, separated by whitespace.
expression = input("Enter an expression: ")
expr = expression.split()
operandCount = 0
for currentToken in expr:
if currentToken.isnumeric() == True:
operandCount += 1
# operandCount should increase when the 'for' loop encounters
# a positive/negative integer/float.
但是,它只对包含纯正整数的字符串返回 True。我需要它能够为正数和负数的整数和浮点数返回 True。提前感谢您的任何建议!
解决方案
应用正则表达式来搜索可以选择的数字字符串
- 负数:-1
- 有逗号分隔:120,000
- 有一个可选的小数点:0.34, .1415926
import re for currentToken in expr: m = re.match("^[-\.\d]+[,]?[\d]*[\.]?[\d]?$", str(currentToken)) if (m): print "number:", m.group[0]
推荐阅读
- asp.net - 间歇性错误 - .Net Framework 数据提供程序需要 Microsoft 数据访问组件
- d3.js - D3js:无法在 x 轴上创建我想要的刻度数
- php - 服务容器问题
- c++ - 在 C++ 中为我自己的基于指针的数组分配内存的正确方法
- typescript - 替换作为参数发送的淘汰赛 observable
- arrays - 如何将空值添加到列表生成器元素?
- python - Pymodbus 读取保持寄存器
- sql - 在 Oracle 中定义而不是触发器后无法更新复杂视图。ORA-01779: 无法修改映射到非键保留表的列
- google-maps - react-native-maps:apk构建后的灰色地图
- netsuite - 有什么方法可以使用 SuiteScript 将超过 10mb 的已保存搜索文件导入文件柜?