Python学习教程(二)

输入输出

交互式输入输出

在很多时候,你会想要让你的程序与用户(可能是你自己)交互。你会从用户那里得到输入,然后打印一些结果。我们可以分别使用raw_input和print语句来完成这些功能。

a = raw_input("Please input a string\n> ")

print "The string you typed in is: ", a
Please input a string
> a
The string you typed in is:  a
print "这是一个保留例子,仅供玩耍\n"
lucky_num = 5
c = 0

while True:
    b = int(raw_input("Please input a number to check if you are \
lucky enough to guess right: \n"))
    if b == lucky_num:
        print "\nYour are so smart!!! ^_^ ^_^"
        #----------------------------------------------------
    #--------------------------------------------------------
    else:
        print "\nSorry, but you are not right. %>_<%"
        while 1:
            c = raw_input("Do you want to try again? [Y/N] \n")
            if c == 'Y':
                try_again = 1
                break                
            elif c == 'N':
                try_again = 0
                break
            else:
                print "I can not understand you, please check your input. \n"
                continue
        #----------------------------------------------------
        if try_again:
            print "\nHere comes another run. Enjoy!\n"
            continue
        else:
            print "\nBye-bye\n"
            break
这是一个保留例子,仅供玩耍

Please input a number to check if you are lucky enough to guess right: 
5

Your are so smart!!! ^_^ ^_^
Please input a number to check if you are lucky enough to guess right: 
7

Sorry, but you are not right. %>_<%
Do you want to try again? [Y/N] 
Y

Here comes another run. Enjoy!

Please input a number to check if you are lucky enough to guess right: 
8

Sorry, but you are not right. %>_<%
Do you want to try again? [Y/N] 
N

Bye-bye

文件读写

文件读写是最常见的输入和输出操作。你可以实用fileopen来实现。

print "新建一个文件"

context = '''The best way to learn python contains two steps:
1. Rember basic things mentionded here masterly.

2. Practise with real demands.
'''

print "以写入模式(w)打开一个文件并命名为(Test_file.txt)"
fh = open("Test_file.txt","w") 
print >>fh, context
#fh.write(context)
fh.close() #文件操作完成后必须关闭文件句柄
新建一个文件
以写入模式(w)打开一个文件并命名为(Test_file.txt)
print "以只读模式(r)读入一个名为(Test_file.txt)的文件"

print

for line in open("Test_file.txt"):
    print line
以只读模式(r)读入一个名为(Test_file.txt)的文件

The best way to learn python contains two steps:

1. Rember basic things mentionded here masterly.



2. Practise with real demands.
print '''避免中间空行的输出。
从文件中读取的每一行都带有一个换行符,
而Python的print默认会在输出结束时加上换行符,
因此打印一行会空出一行。为了解决这个问题,有下面两套方案。'''

print "在print语句后加上逗号(,)可以阻止Python对每次输出自动添加的换行符"
print

for line in open("Test_file.txt"):
    print line,

print

print "去掉每行自身的换行符"
for line in open("Test_file.txt"):
    print line.strip()
避免中间空行的输出。
从文件中读取的每一行都带有一个换行符,
而Python的print默认会在输出结束时加上换行符,
因此打印一行会空出一行。为了解决这个问题,有下面两套方案。
在print语句后加上逗号(,)可以阻止Python对每次输出自动添加的换行符

The best way to learn python contains two steps:
1. Rember basic things mentionded here masterly.

2. Practise with real demands.


去掉每行自身的换行符
The best way to learn python contains two steps:
1. Rember basic things mentionded here masterly.

2. Practise with real demands.

实战练习(一)

背景知识

1. FASTA文件格式

>seq_name_1 sequence1 >seq_name_2 sequence2

2. FASTQ文件格式

@HWI-ST1223:80:D1FMTACXX:2:1101:1243:2213 1:N:0:AGTCAA TCTGTGTAGCCNTGGCTGTCCTGGAACTCACTTTGTAGACCAGGCTGGCATGCA + BCCFFFFFFHH#4AFHIJJJJJJJJJJJJJJJJJIJIJJJJJGHIJJJJJJJJJ

作业 (一)

  1. 给定FASTA格式的文件(test1.fa 和 test2.fa),写一个程序 cat.py 读入文件,并输出到屏幕
    • open(file)
    • for .. in loop
    • print
    • the amazng , or strip() function

2.用到的知识点给定FASTQ格式的文件(test1.fq), 写一个程序 cat.py 读入文件,并输出到屏幕

  • 同上
  • 用到的知识点

3.写程序 splitName.py, 读入test2.fa, 并取原始序列名字第一个空格前的名字为处理后的序列名字,输出到屏幕

  • split
  • 字符串的索引
  • 用到的知识点
  • 输出格式为: >NM_001011874 gcggcggcgggcgagcgggcgctggagtaggagctg.......

