-2

我在尝试执行此代码时遇到问题,我希望用户输入一个值,程序检查该值是否为字符串,然后返回长度。如果该值包含空格,则程序会删除空格并打印长度。但如果它包含任何整数值,程序将返回“不允许整数”

这是代码:

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)

因此,如果您能帮助我,我将不胜感激。 谢谢

4

4 回答 4

1

我不认为str.isspace,str.isalphastr.isdigit方法做你期望他们做的事情。首先,它们都会测试您输入的字符串中的所有字符是否都属于其名称中描述的类型。True如果任何字符匹配,您的代码似乎希望它们返回。也就是说,如果有任何空格,您想要删除它们并显示两个长度,之前和之后。

没有单一的字符串方法可以在 Python 中为您进行该测试。您可以使用正则表达式(更强大,但复杂),或者您可以编写一些稍微复杂的代码来进行测试。我建议使用该any函数,并向其传递一个生成器表达式,该表达式调用字符串中每个字符所需的方法。

if any(c.isspace() for c in user_str):
    ...

对于所有测试,这可能并不完全是您想要的。您的代码所需的逻辑并不完全显而易见,因为您的输出没有专门解决许多极端情况。包含字母和数字的字符串是否有效?一个数字之间有空格但根本没有字母的呢?您可能需要重新排序 // 语句的条件,if以便elif它们else符合您的意图。

我还要注意,您用于用户输入的变量名称new_length非常具有误导性。这不是长度,它是您要测量长度的字符串!对具有误导性或不明确的变量名称的变量产生逻辑错误要容易得多,因此花时间回顾并重新考虑您之前选择的名称有时是个好主意,因为它可以大大提高代码的清晰度!描述性变量名称很好,但它是清晰和简洁之间的权衡,因为长名称输入起来很乏味(并且容易出现拼写错误)。它们还可能导致行长问题,这会使得在编辑器屏幕上一次查看所有代码变得不那么方便。

于 2020-03-24T02:27:32.343 回答
0

我建议在这些情况下阅读文档。对于,isspace请注意这里

如果字符串中只有空白字符且至少有一个字符,则返回 True,否则返回 False。

也就是说,如果那里有任何不是空格的东西,那么它将是 False。这很烦人,但为什么要首先检查呢?只做更换!如果没有空格,它不会做任何事情。如果您需要打印这些语句,您可以这样做

if ' ' in value1:
  ...

(当然,这没有考虑所有可能的空格,如果需要,请检查其他答案以执行 for 循环)

接下来,我相信您需要删除elifs 并仅使用if语句,因为请注意,如果您输入带有空格的名称,它将打印删除空格的名称......之后什么都没有。即使它里面有整数也不行。这是因为elif语句不会在它们之上执行一次。

还有很多其他的事情你需要考虑,但我认为你应该首先考虑这两个。希望它有用!

于 2020-03-24T02:28:15.213 回答
0

您可以使用此函数检查输入字符串是否包含数字:

def hasNumbers(inputString):
        return any(char.isdigit() for char in inputString)

如果有数字则返回 true,如果没有则返回 false。

至于空格,您可以省略 isspace()。即使没有空格,单独使用 replace() 也可以完成这项工作。

stri='jshsb sjhsvs jwjjs'
stri=stri.replace(' ','')
于 2020-03-24T02:17:44.487 回答
-1

您可以使用 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)
于 2020-03-24T02:23:12.977 回答