出于此功能的目的,有效的定界符是引号mark(“)或撇号(')。正确定界的字符串必须对开头和结尾字符使用相同的定界符,并且不得在定界符中使用该定界符。字符串。您的函数应以布尔值返回结果。
以下是您的函数应如何工作的示例。
test1 = input("Enter a test string: ") #user enters: "hello worlds"
print(valid_string(test1)) #True
它是从我之前的测试中获得的,并且我得到了完美的零。有人可以告诉我从哪里开始吗?
答案 0 :(得分:1)
弄清楚这一点的关键在这里:
正确定界的字符串必须对开头和结尾字符使用相同的定界符,并且不得在字符串中使用该定界符。
您可以通过执行类似my_string[0] == '"'
的操作来检查字符串是否以双引号开头,并类似地通过执行my_string[-1] == '"'
来结束字符串。之所以有效,是因为string [0]和string [-1]将分别访问第一个和最后一个字符。如果您不知道,Python中的负索引仅意味着从末尾开始计数(因此索引-2意味着从末尾开始第二个索引,依此类推)。
然后可以通过执行以下操作来检查字符串内是否没有双引号:my_string[1:-1].count('"') == 0
。之所以有效,是因为my_string [1:-1]接受了字符串的一部分,但不包括第一个和最后一个字符,然后计算了双引号出现的次数(零-永远不会出现)。
但是等等!单引号也可以是定界符!我将其视为对您的挑战。提示:确保开始和结束定界符相同,并且还确保允许另一个定界符出现在字符串内部。您还应该考虑使用长度为0或1个字符的字符串处理边缘情况。让我知道这个答案的任何部分是否没有意义,或者您想澄清一些问题。
答案 1 :(得分:0)
好,这应该工作:
def valid_string(s):
try:
return s[0] == s[-1] and s[0] in ["'", '"'] and s[0] not in s[1:-1] and len(s) > 1
except:
return False
while True:
test1 = input("Enter a test string: ")
print(valid_string(test1))
这可以找到少于2个字符的字符串:
$ ./valid_string2.py
Enter a test string: 'adsdasfd"adfadfs'
True
Enter a test string: 'adsfdsafdfs'adsfasd'
False
Enter a test string: "adsfdasf'adsfads"
True
Enter a test string: "adsfasdf"adfasd"
False
Enter a test string: """
False
Enter a test string: "'"
True
Enter a test string: '"'
True
Enter a test string: a
False
Enter a test string: 'a'
True
Enter a test string: "a'
False
Enter a test string: a'
False
Enter a test string: 'a"
False