Используя Python, разделите строку на две половины, если в центре строки находятся определенные символы

#python #string

#питон #строка

Вопрос:

101-Строка-это строка, содержащая 1 и 0, где подстрока '101' расположена в центре строки. Строка 101 содержит не менее 3 символов, т. е. самая короткая строка 101-это '101'

Например, строка '110101001' является 101-строкой, потому что подстрока 101 делит исходную строку на две равные половины. Другими словами, если мы возьмем подстроку 101 из исходной строки, у нас будет две строки 110 и 001 одинаковой длины.

Напишите программу, которая попросит пользователя ввести строку и напечатать True , является ли строка 101-строковой, и False если это не так. если строка содержит какие-либо символы, отличные от 1 и 0, программа должна вывести их на печать False . если длина строки меньше 3 символов, программа False также должна печатать.

Комментарии:

1. Что вы пробовали и какую конкретную проблему вам не удалось решить?

2. Я решил ее с помощью наборов. Но мне интересно, есть ли другой способ сделать это без использования наборов.

Ответ №1:

Мы можем проверить, является ли это 101 строкой, используя наборы. Мы можем проверить, содержит ли строка 101, используя .find() функцию. Наконец, мы разделим строку с помощью нарезки строк.

 def check(string) :    p = set(string)   # declare set of '0', '1' .  s = {'0', '1'}   if s == p or p == {'0'} or p == {'1'}:  print("True")  else :  print("False")   if __name__ == "__main__" :   string = input("Enter 101-string")  # function calling  check(string)  substring = "101"  if len(string)lt;2:  print("False")  if substring in string:  print("101 String found")  print("length of String is: ",len(string))  find_101 = string.find('101')  print("Location of 101 is", find_101)  end_101 = find_101 2;  print("String 101 ends at index:",end_101)  s1 = string[:find_101]  second_part = end_101 1;   s2 = string[second_part:]  print(s1,s2)  if len(s1) == len(s2):  print("True")  else:  print("Not a 101 String")  print("False")  

Ответ №2:

Вам нужно всего 3 условия для допустимой строки 101:

  1. Длина строки нечетная (проверяется по модулю)
  2. Он состоит '0' '1' только из / (проверяется с помощью set.issubset )
  3. Есть '101' в середине (проверено с помощью нарезки):
 def is101(s):  x = (len(s)-2)//2  return bool(len(s)%2) amp; set(s).issubset('01') amp; (s[x:x 3] == '101')  

Пример:

 gt;gt;gt; is101('110101001') True  gt;gt;gt; is101('') False  gt;gt;gt; is101('11010100') False  gt;gt;gt; is101('xxx101xxx') False