2016-07-15 3 views
-1

Этот код переворачивает все символы слова помимо первого и последнего символов. Как сделать так, чтобы он только случайным образом переворачивал два символа помимо первого и последнего символов?Python - случайный щелчок 2 символа в слове, отличном от первого и последнего

Например:

computers 
cmoputers 
comupters 
compuetrs 

Код:

def scramble(word): 
    result = word[0] 

    if len(word) > 1: 
     for i in range(len(word) - 2, 0, -1): 
      result += word[i] 

     result += word[len(word) - 1] 

    return result 


def main(): 
    print ("scrambled interesting python computers") 
    print scramble("scrambled"),scramble("interesting"),scramble("python"), scramble("computers") 

main() 
+0

Добавить 'if' заявление –

ответ

1

Это должно работать при переворачивании двух букв. Если длина слова меньше или равна 3, то его нельзя перевернуть. В этом случае он просто возвращает слово обратно.

from random import randint 

def scramble(word): 
    if len(word) <= 3: 
     return word 
    word = list(word) 
    i = randint(1, len(word) - 2) 
    word[i], word[i+1] = word[i+1], word[i] 
    return "".join(word) 

Если вы хотите две случайные буквы, чтобы быть переключены, вы можете сделать это:

from random import sample 

def scramble(word): 
    if len(word) <= 3: 
     return word 
    word = list(word) 
    a, b = sample(range(1, len(word)-1), 2) 
    word[a], word[b] = word[b], word[a] 
    return "".join(word) 
+0

Я считаю, что OP хочет * перевернуть * символы, а не * переключатель *. –

+0

Спасибо, изменил! Было легко исправить ^^ –

1

Try, чтобы увидеть, если этот код работает для вас:

import numpy as np 

def switchtwo(word): 
    ind1 = np.random.randint(1, len(word)-1) 
    ind2 = np.random.randint(1, len(word)-1) 
    l = list(word) 
    l[ind1], l[ind2] = l[ind2], l[ind1] 
    return "".join(l) 

Обратите внимание, что здесь возможно, что будет нет переключателя, если ind1 оказался равным ind2. Если это не так, вам следует проверить такой случай.

+0

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

+0

Кроме того, если вы не хотите * ind1 *, чтобы быть в состоянии равным * ind2 *, вы всегда можете сделать 'Пока ind2 == ind1: ind2 = np.random.randint (1, len (word) -1)' –

+1

Я считаю, что OP хочет * перевернуть * символы, нет * переключатель *. –

0

Следующие работы используются только в стандартной библиотеке. Кроме того, он всегда выбирает 2 разных символа внутри строки.

import random 
def scramble2(word): 
    indx = random.sample(range(1,len(word)-1), 2) 
    string_list = list(word) 
    for i in indx: 
     string_list[i], string_list[-i+len(word)-1] = string_list[-i+len(word)-1], string_list[i] 
    return "".join(string_list) 

Кроме того, вам нужно будет иметь дело со случаями были LEN (слово) < = 3: в таких случаях метод random.sample будет бросать ValueError, потому что не будет достаточное количество материала для выборки из (его образцы без замены). Один из способов - просто вернуть слово в этих случаях.

def scramble2(word): 
    try: 
     indx = random.sample(range(1,len(word)-1), 2) 
    except ValueError: 
     return word 
    string_list = list(word) 
    for i in indx: 
     string_list[i], string_list[-i+len(word)-1] = string_list[-i+len(word)-1], string_list[i] 
    return "".join(string_list) 
Смежные вопросы