生信刷题之ROSALIND——Part 1

news2024/12/23 18:38:22

目录

  • 写在前面
  • 1、Counting DNA Nucleotides
    • Problem
    • Sample Dataset
    • Sample Output
    • Code
    • Output
  • 2、Transcribing DNA into RNA
    • Problem
    • Sample Dataset
    • Sample Output
    • Code
    • Output
  • 3、Complementing a Strand of DNA
    • Problem
    • Sample Dataset
    • Sample Output
    • Code
    • Output
  • 4、Rabbits and Recurrence Relations
    • Problem
    • Sample Dataset
    • Sample Output
    • Code
    • Output
  • 5、Computing GC Content
    • Problem
    • Sample Dataset
    • Sample Output
    • Code
    • Output

写在前面

ROSALIND: https://rosalind.info/problems/locations/

Rosalind是一个通过解决问题来学习生物信息学和编程的平台。使用此刷题网站的好处是在学习生物信息学的同时,能够加强编程能力,并且在实践中学习,快速进步。

在此将题目与答案记录下来,方便日后翻阅查看,如有错误还望读者批评指正。
刷题之前,需要提前安装配置好python。 笔者使用的python版本是3.9.7,版本不同,相应的代码可能会有差别,需要注意一下。

1、Counting DNA Nucleotides

Problem

碱基是组成遗传密码的基本单元,其中碱基A、G、C、T存在于DNA中,而A、G、C、U存在于RNA中。(A:腺嘌呤,G:鸟嘌呤,C:胞嘧啶,T:胸腺嘧啶,U:尿嘧啶)
DNA双螺旋结构中,位于两条方向相反、相互平行多核苷酸链上的嘌呤嘧啶碱基,围绕着螺旋轴,通过形成氢键,互相搭配成对,称为碱基配对。碱基配对,即一条长链上的A,总是与另一条长链上的T形成氢键; 而G总是与C形成氢键。即A=T、G≡C

Given: 一条DNA链 s ,其长度不超过1000 nt。

Return: 四个整数(用空格分隔),分别计算符号“A”、“C”、“G”和“T”在 s 中出现的次数。

Sample Dataset

AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC

Sample Output

20 12 17 21

Code

# Counting DNA Nucleotides

def count(s):
    A_count = s.count("A")
    C_count = s.count("C")
    G_count = s.count("G")
    T_count = s.count("T")
    return A_count, C_count, G_count, T_count


example = "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC"
A, C, G, T = count(example)
print(f"{A} {C} {G} {T}")

with open('rosalind_dna.txt', 'r') as file:
    DNA = file.read()
    # print(f"The length of this file is {len(DNA)}")
    A, C, G, T = count(DNA)
    print(f"{A} {C} {G} {T}")
    

Output

20 12 17 21
215 243 237 245

注意

  • 答题时,会下载一个文件,需要基于下载的文件进行操作
  • 每次下载的文件是随机的,所以答案并不固定
  • 需要输入正确答案才能下载下一题的文件

2、Transcribing DNA into RNA

Problem

转录(Transcription)是在RNA聚合酶的催化下,遗传信息由DNA复制到RNA(尤其是mRNA)的过程。作为蛋白质生物合成的第一步,转录是合成mRNA以及非编码RNA(tRNA、rRNA等)的途径。
真核生物合成蛋白质的转录过程以特定的单链DNA片段作为模板,RNA聚合酶作为催化剂,合成前mRNA,前mRNA经进一步加工后转为成熟mRNA。
转录时,DNA分子的双链打开,在RNA聚合酶的作用下,游离的4种核糖核苷酸按照碱基互补配对原则结合到DNA单链上,并在RNA聚合酶的作用下形成单链mRNA分子。
A(腺嘌呤)一定与T(胸腺嘧啶)或者在RNA中的U(尿嘧啶)配对,G(鸟嘌呤)与C(胞嘧啶)配对。

Given: 一条DNA链 t ,其长度不超过1000 nt。

Return: 由 t 经转录得到的RNA链。

Sample Dataset

GATGGAACTTGACTACGTAAATT

Sample Output

GAUGGAACUUGACUACGUAAAUU

Code

# Transcribing DNA into RNA

def transcribing(t):
    t = t.replace("T", "U")
    return t


