提问人:Jim Prideaux 提问时间:5/27/2016 更新时间:6/18/2023 访问量:23859
在通过 int() 传递字符串之前,如何检查字符串是否为负数?
How do I check if a string is a negative number before passing it through int()?
问:
我正在尝试编写一些东西来检查字符串是数字还是负数。如果它是一个数字(正数或负数),它将通过 int() 传递。不幸的是,当包含“-”时,isdigit() 不会将其识别为数字。
这是我到目前为止所拥有的:
def contestTest():
# Neutral point for struggle/tug of war/contest
x = 0
while -5 < x < 5:
print "Type desired amount of damage."
print x
choice = raw_input("> ")
if choice.isdigit():
y = int(choice)
x += y
else:
print "Invalid input."
if -5 >= x:
print "x is low. Loss."
print x
elif 5 <= x:
print "x is high. Win."
print x
else:
print "Something went wrong."
print x
我能想到的唯一解决方案是一些单独的、复杂的一系列语句,我可能会在一个单独的函数中将它们松鼠掉,以使其看起来更好。我将不胜感激任何帮助!
答:
10赞
Alex Hall
5/27/2016
#1
您可以先轻松地从左侧删除字符,如下所示:
choice.lstrip('-+').isdigit()
但是,最好改为处理无效输入的异常:
print x
while True:
choice = raw_input("> ")
try:
y = int(choice)
break
except ValueError:
print "Invalid input."
x += y
1赞
syntonym
5/27/2016
#2
与其检查是否可以将输入转换为数字,不如尝试转换,如果失败,请执行其他操作:
choice = raw_input("> ")
try:
y = int(choice)
x += y
except ValueError:
print "Invalid input."
1赞
robotHamster
5/27/2016
#3
您可以通过使用 来解决此问题。float 如果不是数字,则应返回 ValueError。如果你只处理整数,你可以使用float(str)
int(str)
所以与其做
if choise.isdigit():
#operation
else:
#operation
你可以试试
try:
x = float(raw_input)
except ValueError:
print ("What you entered is not a number")
请随意替换为 ,并告诉我它是否有效!我自己还没有测试过。float
int
编辑:我刚刚在Python的文档(2.7.11)上也看到了这个
0赞
Charlie Parker
11/27/2021
#4
这不是更简单吗?
def is_negative_int(value: str) -> bool:
"""
ref:
- https://www.kite.com/python/answers/how-to-check-if-a-string-represents-an-integer-in-python#:~:text=To%20check%20for%20positive%20integers,rest%20must%20represent%20an%20integer.
- https://stackoverflow.com/questions/37472361/how-do-i-check-if-a-string-is-a-negative-number-before-passing-it-through-int
"""
if value == "":
return False
is_positive_integer: bool = value.isdigit()
if is_positive_integer:
return True
else:
is_negative_integer: bool = value.startswith("-") and value[1:].isdigit()
is_integer: bool = is_positive_integer or is_negative_integer
return is_integer
0赞
J Z
6/18/2023
#5
如果您只想要整数并拒绝十进制数。您可以使用以下函数进行检查。
def isInteger(string):
if string[0] == '-': #if a negative number
return string[1:].isdigit()
else:
return string.isdigit()
0赞
Miguel Garcia
6/18/2023
#6
在尝试任何强制转换之前,您可以使用正则表达式来检查字符串是否具有整数模式:
import re
patternInteger = re.compile("^[+-]?[0-9]+$")
if patternInteger.match(string):
return int(string)
else:
return "This string is not an integer number"
您可以泛化正则表达式模式以匹配其他类型的字符串,这些字符串可能看起来像浮点数甚至复数。在这种情况下,正则表达式可能有点矫枉过正,但如果将来您必须处理更通用的模式来识别,那么学习正则表达式可能非常有用。
评论