Найти - Пользователи
Полная версия: На перебор комбинаций
Начало » Центр помощи » На перебор комбинаций
1
Chelovek357
Здравствуйте!
Задание в целом, примерно следующее:
На ввод пользователю подается соотношение букв «U» и «C»
Программа должна генерировать рандомный ряд из этих букв, а затем пробегать проверяя на комбинации (триплеты). В комбинацию всегда входят три буквы, комбинации не перекрываются.
Два вывода:
в первом выводе - кодируемые аминокислоты этими триплетами
(код для аминокислот всех комбинаций: UUU – фен, UUC – «фен», UCU – «сер», UCC – «сер», CUU – «лей», CUC – «лей», CCU – «про», CUC – «про»)
Во втором выводе должно выходить соотношение аминокислот в получившейся последовательности.
botinag
не совсем я понял ваше задание. но кое-какой код накатал, он может оказаться вам полезен.
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
Chelovek357
botinag
Да, спасибо, судя по коду, вы верно поняли задание. К сожалению, от меня глупый вопрос, что означает ошибка “'NoneType' object is not callable” ? указывает на 6 строку
terabayt
эт потому что у вас 3 пайтон
замените 5 строку на:
lst_grouped_by_3 = list(map(lambda *x: x, *[iter(lst)] * 3))
Chelovek357
Е-мое, да, точно же, все верно! Спасибо большое: !botinag за реализацию (это то, что нужно).terabayt за подсказку

Chelovek357
botinag
Простите еще раз, тыкался, вся разобраться не могу. Каким образом можно дополнить код так, чтобы соотношение букв “U” к “С” в сгенерированной цепочке было всегда, допустим 1:5?
botinag
Искать ответ в самом низу.
Ключевая фраза: 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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB