编写一个函数,如果给定的字符串恰好有 6 个字符,则 returns 为真
Writing a function that returns true if given string has exactly 6 characters
我正在尝试编写一个函数,如果给定字符串 正好 6 个具有相同值的连续字符,则 return 为真或假。如果字符串多于或少于 6,它将 return false:
我不允许使用列表、集合或导入任何包。我只限于 while 循环、for 循环和使用基本数学运算
下面显示了两个示例运行:
Enter a string: 367777776
True
Enter a string: 3677777777776
False
请注意,虽然我输入的是数字,但它实际上是函数参数中的一个字符串,例如:consecutive('3777776')
我尝试将字符串转换为 ASCII table,然后尝试过滤掉其中的数字。不过,我
def consecutive(x):
storage= ' '
acc=0
count=0
for s in x:
storage+= str(ord(s)) + ' '
acc+=ord(s)
if acc == acc:
count+=1
for s in x-1:
return count
我的目的是比较字符串中前一个字符的ASCII码和当前字符的ASCII码。如果 ASCII 不匹配,我将为其添加一个累加器。累加器将列出重复的数量。从那里,我将执行一个 if-else 语句来查看它是大于还是小于 6 但是,我很难将我的想法转化为 python 代码。
有人可以帮助我吗?
你可以使用递归。遍历所有字符,检查每一个字符,看看接下来的 6 个字符是否相同。如果是这样,return 正确。如果到达数组的末尾(甚至在末尾的 6 个字符内),return false.
有关递归的更多信息,请查看:https://www.programiz.com/python-programming/recursion
会允许这样的事情吗?
def consecF(n):
consec = 1
prev = n[0]
for i in n:
if i==prev:
consec+=1
else:
consec=1
if consec == 6:
return True
prev = i
return False
n = "12111123333221"
print(consecF(n))
您可以尝试双指针方法,其中左指针固定在某个数字的第一个实例,只要看到数字,右指针就会移动。
def consecutive(x):
left = 0
while left != len(x):
right = left
while right < len(x) and x[right] == x[left]:
right += 1
length = (right - 1) - left + 1 # from left to right - 1 inclusive, x[left] repeated
if length == 6: # found desired length
return True
left = right
return False # no segment found
tests = [
'3677777777776',
'367777776'
]
for test in tests:
print(f"{test}: {consecutive(test)}")
输出
3677777777776: False
367777776: True
这是一个很好的开始!
几点评论:
- 变量
storage
和 acc
起着相同的作用,但比它们必须的要复杂一点。当您到达字符 s
时,您只想知道 s
是否与前一个字符相同。所以,你只需要存储之前看到的字符。
- 条件
acc == acc
永远为真。我想你的意思是 acc == s
?
- 当你遇到相同的字符时,你正确地增加计数
count += 1
。但是,当我们更改字符时,您应该重新设置计数。
考虑到这些意见,我修改了您的代码,然后留空了一些部分供您填写。我还将 storage
和 acc
重命名为 previous_char
,我认为这更明确。
def has_6_consecutive(x):
previous_char = None
count = 0
for s in x:
if s == previous_char:
???
elif count == 6:
???
else:
???
previous_char = ???
???
您应该存储当前的重复字符序列。
def consecutive(x):
sequencechar = ' '
repetitions = 0
for ch in x:
if ch != sequencechar:
if repetitions == 6:
break
sequencechar = ch
repetitions = 1
else:
repetitions += 1
return repetitions == 6
如果可以,我不会给出完整的解决方案,但这仍然是一个简单的问题。不过有些地方还是要注意的。
如您所见,当前序列已存储,当序列结束并开始新序列时,一旦找到正确的序列,它就会跳出 for 循环。
同样在for循环正常结束后,检查最后一个序列(在循环中没有完成)。
我正在尝试编写一个函数,如果给定字符串 正好 6 个具有相同值的连续字符,则 return 为真或假。如果字符串多于或少于 6,它将 return false:
我不允许使用列表、集合或导入任何包。我只限于 while 循环、for 循环和使用基本数学运算
下面显示了两个示例运行:
Enter a string: 367777776
True
Enter a string: 3677777777776
False
请注意,虽然我输入的是数字,但它实际上是函数参数中的一个字符串,例如:consecutive('3777776')
我尝试将字符串转换为 ASCII table,然后尝试过滤掉其中的数字。不过,我
def consecutive(x):
storage= ' '
acc=0
count=0
for s in x:
storage+= str(ord(s)) + ' '
acc+=ord(s)
if acc == acc:
count+=1
for s in x-1:
return count
我的目的是比较字符串中前一个字符的ASCII码和当前字符的ASCII码。如果 ASCII 不匹配,我将为其添加一个累加器。累加器将列出重复的数量。从那里,我将执行一个 if-else 语句来查看它是大于还是小于 6 但是,我很难将我的想法转化为 python 代码。
有人可以帮助我吗?
你可以使用递归。遍历所有字符,检查每一个字符,看看接下来的 6 个字符是否相同。如果是这样,return 正确。如果到达数组的末尾(甚至在末尾的 6 个字符内),return false.
有关递归的更多信息,请查看:https://www.programiz.com/python-programming/recursion
会允许这样的事情吗?
def consecF(n):
consec = 1
prev = n[0]
for i in n:
if i==prev:
consec+=1
else:
consec=1
if consec == 6:
return True
prev = i
return False
n = "12111123333221"
print(consecF(n))
您可以尝试双指针方法,其中左指针固定在某个数字的第一个实例,只要看到数字,右指针就会移动。
def consecutive(x):
left = 0
while left != len(x):
right = left
while right < len(x) and x[right] == x[left]:
right += 1
length = (right - 1) - left + 1 # from left to right - 1 inclusive, x[left] repeated
if length == 6: # found desired length
return True
left = right
return False # no segment found
tests = [
'3677777777776',
'367777776'
]
for test in tests:
print(f"{test}: {consecutive(test)}")
输出
3677777777776: False
367777776: True
这是一个很好的开始!
几点评论:
- 变量
storage
和acc
起着相同的作用,但比它们必须的要复杂一点。当您到达字符s
时,您只想知道s
是否与前一个字符相同。所以,你只需要存储之前看到的字符。 - 条件
acc == acc
永远为真。我想你的意思是acc == s
? - 当你遇到相同的字符时,你正确地增加计数
count += 1
。但是,当我们更改字符时,您应该重新设置计数。
考虑到这些意见,我修改了您的代码,然后留空了一些部分供您填写。我还将 storage
和 acc
重命名为 previous_char
,我认为这更明确。
def has_6_consecutive(x):
previous_char = None
count = 0
for s in x:
if s == previous_char:
???
elif count == 6:
???
else:
???
previous_char = ???
???
您应该存储当前的重复字符序列。
def consecutive(x):
sequencechar = ' '
repetitions = 0
for ch in x:
if ch != sequencechar:
if repetitions == 6:
break
sequencechar = ch
repetitions = 1
else:
repetitions += 1
return repetitions == 6
如果可以,我不会给出完整的解决方案,但这仍然是一个简单的问题。不过有些地方还是要注意的。
如您所见,当前序列已存储,当序列结束并开始新序列时,一旦找到正确的序列,它就会跳出 for 循环。
同样在for循环正常结束后,检查最后一个序列(在循环中没有完成)。