分享

为什么要学编程?

 微笑如酒 2019-01-11

 今天是生信星球陪你的第241天


   大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~

   就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~

   这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!

豆豆写于19.1.8 补上上次没发的 

其实之前我也一直困惑这个问题?“为什么一定要自己学习编程,那么多写好的工具,直接拿来用不是更方便吗?我们毕竟是攻城狮而不是程序猿。”我如是安慰自己。

但所有的事情都有一样的规律,现在认为不重要,只是因为还没到那个程度。的确,开始我也想学编程python、perl的书也准备了,但却一直用不上知识,于是就产生了间断期。最近,有强烈的需求想要自己去探索数据的时候,却有点摸不着头脑了,因为现成的工具并不能满足我的全部需求,而且大脑里已经想象出了怎么去一步步处理,就是做不出来。这一次,我真的好想学习一下编程技术,不要求造多好的轮子,只要求自己用到的时候,有想法,能实现,就够了。之后的事情,就要等到再进阶,再有需求的情况去做了。

Perl和Python之间,我先选择Perl

这二者都很好,但是精力有限,只想先看懂简单的代码流程,另外perl one-line命令一直吸引着我,想借此机会探究一下,伊现富老师(https://github.com/Yixf-Education)翻译过一本Perl的书籍《Perl语言在生物信息学中的应用—基础篇》。今天先学习了三分之一,记录下个人认为重点的一些地方,里面有许多知识需要不断揣摩

什么是编程语言?

指定一系列语法规则指导计算机运行,编写的程序叫源代码,需要翻译成机器语言才能让计算机识别运行。机器语言是二进制,难以肉眼读取编写,因此还需要解释器(编译器)才能运行某种编程语言写的程序(如perl解释器运行perl程序)

编程过程

例如:我们手头有一个DNA序列想看下其中的调控元件数目,大脑中的想法框架应该这样构建:

  • 确定输入--新的DNA序列

    问题:输入文件名=》文件是否存在=》打开文件

  • 确定查询—调控元件列表

    就像DNA序列一样也要添加进来

  • 进行查找--算法

    一般会有好几种解决办法:

    算法一:读入一个调控元件,从头到尾对DNA查找,然后进行下一个调控元件;

    算法二:一次性读取DNA序列,再在DNA的每一个位置对调控元件进行查找

  • 输出

伪代码帮记录

灵感最重要,先将整体思路用语言先写出来。还是上面例子,我们可以这样写

get the name of DNA file

read in the DNA file

for each regulatory element
    if element in DNA, then
        add one to the count
print count

之后伪代码可以变成注释信息,方便自己一步步去写需要的代码,并且方便交流

常用元素

  • 命令解释

    第一行#起始:#! /usr/bin/perl -w ,告诉计算机这个是perl程序。-w表示遇到错误发出警告

  • 语句

    分号结尾,如赋值语句$DNA='ATCGCTACG'; ,将右边的真实DNA信息存储在perl程序中的DNA变量中

  • 变量

    只由大小写字母、数字、下划线组成,不能数字开头

    $开头的叫标量变量,储存字符串或各种数字,但是一个标量一次只能存储一种类型

  • 换行

    print $DNA \n\n表示输出DNA后中间空一行再打印其他

  • 单引号与双引号

    单引号属于强引用,其中的任何东西都会输出为字符,例如:'\n'会打印输出换行符,'\n'只会打印\n

  • 文件句柄

    就是处理文件需要用的东西,例如$protein=中的PROTEIN

    大小写没有规定,但一般使用大写表示;

    其中尖括号表示输入操作符,就是利用这个从外部读入数据,一般操作是:

    'NM_021964fragment.pep';
    open( PROTEINFILE, proteinfilenameEENMEEfragmentpepopenPROTEINFILE
    # 然后就可以把读入的PROTEINFILE存到数组中
  • 数组

    @开头,是储存多个标量的变量

    @bases = ('A''C''G''T');
    print @bases; #输出结果没空格
    print '@bases'#输出结果有空格
  • pop 数组末尾拿掉一个元素;shift开头拿掉一个元素;
    unshift添加一个元素到数组开头;push添加一个元素到数组结尾

有用的操作

连接

  • 使用.$DNA3=$DNA1.$DNA2 ,然后print '$DNA3\n';

  • $DNA='$DNA1DNA2',然后print '$DNA3\n';

  • print $DNA1, $DNA2, '\n';print '$DNA1$DNA2\n';

替换

image.png

注意到=~,它是绑定操作符,就是将右边的操作应用到左边变量的字符串上;

然后s/T/U/g,s表示替换(substitution),第一个斜线后跟着T,表示字符串中被替换的元素;第二个斜线后跟着U,是要替换成的元素;g表示全局

因此,这句命令的意思就是:把$RNA变量存储的字符串数据中所有T变成U

反向互补

tr ,第一个斜线后是要被替换的内容;第二个斜线后是替换后的内容,且位置对应进行替换

image.png

没写完就要十二点了,等下次写完一起发吧

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多