【问题标题】:Isspace function in pythonpython中的isspace函数
【发布时间】:2020-03-24 02:09:44
【问题描述】:
我在尝试执行此代码时遇到问题,我希望用户输入一个值,程序检查该值是否为字符串,然后返回长度。
如果该值包含空格,则程序会删除空格并打印长度。
但是如果它包含任何整数值,程序会返回“不允许整数”
这是代码:
def length(Name):
long = len(Name)
return long
new_length = input("Please Enter Your name You can use Spaces: ")
value1 = new_length
if value1.isspace() == True:
print("This is Before Removing Spaces: " + value1)
value2 = value1.replace(" ", "")
print("This is After Removing Spaces: " + value2)
elif value1.isalpha() == True:
print("Here is The Length: ", length(value1))
elif value1.isdigit() == True:
print("Integers are not allowed! ")
else:
print("There's someting wrong with "+ value1)
因此,如果您能帮助我,我将不胜感激。
谢谢
【问题讨论】:
标签:
python
function
conditional-statements
isspace
【解决方案1】:
我不认为str.isspace、str.isalpha 和str.isdigit 方法可以达到您的预期。首先,它们都测试您输入的字符串中的所有字符是否属于其名称中描述的类型。如果 any 的字符匹配,您的代码似乎期望它们返回 True。也就是说,如果有任何个空格,你想删除它们并显示两个长度,之前和之后。
没有单一的字符串方法可以在 Python 中为您进行该测试。您可以使用正则表达式(功能更强大,但要复杂得多),或者您可以编写一些稍微复杂的代码来进行测试。我建议使用any 函数,并传递给它一个生成器表达式,该表达式在字符串中的每个字符上调用您想要的方法。
if any(c.isspace() for c in user_str):
...
这可能不是您想要的所有测试。您的代码所需的逻辑并不完全明显,因为您的输出没有专门解决许多极端情况。包含字母和数字的字符串是否有效?一个数字之间有空格但根本没有字母的呢?您可能需要重新排序 if/elif/else 语句的条件,以便它们符合您的意图。
我还要注意,您用于用户输入的变量名称new_length 非常具有误导性。这不是长度,它是您要测量长度的字符串!对具有误导性或不明确的变量名称的变量产生逻辑错误要容易得多,因此花时间回顾并重新考虑您之前选择的名称有时是个好主意,因为它可以大大提高代码的清晰度!描述性变量名称很好,但它是清晰和简洁之间的权衡,因为长名称输入起来很乏味(并且容易出现拼写错误)。它们还可能导致行长问题,这会降低您在编辑器屏幕上一次查看所有代码的便利性。
【解决方案2】:
您可以使用此函数检查输入字符串是否包含数字:
def hasNumbers(inputString):
return any(char.isdigit() for char in inputString)
如果有数字则返回true,如果没有则返回false。
至于空格,您可以省略 isspace()。即使没有空格,单独使用 replace() 也可以完成这项工作。
stri='jshsb sjhsvs jwjjs'
stri=stri.replace(' ','')
【解决方案3】:
我建议在这些情况下阅读文档。对于isspace,请注意here
如果字符串中只有空白字符且至少有一个字符,则返回 True,否则返回 False。
也就是说,如果那里有任何不是空格的东西,那么它将是 False。这很烦人,但为什么要首先检查呢?只做更换!如果没有空格,它不会做任何事情。如果您需要打印这些语句,您可以这样做
if ' ' in value1:
...
(当然,这并没有考虑所有可能的空格类型,如果需要,请查看其他答案以执行 for 循环)
接下来,我相信您需要删除 elifs 并只使用 if 语句,因为请注意,如果您输入带有空格的名称,它将打印删除空格的名称......什么都没有之后。即使它里面有整数也不行。这是因为elif 语句不会再执行一次。
还有很多其他的事情你需要考虑,但我认为这两个你应该首先考虑。希望有用!
【解决方案4】:
您可以使用 Python 中的 re 模块来检查字符串中的空格。如果有空格,则返回 True,否则返回 False。
import re
def length(Name):
long = len(Name)
return long
new_length = input("Please Enter Your name You can use Spaces: ")
value1 = new_length
if re.search('\s', value1):
print("This is Before Removing Spaces: " + value1)
value2 = value1.replace(" ", "")
print("This is After Removing Spaces: " + value2)
print("Here is The Length: ", length(value2))
elif value1.isalpha() == True:
print("Here is The Length: ", length(value1))
elif value1.isdigit() == True:
print("Integers are not allowed! ")
else:
print("There's someting wrong with "+ value1)