Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 27, 2019 21:53:45

Dimarik
От: Canada
Зарегистрирован: 2019-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача по строке

Всем привет, начал изучать питон 2 недели назад, получил задачу от учителя:
Problem 2 (30 % of the assignment grade): Given a string containing only characters ‘a’,'b' or ‘*’ print out all the strings formed from this string by replacing * with either ‘a’ or ‘b’/

For example: input ‘ab*b*’ will print out:
ababa
ababb
abbba
abbbb

Получатся надо звездочки заменить на символы a или b. Прошу помощи или объяснения как решить подобную задачу, не прошу готового задания, научите думать правильно ! Спасибо

Здесь я пытаюсь просто распечатать мой индекс
def star(myString):
myString =
for i in myString:
if(myString == “*”):
print(i)

Отредактировано Dimarik (Ноя. 27, 2019 22:30:33)

Офлайн

#2 Ноя. 27, 2019 22:32:19

Dimarik
От: Canada
Зарегистрирован: 2019-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача по строке

Чувствую что помощи не дождусь ))

Офлайн

#3 Ноя. 28, 2019 01:04:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Задача по строке

Dimarik
научите думать правильно
Надо сначала составить алгоритм полностью. И только потом писать код какой-то для этого готового алгоритма.

Ну, и что ты придумал в плане решения? Как бы ты выполнял это задание, если бы компьютера не было и была только ручка и бумага? Вот так и можно найти алгоритм.


Для решения этой задачи на питоне надо будет использовать модуль itertools для генерации всех комбинаций. Но можно и без модуля itertools заморочиться с циклами, чтобы сгенерить все комбинации.



Отредактировано py.user.next (Ноя. 28, 2019 01:07:14)

Офлайн

#4 Ноя. 28, 2019 03:31:50

Dimarik
От: Canada
Зарегистрирован: 2019-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача по строке

py.user.next
Я бы заморочился, вот только не знаю с какого конца начать
Насколько я понимаю мне нужны три метода:

1. Main method, где будут вызываться 2 другие метода
2. changeStar
3. findStar

myString = ‘ab*b*’ - изначальные данные

1-ый метод
def changeStar(myString):
#myString =
data = list(myString)
#print(data)
index=-1
for i in range(len(data)):
if(data == ‘*’):
index = i
pass

print(index)


2-ой метод
changeStar(myString)

def findStar(data):
data = index
for i in range(len(data)):
if(data == ‘a’):
changeStar(data)
elif (data == ‘b’):
changeStar(data)
else:
print(data)

Отредактировано Dimarik (Ноя. 28, 2019 03:39:09)

Офлайн

#5 Ноя. 28, 2019 03:35:51

Dimarik
От: Canada
Зарегистрирован: 2019-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача по строке

Подскажите если я на правильном пути

Офлайн

#6 Ноя. 28, 2019 07:40:18

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Задача по строке

Dimarik
Подскажите если я на правильном пути
Вы на правильном пути. Надо пробовать. Пост составлен грамотно. Есть постановка Изложена суть просьбы и попытки решения.

Сомнительно что вам нужен метод changestar он примитивен
Сомнительно что нужен метод findstar аналог есть в стандартных библиотеках.
main недостаточно описан.

По сути когда думаете да, надо пытаться разбить и упростить задачу. Например, допустим стока состоит только из звездочек? Вы сможете ее решить? Если встречается 1 звездочка Как решить? Можно ли имея решение для n звездочек перейти к n+1?

Чтобы найти готовые стандартные алгоритмы можно проанализировать слова которые вы используете при описании алгоритма.

Вложенные циклы, произведение множеств ->itertools product
разбить строку по звездочкам -> re.split
Объединить ->join
Выбирать одно за другим по цепочке -> itertools chain



Офлайн

#7 Ноя. 28, 2019 08:38:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Задача по строке

Dimarik
Я бы заморочился, вот только не знаю с какого конца начать
Насколько я понимаю мне нужны три метода:

1. Main method, где будут вызываться 2 другие метода
2. changeStar
3. findStar
Ещё раз говорю: возьми листок A4 и ручку и реши эту задачу на листке без какого-либо кода. Когда ты поймёшь, какие одни и те же шаги нужно выполнить от и до на разных входных данных, тогда это можно считать рабочим алгоритмом. А когда у тебя будет рабочий алгоритм, тогда можно будет заняться его реализацией на каком-либо языке программирования.



Офлайн

#8 Ноя. 28, 2019 20:24:04

Dimarik
От: Canada
Зарегистрирован: 2019-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача по строке

Done!

def findStar(myList):
for index in range(len(myList)):
if myList == ‘*’:
return index
return -1

def changeStar(myList):
# save myList inside the data to not loose the original data
data = list(myList)
position = findStar(data)
if position < 0:
# convert list to a string
print ''.join(data)
else:
data = ‘a’
changeStar(data)
data = ‘b’
changeStar(data)

myString = ‘ab*b*’

changeStar(myString)

Офлайн

#9 Ноя. 28, 2019 20:31:46

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Задача по строке

Dimarik
Done!
:) Круто!!
А вы запускать свое творение пробовали?

Dimarik
For example: input ‘ab*b*’ will print out:
ababa
ababb
abbba
abbbb
Обычно требуется чтобы хотя-бы пример правильный ответ давал.



Офлайн

#10 Ноя. 28, 2019 20:57:32

Dimarik
От: Canada
Зарегистрирован: 2019-11-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача по строке

Да, запустил все работает

Прикреплённый файлы:
attachment python.PNG (172,9 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version