【问题标题】:How to not calculate the length of string if the input is a float number?如果输入是浮点数,如何不计算字符串的长度?
【发布时间】:2019-09-09 22:57:55
【问题描述】:

我的程序是使用 len() 方法计算字符串的长度。使用 input() 函数将字符串作为用户的输入。现在的问题是,如果输入是 int 而不是 string,它将不会计算长度.但我无法做第二部分,即如果输入是浮点数而不是字符串。 我可以在代码中做什么或我可以使用哪些库函数?

def strlength(string):
    len1=len(string)
    return len1

len1=input("Enter any string:")

if len1.isdigit()==True:
    print("Integers cannot have length !")
elif bool(len1.find("."))==True:
    print("Float numbers cannot have length !")
else:
    print(strlength(len1))

【问题讨论】:

  • input 总是返回一个字符串,您似乎知道,但为什么 1234 不是包含 4 个数字字符的有效字符串?另外,为什么hello... 不是一个有效的 8 个字符的字符串?另请注意,如果未找到子字符串/字符,str.find 将返回 -1,而在这种情况下,bool(-1) 始终为True - 唯一会为假的情况是当它为 0 时,实际上是发现不是您想要的第一个字符...您需要明确检查 -1 那里...
  • isinstance(mynumber, float) 怎么样?对你的案子有帮助吗?您也可以使用Decimal 类来生成数字,这是恕我直言的最佳方式。您还可以使用input.replace(".", "") 函数清理用户输入。

标签: python python-3.x


【解决方案1】:

试试这个:

它只接受非整数和浮点类型的输入来返回正确的长度。

def strlength(string):
    if string.isdigit():
        return False
    if string.find('.') > 0:
        a, b = string.split('.') 
        if a.isdigit() and b.isdigit():
            return False 
    if  type(string) == str :
            return len(string)


length = strlength(input("Enter any string:"))
if (length):
    print("The length of the string is ", length)
else:
    print("The input was an integer or a float.")


这应该有助于您的事业。

【讨论】:

  • 这无济于事,因为input() 在 Python 3.x 中总是返回 str
  • 同意,错过了为elif添加子句
  • 在 Python 3.x 中,您将永远不会遇到任何其他条件,因为 if type(string) == str 总是正确的......(还有一个旁注,通常最好写成 if isinstance(string, str) 除非你想要一些非常明确的(而且几乎不可能是严格的类型检查)
  • 如果我没误会的话,他需要得到任何浮点类型数字的长度,对吗?
  • 据我了解 - 他们只需要获取不能为浮点数/整数的输入的长度
【解决方案2】:

您可以尝试以另一种方式解决您的问题。据我了解,您的问题是输入是数字时,但输入法总是给出字符串。所以第一步尝试将 input 值转换为数字,如果它有效,则什么都不做,但如果它抛出 ValueError 你有一个字符串,所以你可以得到长度。

def strlength(string):
    """"""
    try:
        float(string)
        print('The input was a number')
        return None
    except ValueError:
        return len(string)


len1 = input('Enter any string:')
print(strlength(len1))

但如果输入是一个数字后跟一个字符串,例如'15.2toto',它就不起作用。如果您真的不想考虑字符串中的任何数字,则应该查看 re 模块的 sub 方法以使用正则表达式删除任何数字。

【讨论】:

    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2020-01-03
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    相关资源
    最近更新 更多