#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:
- Длина строки нечетная (проверяется по модулю)
- Он состоит
'0'
'1'
только из / (проверяется с помощьюset.issubset
) - Есть
'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