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