RNA = "GATGGAACTTGACTACGTAAATT"
print(transcribing(RNA))

with open("rosalind_rna.txt", "r") as file:
    RNA = file.read()
    print(transcribing(RNA))
    

Output

GAUGGAACUUGACUACGUAAAUU
CACCAAACAGCCUUACAGCCUCCAUAAAGAGGACAUUUCUACAAGACGCAUGCCGACCCUCGCCGUCUAGUCACCCUCCUAUCGUUCCCUGUAAGUAGUUGGCUUAAGCCACCAAUUGCAAGUGUGAUUAGAUAUUAACUCCAUAUUUCGCUGGAUGUACCCGGCAUGUGCGUCGCCACGAACCUUCUGACCCUUGGACUAUGACACUACGCCGCGCAGUAUGCCUCAAAAGUGUAUGUAUUAUAGGAUUGCUCGUGGCACAAAGCUCGUGGUACCUUAAGAUCAAGUGGCACACAAUUCAUCAUUCGAUACUUAAUCGGGAUUCUACAGCAGUGACGUUGGGAAGACAGGUUCUCAGGUGGGGAUGAAUAGAGACCUAAUGAAAACCUACCAGCUGUGUGACUCGCACAGAAUCCGUGGCGGCAACUACUAUGUAUCAACCCCUGGCAGCACAAGUCUAAUGCAUACCUUUGCCUUGUUGGGCGUCUGUAAUCGUAUGUACCGUCAGUGCCGAUUCGGUUGAACAGAGACUGGGCAUGGCUGUUAGAGUUUGUUCCCACAUAGAAGGGAACGGGGUUACUUUCGAACCAUAGAUGACCACCAGAAUGGAAAGUUCAGAUGGAUGGCCGGGAACCCUUUAUACAGCGACUCCCAUCACGCUGUCUCCUCGGGACUUGUAAGUAGUGGUGUCGCACUGAAGGUAACAAGCGGUAACUCGCUGGUCGUAGUUUACGAGUCACGAGUCGGGAAAGGCGAGUCGCCCCAAUGCGAUACGACUAAAGCGGGUGUCUGAUGAAUCUAUUCCACAGACCACUUUCACAGCCGCAAGGUGGUCCUUAUCCUCACAUAUGUAUGUGAUGGUAACGGAAGACUCGAACGGAAAUCUAAUCCCAAAAUAAACAUCAGGGCGACUAUCCAGUCGCCUAAGAGUAACUUGAUUUGUAGGGGCGAAAGGGUCCGGCCAGAUUUAAGAGUUAUACUUAUAGCU

3、Complementing a Strand of DNA

Problem

转录(Transcription)是在RNA聚合酶的催化下,遗传信息由DNA复制到RNA(尤其是mRNA)的过程。作为蛋白质生物合成的第一步,转录是合成mRNA以及非编码RNA(tRNA、rRNA等)的途径。
真核生物合成蛋白质的转录过程以特定的单链DNA片段作为模板,RNA聚合酶作为催化剂,合成前mRNA,前mRNA经进一步加工后转为成熟mRNA。
转录时,DNA分子的双链打开,在RNA聚合酶的作用下,游离的4种核糖核苷酸按照碱基互补配对原则结合到DNA单链上,并在RNA聚合酶的作用下形成单链mRNA分子。
A(腺嘌呤)一定与T(胸腺嘧啶)或者在RNA中的U(尿嘧啶)配对,G(鸟嘌呤)与C(胞嘧啶)配对。

Given: 一个长度不超过1000 bp的DNA链s。

Return: 与s互补的链sc。

Sample Dataset

AAAACCCGGT

Sample Output

ACCGGGTTTT

Code

# Complementing a Strand of DNA

def complement(s):
    s = s[::-1]
    sc = ""
    for i in s:
        if i == "A":
            sc += "T"
        elif i == "T":
            sc += "A"
        elif i == "C":
            sc += "G"
        elif i == "G":
            sc += "C"
    return sc


DNA = "AAAACCCGGT"
print(complement(DNA))

with open("rosalind_revc.txt", "r") as file:
    DNA = file.read()
    print(complement(DNA))
    

Output

