2015-07-05 3 views
1

Вот задача, которую я получил:нужно более элегантное решение даже длина строки

Получая строку четной длины, возвращает первую половину. Итак, строка «WooHoo» дает «Woo».

first_half('WooHoo') → 'Woo' 
first_half('HelloThere') → 'Hello' 
first_half('abcdef') → 'abc' 

Вот мое решение:

def first_half(str): 
    if len(str) % 2 == 0: 
     b = len(str) // 2 
     return str[:b] 

Мой вопрос:

Можете ли вы показать мне более простое решение в Python, конечно, что не требует, чтобы я использовать переменная для половины длины строки (b)?

ответ

2

В Python:

str = "WooHoo" 
str = str[:-len(str)/2] 
1

В питоне:

return str[0: int(len(str)/2)]; 

здесь нет необходимости проверять, является ли она четным или нечетными клыками. len(str)/2 обойдется.


Ответил следующие до вопроса повторного редактирования:

В Javascript:

var str = "WooHoo"; 
if (str.length%2 == 0) { 
    console.log(str.substr(0, str.length/2)); 
    } 

Ответ является Woo.

Или просто использовать:

str.substr(0, str.length/2); 

Нет необходимости проверять if (str.length%2 == 0).

Другие языки имеют свойство length, а также функцию substring.

+0

ваш код Python результаты в TypeError: индексы ломтика должны быть целыми числами или None или есть метод __index__ – noob81

+0

понял это, мой переводчик 3,3 и ваш код был 2.x так целочисленным символом деления была проблема (// 3.3.) vs (/ 2.x) – noob81

+0

@ noob81 извините, я забыл приведение к int() –

1

Вы ищете что-то вроде этого:

def first_half(str): 
    if len(str) % 2 == 0: 
     return str[:len(str) // 2] 

или, может быть, как это?

def first_half(str): 
    return str[:len(str) // 2 if len(str) % 2 == 0 else 0] 

Это довольно расплывчато, поскольку вы не объяснили, что делать, если предоставляется неровная длина строки.

+0

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

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