4.写程序 formatFasta.py, 读入test2.fa,把每条FASTA序列连成一行然后输出

  • join
  • strip
  • 用到的知识点
  • 输出格式为: >NM_001011874 gcggcggcgggc......TCCGCTG......GCGTTCACC......CGGGGTCCGGAG

5.写程序 formatFasta-2.py, 读入test2.fa,把每条FASTA序列分割成80个字母一行的序列

  • 字符串切片操作
  • range
  • 用到的知识点
  • 输出格式为 >NM_001011874 gcggcggcgc.(60个字母).TCCGCTGACG #(每行80个字母) acgtgctacg.(60个字母).GCGTTCACCC ACGTACGATG(最后一行可不足80个字母)

6.写程序 sortFasta.py, 读入test2.fa, 并取原始序列名字第一个空格前的名字为处理后的序列名字,排序后输出

  • sort
  • dict
  • aDict[key] = []
  • aDict[key].append(value)
  • 用到的知识点

7.提取给定名字的序列

  • 用到的知识点
  • print >>fh, or fh.write()
  • 取模运算,4 % 2 == 0
  • 写程序 grepFasta.py, 提取fasta.name中名字对应的test2.fa的序列,并输出到屏幕。
  • 写程序 grepFastq.py, 提取fastq.name中名字对应的test1.fq的序列,并输出到文件。

8.写程序 screenResult.py, 筛选test.expr中foldChange大于2的基因并且padj小于0.05的基,可以输出整行或只输出基因名字

  • 逻辑与操作符 and
  • 文件中读取的内容都为字符串,需要用int转换为整数,float转换为浮点数
  • 用到的知识点

9.写程序 transferMultipleColumToMatrix.py 将文件(multipleColExpr.txt)中基因在多个组织中的表达数据转换为矩阵形式

  • aDict[‘key’] = {}
  • aDict[‘key’][‘key2’] = value
  • if key not in aDict
  • aDict = {‘ENSG00000000003’: {“A-431”: 21.3, “A-549”, 32.5,…},”ENSG00000000003”:{},}
  • 用到的知识点
  • 输入格式(只需要前3列就可以) Gene Sample Value Unit Abundance ENSG00000000003 A-431 21.3 FPKM Medium ENSG00000000003 A-549 32.5 FPKM Medium ENSG00000000003 AN3-CA 38.2 FPKM Medium ENSG00000000003 BEWO 31.4 FPKM Medium ENSG00000000003 CACO-2 63.9 FPKM High ENSG00000000005 A-431 0.0 FPKM Not detected ENSG00000000005 A-549 0.0 FPKM Not detected ENSG00000000005 AN3-CA 0.0 FPKM Not detected ENSG00000000005 BEWO 0.0 FPKM Not detected ENSG00000000005 CACO-2 0.0 FPKM Not detected
  • 输出格式 Name A-431 A-549 AN3-CA BEWO CACO-2 ENSG00000000460 25.2 14.2 10.6 24.4 14.2 ENSG00000000938 0.0 0.0 0.0 0.0 0.0 ENSG00000001084 19.1 155.1 24.4 12.6 23.5 ENSG00000000457 2.8 3.4 3.8 5.8 2.9

10.写程序 reverseComplementary.py计算序列 ACGTACGTACGTCACGTCAGCTAGAC的反向互补序列

  • reverse
  • list(seq)
  • 用到的知识点

11.写程序 collapsemiRNAreads.py转换smRNA-Seq的测序数据

  • 输入文件格式(mir.collapse, tab-分割的两列文件,第一列为序列,第二列为序列被测到的次数) ID_REF VALUE ACTGCCCTAAGTGCTCCTTCTGGC 2 ATAAGGTGCATCTAGTGCAGATA 25 TGAGGTAGTAGTTTGTGCTGTTT 100 TCCTACGAGTTGCATGGATTC 4
  • 输出文件格式 (mir.collapse.fa, 名字的前3个字母为样品的特异标示,中间的数字表示第几条序列,是序列名字的唯一标示,第三部分是x加每个reads被测到的次数。三部分用下划线连起来作为fasta序列的名字。) >ESB_1_x2 ACTGCCCTAAGTGCTCCTTCTGGC >ESB_2_x25 ATAAGGTGCATCTAGTGCAGATA >ESB_3_x100 TGAGGTAGTAGTTTGTGCTGTTT >ESB_4_x4 TCCTACGAGTTGCATGGATTC