ACCGGGTTTT
TTCATGATTGCGAGTCGGGCCCTGGGGACGTCCCCACCCTGGCAGCTTACTAAGGCAAAGTCGCTTGCTGAGGTTTGGGCTTTGAGATAAACGCCTCTTTGGCAGGCGCAAAAGGCCGGTGGACACCGGCTCGTTGCCCATGCCACAGGACTCAATACACGGGGTAAAGTTCGTGCGCTGATATTACGTTGTCAAGCTAACCTTAGGAAAGGTTCTAATTAAAGGGACCCGAGTGACGCGTCTAATATTTTCAACAGATATGTGTTCGGACCCACGAACAGCATTGTACATGCAAGACCTATTAATGGATATGCGTTTTGACTCAGTGACCCAGCGTATAACATATTTCGTCTTCTGCGTCATATCATAAACCAACGGACAATTCGACTGGAGTGCACTGTCTCCAACGCCCGTCATGCGGCTCAGTATCAACTGATAACACTTGGTGCTACCGGTTCGGTACGCCAGTCCAACAGAATGATGGGAACGTGCGCCAGTGGGCATTCACCACACTATTACAGGTAGAGTATGATAGATGAAAGTAAGTTGTACATGACCCTTTCTTATGTAAACCTCCTGTCCGGGCCCGGGGAATCGTGGTTGATCTCCACTTTGCGTGAAAATACGACGTATATACCTCCGTCGGGCGAAAACTCTCTCTCTACTCTAGCACACAAAAGTATGTGCGCGGGCGTACCTGGAACCCCAGACCTCCCTGTAAGAGGGGTAATTCTCCACTAAGCGCGACCTAAAGCCTCGTCATCGGGGGGTAAAGAGTATTGCTTGCTGTATACGGTCAATGAGCCACGATCCTGTGTACCATTTCGTTTCATTTCGGAAGGGGCCAGCCATGGCCATCGAAGTAGCGTAGAGCGTAGGACTATGTGGACCTCCCTCCCAACGAGTGCACGGGGGGCCCTATACTCAACTCCAA

4、Rabbits and Recurrence Relations

Problem

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89…
这个数列从第3项开始,每一项都等于前两项之和。

如图所示,最初只有一对未成年兔子,一个月后成年开始生育,每对兔子一次只生一对。生下来的兔子经过一个月之后成年,然后生育,循环往复~

Given: n,k为正整数,n≤40,k≤5

Return: 在n个月之后出现的兔子对的总数。
如果我们从1对开始,在每一代,每对繁殖年龄的兔子生产 k 对兔子(注意是 k 对)。
图中相当于n=1, k=1

Sample Dataset

5 3

Sample Output

19

Code

# Rabbits and Recurrence Relations
def fib_rabbits(n, k):
    rabbits = [1, 1]
    for i in range(2, n):
        current_rabbits = rabbits[i - 1] + rabbits[i - 2] * k
        rabbits.append(current_rabbits)
    return rabbits[-1]


print(fib_rabbits(5, 3))

with open("rosalind_fib.txt", "r") as file:
    text = file.read().split()
    n = int(text[0])
    k = int(text[1])
    print(fib_rabbits(n, k))

Output

19
436390025825

5、Computing GC Content

Problem

GC含量(GC-content,guanine-cytosine content)是分子生物学和遗传学的术语,指研究对象(例如放线菌)的全基因组(DNA 或 RNA 分子)或其片段中,含氮碱基鸟嘌呤(G)或胞嘧啶(C)任何一个所占的百分比。一种生物的基因组或特定DNA、RNA片段有特定的GC含量。

例如,“AGCTATAG”的GC含量为 3/8 * 100% = 37.5%。任何DNA链的互补链都具有相同的GC含量。

在生物信息学中,FASTA格式是一种用于记录核酸序列或肽序列的文本格式,其中的核酸或氨基酸均以单个字母编码呈现。该格式同时还允许在序列之前定义名称和编写注释。
FASTA格式中的一条完整序列,包含开头的单行描述行和多行序列数据。描述行行首前置半角大于号(“>”)以和数据行区分。“>”后紧接的内容为该序列的标识符,该行剩余部分则为序列的描述(标识符与描述均非必须)。“>”和标识符之间不应有空格,且建议将单行内容限制在80字符以内。序列的结束以下一条序列的“>”出现为标识。

