Найти - Пользователи
Полная версия: Задача по строке
Начало » Python для новичков » Задача по строке
1 2
Dimarik
Всем привет, начал изучать питон 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
Чувствую что помощи не дождусь ))
py.user.next
Dimarik
научите думать правильно
Надо сначала составить алгоритм полностью. И только потом писать код какой-то для этого готового алгоритма.

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


Для решения этой задачи на питоне надо будет использовать модуль itertools для генерации всех комбинаций. Но можно и без модуля itertools заморочиться с циклами, чтобы сгенерить все комбинации.
Dimarik
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
Подскажите если я на правильном пути
doza_and
Dimarik
Подскажите если я на правильном пути
Вы на правильном пути. Надо пробовать. Пост составлен грамотно. Есть постановка Изложена суть просьбы и попытки решения.

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

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

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

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

1. Main method, где будут вызываться 2 другие метода
2. changeStar
3. findStar
Ещё раз говорю: возьми листок A4 и ручку и реши эту задачу на листке без какого-либо кода. Когда ты поймёшь, какие одни и те же шаги нужно выполнить от и до на разных входных данных, тогда это можно считать рабочим алгоритмом. А когда у тебя будет рабочий алгоритм, тогда можно будет заняться его реализацией на каком-либо языке программирования.
Dimarik
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)
doza_and
Dimarik
Done!
:) Круто!!
А вы запускать свое творение пробовали?

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

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB