Python入门:for循环(一)(附带习题

for循环的使用

Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。如果不能意会"遍历"的意思,那我们用具体的实例来说明:

list=['Python','2018','June']

foriinlist:

print(i)

output:

此处的 i 在for循环是一个指代list元素的变量,不需要提前定义,一般你可以根据自己的习惯任意命名一个变量来替代 i ,但最终行使的功能都是一样的。这也是Python的方便之处。所以如果你在for循环外面print(i),则会出现报错,因为变量 i 没有定义。自己可以试试看,我这里就不啰嗦了。

上面是以List为例举例,同样String,Tuple,Dictionary和Set也可以进行for循环的遍历每个元素。这里以String和Dictionary为例,进行列举,其他自行测试。

str='Python'

foriinstr:

print(i)

dict={'A':'Python','B':'2018','C':'June'}

forkey,valueindict.items():#这里需要注意items()的用法

print(key,value)

output:

这里需要提一下,Dictionary的for循环使用方法,需要用到它的自带函数items(),在介绍Python的数据类型时有提到,如果有需要,可以返回复习一下(

Python入门:Python 3的六个标准的数据类型(四)

),里面用到的内容非常齐全,建议收藏。

for循环的语法格式如下:

注:这里的iterable是可迭代对象,可以直接作用于for循环的数据类型有以下几种:一类是除了Number外的其他五种数据类型,我刚在前面提到了,如list、tuple、dict、set、str 等;另一类是generator,包括生成器和带yield 的generator function,后面会讲到,这里不做阐述。

for循环的用法非常多,且常见,所以务必掌握它的用法。还记得九九乘法表要怎么用Python完成吗?这里写两种做法。

菜鸟做法:

foriinrange(1,10):

forjinrange(1,10):

print('{} * {} = {}'.format(i,j,i*j))

output:

.......

乍一看没什么毛病,但是一细看这种写法太过冗余,如果有教科书的那种感觉就好了。当然可以做到,只需要稍早改变即可。

看看高手的写法,教科书级别的:

foriinrange(1,10):

forjinrange(1,i+1):

print('{ } * { } = { }\t'.format(i,j,i*j),end='')

#通过指定end参数的值,可以取消在末尾输出回车符,实现不换行。

print()

#九九乘法表需要一个多行多列的效果,所以需要换行,

#可以用一个空print消掉end来实现

output:

今天就整理这些,明天继续,接下来我们做一下习题。习题内容来自Jimmy的生信技能树论坛的菜鸟Python练习,习题非常不错,直接用的上的是生信分析相关的,便于上手。今天直接做习题一,链接见下:

第一次做这些习题,你可能有些不熟悉情况,我这里详细说一些,将做题流程说一下。后面再做习题就不会说这么详细了。

第一步,进入论坛找到题目,点击标红的链接。

第二步,看题目,下载文件。

第三步,提交答案。

这是流程,如果自己不会做或者觉得做的不够好,要怎么办?回到生信技能树论坛,这里有高手的教科书级别的代码,也有跟我一样的菜鸟。好好跟着学。

好了,来看一下文件:

txt文件里是一些碱基数目,作业是统计文件中四种碱基的数目(‍‍Four integers (separated by spaces) counting the respective number of times that the symbols 'A', 'C', 'G', and 'T' occur inss.‍‍)。

菜鸟做法:

print('方法一:笨方法完成文档中碱基数的计算')

withopen(r'F:\miniconda\test\biotree_files\rosalind_dna.txt',

'r')ass:

b=s.readline().rstrip()

A=

T=

C=

G=

foriinb:

ifi=='A':

A+=1

ifi=='T':

T+=1

ifi=='C':

C+=1

ifi=='G':

G+=1

print(A,C,G,T)

output:

PS:这个方法一眼看过去没毛病,但是如果出现文档中有小写的碱基,那么在上述的统计过程中是无法被考虑到的。当然这个文件没有问题,但是对于处理比较大的文件,你不能保证是不是有小写的情况,所以再做此类题的时候,不光要考虑去空格,还要考虑大小写的问题。

代码的写法有很多种,每个人看到的一套题的想法和入手点也不一样。刚开始的阶段,所以你不需要必须写成怎样。等到学到一定程度,再想着精简和完善你的代码。所以一边按照自己的方法写,写完了再跟高手写的对比,学习,再尝试高手的思维来写,下次使用中就可以用的到。

生物技能树给的高级做法:

print('方法二:高阶方法完成文档中碱基数的计算')

seq=''

ntCounter=[]

withopen(r'F:\miniconda\test\biotree_files\rosalind_dna.txt',

'r')ass:

forlineins:

line=line.rstrip()

#去rstip()删除string字符串末尾的指定字符(默认为空格)

seq=seq+line.upper()

#将去空格的line中的每个碱基大写。

#此处应区分upper()和capitalize()的用法

forntin['A','C','G','T']:

ntCounter.append(seq.count(nt))

print('\t'.join(map(str,ntCounter)))

注:map()属于高级函数,后面会讲到。如果这个代码看的不大懂,看我在下面写到的第三条。

output:

这里需要提到上面习题中涉及的四点内容:

1、open()打开文件时,会使用到“\”特殊符号,有\t,\r,\n等情况,会发生转义,但是我们并不想使用这些转义符号,而是用它原始的含义,这种情况的解决方法其实前面有提到过(Python入门:Python 3的六个标准的数据类型(一))。

举例说明:

withopen('F:\miniconda\test\biotree_files\rosalind_dna.txt',

'r')ass:

加 ‘r’:

withopen(r'F:\miniconda\test\biotree_files\rosalind_dna.txt',

'r')ass:

2、当引号里出现引号时,怎么做才不出现转义?

print('times of the symbols 'A', 'C', 'G', and 'T' occur in s.')

上面的代码因为引号的互相搭配出现错义。一般有两种做法可以解决上述问题:

一种是,如果只使用一种引号,需要在内部的所有引号前加上‘\’进行转义:

print('times of the symbols\'A\',\'C\',\'G\', and\'T\'

occur in s.')

另一种是使用两种引号,即单双引号加以区分:

print("times of the symbols 'A', 'C', 'G', and 'T' occur in s.")

3、高阶版的做法如果看的不是很明白,可以看一下下面这个代码,帮助理解一下:

L=[2,3,1,3,5,3,1,3,5,1,2,3,1,2,3]

num_times=[]

forjin[1,2,3,5]:

P=L.count(j)

num_times.append(P)

print(num_times)

output:

这里是统计列表L中1,2,3,5出现的次数,利用for循环和List的count()和append()函数实现的。这些函数在Python入门:Python 3的六个标准的数据类型(二)中有详细列举。

4、String字母大小写的用法有四种:

str.upper()字符串中字母由小写变为大写

str.lower()字符串中字母由大写变为小写

str.capitalize()字符串中字母首字母大写其余小写

str.title()字符串中字母每个单词的首字母大写其余小写

举例说明:

a="hello"

b="WORLD"

c="hello"

d="hello world"

print(a.upper())

print(b.lower())

print(c.capitalize())

print(d.title())

output:

今天整理这些,明天继续!

欢迎关注!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180612G1TNYX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券