Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 6, 2014 14:58:44

Chelovek357
Зарегистрирован: 2014-12-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

На перебор комбинаций

Здравствуйте!
Задание в целом, примерно следующее:
На ввод пользователю подается соотношение букв «U» и «C»
Программа должна генерировать рандомный ряд из этих букв, а затем пробегать проверяя на комбинации (триплеты). В комбинацию всегда входят три буквы, комбинации не перекрываются.
Два вывода:
в первом выводе - кодируемые аминокислоты этими триплетами
(код для аминокислот всех комбинаций: UUU – фен, UUC – «фен», UCU – «сер», UCC – «сер», CUU – «лей», CUC – «лей», CCU – «про», CUC – «про»)
Во втором выводе должно выходить соотношение аминокислот в получившейся последовательности.

Офлайн

#2 Дек. 6, 2014 23:34:07

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

На перебор комбинаций

не совсем я понял ваше задание. но кое-какой код накатал, он может оказаться вам полезен.

import random
comb_dict = {'UUU': 'fen', 'UUC': 'fen', 'UCU': 'ser', 'UCC': 'ser',
             'CUU': 'lei', 'CUC': 'lei', 'CCU': 'pro', 'CCC': 'pro'}
lst = [random.choice('UC') for x in range(30)]
lst_grouped_by_3 = map(None, *[iter(lst)] * 3)
ak_list = [comb_dict.get(''.join(x)) for x in lst_grouped_by_3]
ak_count_list = [' - '.join([x, str(ak_list.count(x))]) for x in set(ak_list)]
print('cepochka: {}'.format(''.join(lst)))
print('aminokisloty: {}'.format(' '.join(ak_list)))
print(', '.join(ak_count_list))

>>> print('cepochka: {}'.format(''.join(lst)))
cepochka: UUCCCCUCCCCUCCCCCCUCCCCUUCUUCU
>>> print('aminokisloty: {}'.format(' '.join(ak_list)))
aminokisloty: fen pro ser pro pro pro ser pro ser ser
>>> print(', '.join(ak_count_list))
fen - 1, pro - 5, ser - 4

Офлайн

#3 Дек. 7, 2014 14:28:13

Chelovek357
Зарегистрирован: 2014-12-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

На перебор комбинаций

botinag
Да, спасибо, судя по коду, вы верно поняли задание. К сожалению, от меня глупый вопрос, что означает ошибка “'NoneType' object is not callable” ? указывает на 6 строку

Отредактировано Chelovek357 (Дек. 7, 2014 14:28:48)

Офлайн

#4 Дек. 7, 2014 14:54:32

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

На перебор комбинаций

эт потому что у вас 3 пайтон
замените 5 строку на:

lst_grouped_by_3 = list(map(lambda *x: x, *[iter(lst)] * 3))



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Дек. 7, 2014 15:01:22

Chelovek357
Зарегистрирован: 2014-12-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

На перебор комбинаций

Е-мое, да, точно же, все верно! Спасибо большое: !botinag за реализацию (это то, что нужно).terabayt за подсказку

Офлайн

#6 Дек. 7, 2014 20:59:24

Chelovek357
Зарегистрирован: 2014-12-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

На перебор комбинаций

botinag
Простите еще раз, тыкался, вся разобраться не могу. Каким образом можно дополнить код так, чтобы соотношение букв “U” к “С” в сгенерированной цепочке было всегда, допустим 1:5?

Офлайн

#7 Дек. 7, 2014 21:09:41

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

На перебор комбинаций

Искать ответ в самом низу.
Ключевая фраза: A common task is to make a random.choice() with weighted probabilities

Или если прямо 1:5 постоянно надо можно так:

import random
koef = 5
u = ['u'] * 3
c = ['c'] * len(u) * koef
cepochka = u+c
random.shuffle(cepochka)
>>> print(''.join(cepochka))
cccucccccuuccccccc

Отредактировано botinag (Дек. 7, 2014 21:31:20)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version