Given: n,k为正整数,n≤40,k≤5

Return: 在n个月之后出现的兔子对的总数。
如果我们从1对开始,在每一代,每对繁殖年龄的兔子生产 k 对兔子(注意是 k 对)。
图中相当于n=1, k=1

Sample Dataset

>Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>Rosalind_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
TGGGAACCTGCGGGCAGTAGGTGGAAT

Sample Output

Rosalind_0808
60.919540

Code

# Computing GC Content
def read_fasta(file):
    """字典存放序列名称和序列"""
    sequences = {}
    with open(file, "r") as f:
        for line in f:
            line = line.strip()
            if line.startswith(">"):
                name = line[1:]
                sequences[name] = ""
            else:
                sequences[name] += line
    return sequences


def gc_content(sequence):
    """计算GC含量"""
    gc_count = sequence.count("G") + sequence.count("C")
    seq_len = len(sequence)
    return (gc_count / seq_len) * 100


def highest(sequences):
    """找到GC含量最高的序列"""
    highest_name = ""
    highest_gc = 0
    for name, seq in sequences.items():
        if gc_content(seq) > highest_gc:
            highest_name = name
            highest_gc = gc_content(seq)
    return highest_name, round(highest_gc, 6)


example = read_fasta("gc_content_example.txt")
name, gc = highest(example)
print(f"{name}\n{gc}")

sequences = read_fasta("rosalind_gc.txt")
name, gc = highest(sequences)
print(f"{name}\n{gc}")

Output

Rosalind_0808
60.91954
Rosalind_9578
51.348039

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android操作系统介绍

目录 Android 名词 Android LOGO 体系架构 Android系统架构 Linux 内核 硬件抽象层(HAL) Android Runtime 原生C/C库 Java API框架 系统应用 应用组件 活动 (Activity) 服务 (Service ) 广播接收器 &…

BLOOM模型结构详解

《BLOOM: A 176B-Parameter Open-Access Multilingual Language Model》 论文地址: https://arxiv.org/pdf/2211.05100.pdf 代码地址: transformers库-modeling_bloom.py BigScience 官方提供的代码链接并没有找到完整的模型实现代码,只有提示说模型结构代码是在 Megatron 的…

JS 中深拷贝的几种爱恨情仇

页面开发中,经常会碰到需要对数据进行某些处理操作,又不想影响原先的数据,所会经常将数据进行拷贝,当然这里指的是深拷贝。 深拷贝和浅拷贝的区别? 深拷贝通通俗点来讲呢,其实就是不管当前要操作的数据层级…

目标检测算法——YOLOv5/v7/v8改进结合涨点Trick之Wise-IoU(超越CIOU/SIOU)

超越CIOU/SIOU | Wise-IoU助力YOLO强势涨点!!! 论文题目:Wise-IoU: Bounding Box Regression Loss with Dynamic Focusing Mechanism 论文链接:https://arxiv.org/abs/2301.10051 ​ 近年来的研究大多假设训练数据中的…

Java实现发送邮件(定时自动发送邮件)

系列文章目录 Redis缓存穿透、击穿、雪崩问题及解决方法Spring Cache的使用–快速上手篇分页查询–Java项目实战篇全局异常处理–Java实战项目篇 该系列文章持续更新,更多的文章请点击我的主页查看哦! 文章目录 目录 系列文章目录 文章目录 前言 一…

算法训练第五十七天 | 647. 回文子串、516.最长回文子序列、动态规划总结篇

动态规划part17 647. 回文子串题目描述思路暴力解法动态规划双指针法 516.最长回文子序列题目描述思路 动态规划总结篇动划基础背包问题系列打家劫舍系列股票系列子序列系列总结 647. 回文子串 题目链接:647. 回文子串 参考:https://programmercarl.com…

hot100:数组——31、33

31. 下一个排列 思路:其实这道题的意思就是,简单地说,就是找到一个比现有的给出的数组代表的值大的最小的数 比如给出的数组是[1,2,3],它代表的数值是123,现有的元素组成的数值中,比123大的有很多&#xf…

3.6 n维随机变量

学习目标: 学习n维随机变量需要掌握一定的数学知识,包括多元微积分、线性代数和概率论等。要学习n维随机变量,我会采取以下步骤: 复习相关的数学知识:首先,我会复习多元微积分、线性代数和概率论的基本知…

