2016-01-24 4 views
2

У меня есть функция под названием item_order (порядка), подсчитывает количество полукокса в порядке, а затем должен возвращается что-то вроде этого:Возврат строки и Int из функции

'Letter a: number of letter a letter b: number of letter b' 

Но я получаю ошибку говоря, я не могу concatenate str и int. Как вернуть str и int?

Это код (я использую Python):

def item_order(order): 
    ''' 
    order is a string containing words for the items a customer can order 
    returns the number of times each word is listed 
    with this format : name : number of times it is listed 
    ''' 
    s=0 
    h=0 
    w=0 
    for char in order: 
     if char=='s': 
      s=s+1 
     if char=='h': 
      h=h+1 
     if char=='w': 
      w=w+1   
    answer='salad:', s 'hamburger:' h 'water:' w    
    return answer 

Когда я вызываю функцию с этим аргументом ('salad, salad, hamburger, water') я хочу, чтобы вернуть это:

'salad:2 hamburger:1 water:1' 

я могу правильно найти количество раз, когда указано каждое слово, но я не могу вернуть его с указанным выше форматом.

+0

Просьба представить фрагмент кода. –

+2

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

+0

Просьба предоставить [минимальный, полный пример] (http://stackoverflow.com/help/mcve), который иллюстрирует вашу проблему. – Sam

ответ

-1

В основном из требований, которые вы упомянули, я полагаю, вы можете попробовать, как это в C#:

static string OrderInfo(string order) 
     { 
      int len = order.Length; int count; 
      StringBuilder builder = new StringBuilder(); 
      for(int i=0;i<len;i++) 
      { 
       count = 0; 
       char toSearch = order[i]; 

       foreach(char c in order) 
       { 
        if (c == toSearch) 
         count++; 
       } 

       builder.Append("Letter " + order[i] + ": " + count); 

      } 

      return builder.ToString(); 
     } 

Примечание: Это будет включать в себя repetitve письма также.

1

Метод format строка предназначена для такого рода задач:

return 'salad: {} hamburger: {} water: {}'.format(s, h, w) 

Unrelated: Ваш код счета хрупок. Это нормально работает с этим набором данных, потому что буквы shw появляются только один раз в весь набор слов. Однако, если вы добавили слово, например, 'milkshake' , этот код подсчитывал бы дополнительные s и h каждый раз, когда он появлялся.

Лучше всего было бы разделить строку на слова, а затем посмотреть на первую букву каждого:

for word in order.split(): 
    char = word[0] 
    if char == 's': 
    etc. 

Еще более надежный бы посчитать сами слова и вернуть dict, но Я оставлю это вам, когда вы доберетесь до диктофона; это выглядит как , вы только начинаете с Python.

+0

Я знал о том, что код подсчета слаб, но все в порядке, потому что салат, гамбургер и вода - единственные слова, разрешенные. – Cosimo

+0

@Cosimo Хорошо. Я надеюсь, что десять строк неуместных вещей не заставили вас обойти две строки, которые отвечали на ваш вопрос :) –

Смежные вопросы