12.简化的短序列匹配程序 (map.py) 把short.fa中的序列比对到ref.fa, 输出短序列匹配到ref.fa文件中哪些序列的哪些位置

  • find
  • 用到的知识点
  • 输出格式 (输出格式为bed格式,第一列为匹配到的染色体,第二列和第三列为匹配到染色体序列的起始终止位置(位置标记以0为起始,代表第一个位置;终止位置不包含在内,第一个例子中所示序列的位置是(199,208](前闭后开,实际是chr1染色体第199-206的序列,0起始). 第4列为短序列自身的序列.)。
  • 附加要求:可以只匹配到给定的模板链,也可以考虑匹配到模板链的互补链。这时第5列可以为短序列的名字,第六列为链的信息,匹配到模板链为’+’,匹配到互补链为’-‘。注意匹配到互补链时起始位置也是从模板链的5’端算起的。 chr1 199 208 TGGCGTTCA chr1 207 216 ACCCCGCTG chr2 63 70 AAATTGC chr3 0 7 AATAAAT

备注:

  • 每个提到提到的“用到的知识点”为相对于前面的题目新增的知识点,请综合考虑。此外,对于不同的思路并不是所有提到的知识点都会用着,而且也可能会用到未提到的知识点。但是所有知识点都在前面的讲义部分有介绍。
  • 每个程序对于你身边会写的人来说都很简单,因此你一定要克制住,独立去把答案做出,多看错误提示,多比对程序输出结果和预期结果的差异。
  • 学习锻炼“读程序”,即对着文件模拟整个的读入、处理过程来发现可能的逻辑问题。
  • 程序运行没有错误不代表你写的程序完成了你的需求,你要去查验输出结果是不是你想要的。

关于程序调试:

  • 在初写程序时,可能会出现各种各样的错误,常见的有缩进不一致,变量名字拼写错误,丢失冒号,文件名未加引号等,这时要根据错误提示查看错误类型是什么,出错的是哪一行来定位错误。当然,有的时候报错的行自身不一定有错,可能是其前面或后面的行出现了错误。
  • 用脑袋运行程序:当程序写作完成后,自己尝试对着数据文件,一行一行的执行程序,来看程序的运行是否与自己想干的活一致,有没有纰漏。
  • 当结果不符合预期时,要学会使用print来查看每步的操作是否正确,比如我读入了字典,我就打印下字典,看看读入的是不是我想要的,是否含有不该存在的字符;或者在每个判断句、函数调入的情况下打印个字符,来跟踪程序的运行轨迹

原文发布于微信公众号 - 生信宝典(Bio_data)

原文发表时间:2017-05-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Star先生的专栏

Tensorflow 术语表

本文主要简要介绍了广播操作、Graph(图)、Session(会话)、Tensor 等13个 Tensorflow 术语表。希望对大家了解学习 Tensorfl...

1.1K1
来自专栏开源优测

[接口测试_B] 03 Pytest断言处理_assert和异常断言

Pytest的断言方式及应用场景 使用assert语句 断言预期的异常 断言预期的告警 利用上下文信息进行断言 自定义断言方式 使用assert语句进行断言...

44411
来自专栏用户2442861的专栏

数据库系统——B+树索引

http://blog.csdn.net/cjfeii/article/details/10858721

4791
来自专栏编程之旅

Python——爬虫入门XPath的使用

Xpath即为XML路径语言(XML Path Language)。它是一种用来确定XML文档中某部分位置的语言。

1254
来自专栏猿人谷

面试必备:HashMap、Hashtable、ConcurrentHashMap的原理与区别

HashMap和Hashtable都是用hash算法来决定其元素的存储,因此HashMap和Hashtable的hash表包含如下属性:

1771
来自专栏Phoenix的Android之旅

哈希碰撞是什么,怎么解决

Hash是一种校验方法, 其中应用最广为人知的就是 HashMap。 当然Hash算法并不完美,有可能两个不同的原始值在经过哈希运算后得到同样的结果, 这样就是...

1982
来自专栏企鹅号快讯

Python模块知识4:序列化Json/pickle

序列化与反序列化 序列化:把Python的基本数据类型转为字符串 反序列化:把字符串转为Python的基本数据类型 Python中用于序列化的两个模块: jso...

2269
来自专栏python学习之旅

Python笔记(六):推导数据

(一)  准备工作 创建1个文件记录运动员的跑步成绩 james.txt  2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-...

3165
来自专栏Laoqi's Linux运维专列

正则三剑客-awk

awk与前两个不同之处是支持分段处理; #mkdir awk; cp /etc/passwd awk/passwd         //前期准备,创建一个awk...

2865
来自专栏Vamei实验室

纸上谈兵: 哈希表 (hash table)

HASH 哈希表(hash table)是从一个集合A到另一个集合B的映射(mapping)。映射是一种对应关系,而且集合A的某个元素只能对应集合B中的一个元素...

21810

扫码关注云+社区

领取腾讯云代金券