OpenCV介绍与GUI特征(一)

目录0.1 OpenCV-Python教程简介OpenCVOpenCV-PythonOpenCV-Python教程OpenCV需要你!!!贡献者0.2 在Windows中安装OpenCV-Python目标从预制的二进制文件中安装OpenCV从源代码构建OpenCV练习0.3 在Ubuntu中安装OpenCV-Python目标从预制的二进制文件中安装OpenCV-Python从源码构建…

Revit怎么绘制结构梁?一键生成梁?

绘制结构梁是Revit基础的功能,对于不少刚接触Revit的小伙伴来说似乎还无从下手,今天就让小编来告诉大家在Revit中绘制结构梁的方法。 一、Revit中结构梁图文绘制过程 首先,我们选择“结构”选项卡中的“梁”工具,点击选择梁的类…

android12 displayArea学习

一:数据结构分析 1:android 12 WindowContainer 的类继承关系如下 下图为 WindowContainer 简要的对象图。 下图是 Aosp默认的display层次结构对象图。 Aosp定义的feature有如下 FEATURE_ROOT 0; FEATURE_DEFAULT_TASK_CONTAINER 1; FEATURE_WINDOW_…

DNS服务器 - 理论

DNS服务器1. 概念2. DNS域名结构3. 域名的分级4. 域名服务器5. 域名解析过程5.1 递归查询与迭代查询5.2 解析流程1. 迭代查询2. 递归查询6. 高速缓存:7. 加上主机缓存后的DNS解析流程8. 常见的域名解析记录9. DNS正向解析和反向解析1. 概念 DNS服务器(D…

C++指针与其它复合类型

目录 前言: 1.指针与字符串 1.1cout接收char类型的地址的反应 1.2字符串字面值 1.3字符串备份 2.使用new创建动态结构 3.使用new和delete搭配存储键盘输入的字符串 前言: 指针我们已经知道如何使用了,也知道指针和数组配合起来使用&am…

DHCP及中继(UOS)

DHCP服务器 中继器 客户端 服务器 安装DHCP apt install isc-dhcp-server -y 编辑配置文件 vim /etc/dhcp/dhcpd.conf 重启服务 systemctl restart isc-dhcp-server 配置监听网卡 vim /etc/default/isc-dhcp-server 中继器 安装dhcp yum install dhcp -y nmtui 修改…

【LeetCode每日一题: 1042. 不邻接植花 | 图论 | 染色问题】

🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎 🍎座右…

Qt中调用C#制作的com组件

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 这里记录一下在 Qt 64位程序中调用 C# 制作的 com 组件的流程,方便后期自己回顾。 1. 了解 TLB 格式 拿到的依赖库最…

hbase进阶操作——读流程与写流程介绍

系列文章目录 centos7虚拟机下hbase的使用案例讲解 文章目录 系列文章目录 一、hbase架构原理 1.1、StoreFile 1.2、MemStore 1.3、WAL 二、hbase的写流程 2.1、写流程的流程图 2.2、写流程的流程图说明 三、hbase读流程 3.1、读流程的流程图 3.2、读流程的流程图解…

C/C++|物联网开发入门+项目实战|指针|嵌入式C语言高级|C语言内存空间的使用-学习笔记(9)

文章目录2-3 : C语言内存空间的使用指针概述示例:指针修饰符指针运算符示例示例1多级指针例子省略argc(个数)的常用写法:参考: 麦子学院-嵌入式C语言高级-内存空间2-3 : C语言内存空间的使用 指针概述 内存类型资源地…

CPU工作原理

CPU(中央处理器)是计算机中的重要组件,它负责执行计算机程序中的指令。在了解CPU的工作原理之前,我们需要先了解一些基本概念。 指令和指令集 指令是计算机程序中的基本单位,它指示计算机执行某个操作。指令集是一组…

我在“Now In Android”中学到的 9 件事

我在“Now In Android”中学到的 9 件事 Now in Android是一款功能齐全的 Android 应用程序,完全使用 Kotlin 和 Jetpack Compose 构建。它遵循 Android 设计和开发最佳实践,旨在为开发人员提供有用的参考。 https://github.com/android/nowinandroid UI…