найти подстроку в строке python

#python #string #substring

#python #строка #подстрока

Вопрос:

Это может быть вопрос для начинающих, но, похоже, я нигде не могу найти ответ

Как мне выполнить поиск и вернуть подстроку из другой строки, в которой символы расположены в другом порядке?

Когда я проверяю приведенный ниже код, кажется, что он дает правильный ответ, но я пытаюсь напечатать его, получая значение True или False, а также, когда я отправляю его, он говорит «Неверно. Ваша отправка не вернула правильный результат для ввода (‘UdaciousUdacitee’, ‘Udacity’). Ваше представление прошло 3 из 4 тестовых примеров: » …. Я в замешательстве .. и я обдумывал это в течение 3 часов или около того.

Спасибо

 Test case 1: False 
Test case 2: True 
Test case 3: True 
Test case 4: True
  

Точнее:

 def fix_machine(debris, product):
  if debris.find(product):
   return product
  else:
   print("Give me something that's not useless next time.")


print "Test case 1: ", fix_machine('UdaciousUdacitee', 'Udacity') == "Give me something that's not useless next time."
print "Test case 2: ", fix_machine('buy me dat Unicorn', 'Udacity') == 'Udacity'
print "Test case 3: ", fix_machine('AEIOU and sometimes y... c', 'Udacity') == 'Udacity'
print "Test case 4: ", fix_machine('wsx0-=mttrhix', 't-shirt') == 't-shirt'
  

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

1. Что вы пробовали до сих пор? Переполнение стека — не лучшее место, чтобы просить других людей написать ваш код за вас.

Ответ №1:

Вы правы print() else . Я думаю, вы хотели вернуть эту строку. (по крайней мере, в соответствии с вашим кодом утверждения)

Ответ №2:

Вы использовали str.find() неправильно.

 "It determines if string str occurs in string, or in a substring of string if starting index beg and ending index end are given."
  

Он будет учитывать порядок, который не является тем, что вы хотите. Измените свой fix_machine на:

 def fix_machine(debris, product):
  charNumInDebris = dict()
  charNumInProduct = dict()

  for c in debris:
    if c in charNumInDebris:
      charNumInDebris[c]  = 1
    else:
      charNumInDebris[c] = 1

  for c in product:
    if c in charNumInProduct:
      charNumInProduct[c]  = 1
    else:
      charNumInProduct[c] = 1

  for c in charNumInProduct:
    if not (c in charNumInDebris and charNumInDebris[c] >= charNumInProduct[c]):
      return "Give me something that's not useless next time."

  return product