Perl+习题
- 格式:docx
- 大小:16.02 KB
- 文档页数:4
Python习题+参考答案一、单选题(共57题,每题1分,共57分)1.以下不是 Python 语言关键字的选项是( )A、returnB、defineC、defD、in正确答案:B2.实现以下哪个方法可以让对象像函数一样被调用 ( )A、next()B、str()C、call()D、iter()正确答案:C3.下列表达式的值为True的是( )A、1==1 and 2!=1B、3>2>2C、(2**=3)<(2*=3)D、not(1==1 and 0!=1)正确答案:A4.关于下面的代码,以下选项中描述正确的是( ) >>> list(range(0,10,2))A、按关键字参数调用B、按可变参数调用C、执行结果为0, 2, 4, 6, 8D、按位置参数调用正确答案:D5.下面代码的输出结果是( ) str1=“k:1|k1:2|k2:3|k3:4” str_list=str1.split(’|’) d= {} for l in str_list: key,value=l.split(’:’) d[key]=value print(d)A、[k:1,k1:2,k2:3,k3:4]B、{‘k’: ‘1’, ‘k1’: ‘2’, ‘k2’: ‘3’, ‘k3’: ‘4’}C、[‘k’:‘1’, ‘k1’:‘2’, ‘k2’:‘3’,‘k3’:‘4’]D、{k:1,k1:2,k2:3,k3:4}正确答案:B6.对于序列s,能够返回序列s中第i到j以k为步长的元素子序列的表达是( )A、s[i, j, k]B、s(i, j, k)C、s[i; j; k]D、s[i:j:k]正确答案:D7.以下选项中,输出结果为False的是( )A、>>> ‘python’ < ‘pypi’B、>>> ‘ABCD’ == ‘abcd’.upper()C、>>> ‘python123’ > ‘python’D、>>> ‘’<‘a’正确答案:A8.下面代码的输出结果是( )>>> bin(10)A、‘0o1010’B、‘0d1010’C、‘0b1010’D、‘0x1010’正确答案:C9.以下关于Python缩进的描述中,错误的是( )A、Python用严格的缩进表示程序的格式框架,所有代码都需要在行前至少加一个空格B、缩进是可以嵌套的,从而形成多层缩进C、缩进表达了所属关系和代码块的所属范围D、判断、循环、函数等都能够通过缩进包含一批代码正确答案:A10.字符串函数strip()的作用是( )A、替换字符串中特定字符"B、去掉字符串两侧空格或指定字符C、按照指定字符分割字符串为数组D、连接两个字符串序列正确答案:B11.以下程序的输出结果是( ) t = “Python” print(t if t >=“python” else “None”)A、pythonB、PythonC、NoneD、t正确答案:C12.关于列表数据结构,下面描述正确的是( )A、不支持 in 运算符B、必须按顺序插入元素C、可以不按顺序查找元素D、所有元素类型必须相同正确答案:C13.字典对象的______________方法返回字典的“值”列表A、values()B、keys()C、key()D、items()正确答案:A14.计算表达式 1234%1000//100 的值为A、3B、4C、1D、2正确答案:D15.下面代码的输出结果是( )for n in range(100,200): i = n // 100 j = n // 10 % 10k = n% 10if n == i ** 3 + j ** 3 + k ** 3:print(n)A、159B、153C、157D、152正确答案:B16.以下选项中,对程序的描述错误的是( )A、程序是由一系列函数组成的B、程序是由一系列代码组成的C、可以利用函数对程序进行模块化设计D、通过封装可以实现代码复用正确答案:A17."给出如下代码以下选项中描述正确的是( ) for i in range(6): print(chr(ord(9801)+i),end="")"A、chr (“a”)返回"a"字符对应的Unicode编码B、输出结果为C、ord(x)函数返回x的Unicode编码对应的字符D、系统报错正确答案:D18."以下程序的输出结果是: for i in range(3): for s in “abcd”: if s==“c”: break print (s,end="")"A、abababB、aaabbbC、abcabcabcD、aaabbbccc正确答案:A19.当需要在字符串中使用特殊字符时,Python使用( )作为转义字符的起始符号A、#B、\C、%D、/正确答案:B20.以下关于Python自带数据结构的运算结果中正确的是( )项?A、basket = [‘apple’, ‘banana’, ‘apple’, ‘orange’] ; fruit = set(basket); len (fruit) 的运算结果是4。
Python练习题+参考答案一、单选题(共57题,每题1分,共57分)1.关于Python的全局变量和局部变量,以下选项中描述错误的是( )A、简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放B、全局变量指在函数之外定义的变量,一般没有缩进,在程序执行全过程有效C、使用global保留字声明简单数据类型变量后,该变量作为全局变量使用D、局部变量指在函数内部使用的变量,当函数退出时,变量依然存在,下次函数调用可以继续使用正确答案:D2.以下关于循环结构的描述,错误的是:A、遍历循环对循环的次数是不确定的B、遍历循环的循环次数由遍历结构中的元素个数来体现C、非确定次数的循环用 while 语句来实现,确定次数的循环用 for 语句来实现D、非确定次数的循环的次数是根据条件判断来决定的正确答案:A3.以下不能创建一个字典的语句是( )A、dict = {(4,5,6):‘dictionary’}B、dict = {[4,5,6]:‘dictionary’}C、dict= {4:6}D、dict = {}正确答案:B4.下面哪一个不是Python语言的合法命名( )A、3monthlyB、monthlyC、monTHlyD、_Monthly3_正确答案:A5.以下选项中不是文件操作函数或方法的是( )A、readB、writelinesC、readlinesD、load正确答案:D6.以下关于Python循环结构的描述中,错误的是( )A、遍历循环中的遍历结构可以是字符串、文件、组合数据类型和range()函数B、continue只结束本次循环C、break用来结束当前次语句,但不跳出当前的循环体D、Python通过for、while等保留字构建循环结构正确答案:C7.在print函数的输出字符串中可以将( )作为参数,代表后面指定要输出的一个字符。
A、%dB、%tC、%cD、%s正确答案:C8.下列快捷键中能够中断(Interrupt Execution)Python程序运行的是( )A、F6B、Ctrl + QC、Ctrl + CD、Ctrl + F6正确答案:C9.字符串是一个字符序列,例如,字符串s,从右侧向左取第3个字符用( )索引?A、s[0:-3]B、s[-3]C、s[3]D、s[:-3]正确答案:B10."下面代码的输出结果是( ) for a in ‘mirror’: print(a, end="") if a == ‘r’: break"A、MirrorB、mirC、mirrorD、mi正确答案:B11.字符串是一个连续的字符序列,用( )方式打印出可以换行的字符串。
Perl 第一阶段学习总结1 use strict 和use warnings 的作用?use strict 什么场合要用use strict?当你的程序有一定的行数时,尤其是在一页放不下时,或者是你找不到发生错误的原因时。
为什么要用 use strict?众多的原因之一是帮你寻找因为错误拼写造成的错误。
比如错误使用了'$recieve_date' 变量,但实际上你在程序中已声明的是 '$receive_date' 变量,这个错误就很难发现。
同样,use strict 迫使你把变量的范围缩到最小,使你不必担心同名变量在程序的其它部份发生不良作用。
(尽管这是 my 的功能,但是如果你使用 use strict 的话,它会强迫你用 my 声明变量,来达到上述目的)。
指定了use warnings;的话perl在编译的时候会将警告信息打印出来,否则不打印。
2 perl注释的方法?(1)‘#’用于注释单行(2) 注释一段=cut; #注释=cut 包围的代码………=cut;Or<<TXT; #注释<<TXT…TXT包围的代码………TXTOr__END__ #注释此行之后的所有代码………Or__DATA__ #可将__DATA__之后的代码作为程序的参数列表………3 单引号和双引号的区别?单引号不能内插且只能转义’\’,’’’两个字符。
双引号可以内插和转义所有字符。
4 print @array;print “@array”;print @array . “\n”有什么区别?Eg:my @array = qw/a b c/;Print @array; # abcPrint “@array” # a b c “内插时,会在数组各个元素之间自# 动添加分隔用的空格(小骆驼书原话)”Print @array . “\n” # 3 ‘.’是标量操作符,所以@array是#标量上下文。
2.12 练习写一个程序,计算半径为12.5的圆的周长。
圆周长等于2π(π约为3.1415926)乘以半径。
答案为78.5。
#!/usr/bin/perl$r=12.5;$pai=3.1415926 ;$C=2*$pai*$r;Print “$C\n”;修改上述程序,用户可以在程序运行时输入半径。
如果,用户输入12.5,则应得到和上题一样的结果。
#!/usr/bin/perl$r=<STDIN>;$pai=3.1415926 ;$C=2*$pai*$r;Print “$C\n”;修改上述程序,当用户输入小于0 的数字时,程序输出的周长为0,而非负数。
#!/usr/bin/perl$r=<STDIN>;$pai=3.1415926 ;if($r>=0){$C=2*$pai*$r;}If($r<0){$C=0;}Print “$C\n”;写一个程序,用户能输入2 个数字(不在同一行)。
输出为这两个数的积。
#!/usr/bim/perl$a=<STDIN>;$b=<STDIN>;$c=$a*$b;Print”$c”;写一个程序,用户能输入1 个字符串和一个数字(n)(不在同一行)。
输出为,n 行这个字符串,1 次1 行(提示,使用“x”操作符)。
例如,如果用户输入的是“fred”和“3”,则输出为:3 行,每一行均为fred。
如果输入为“fred”和“299792”,则输出为299792 行,每一行均为fred。
#!/usr.bin/perl$string=<STDIN>;$int=<STDIN>;$output=$string x $intprint $output;3.9练习写一个程序,将一些字符串(不同的行)读入一个列表中,逆向输出它。
如果是从键盘输入的,那在Unix 系统中应当使用CTRL+D 表明end-of-file,在Windows 系统中使用CTRL+Z.写一个程序,读入一串数字(一个数字一行),将和这些数字对应的人名(下面列出的)输出来。
perl 正则表达式例题当然可以!以下是一些使用 Perl 正则表达式的例题:1. 匹配数字:```perl$string = "我有100个苹果和20个香蕉";if ($string =~ /(\d+)/) {print "匹配到的数字是: $1\n";}```输出:```匹配到的数字是: 100```2. 匹配邮箱地址:```perl$email = "";if ($email =~ /([a-zA-Z0-9_-]+[a-zA-Z0-9_-]+\.[a-zA-Z]{2,})/) { print "匹配到的邮箱地址是: $1\n";}```输出:```匹配到的邮箱地址是:```3. 匹配日期格式:YYYY-MM-DD```perl$date = "今天是";if ($date =~ /(\d{4})-(\d{2})-(\d{2})/) {print "匹配到的年份是: $1, 月份是: $2, 日期是: $3\n";}输出:```yaml匹配到的年份是: 2023, 月份是: 07, 日期是: 19```4. 替换字符串中的内容:```perl$text = "我喜欢吃苹果和香蕉";$new_text = $text =~ s/苹果/桃子/;print $new_text; 输出: 我喜欢吃桃子和香蕉```这些例题可以帮助你理解 Perl 正则表达式的使用方法和功能。
当然,Perl 正则表达式还有更多高级的用法和技巧,你可以查阅相关资料或参考 Perl 的官方文档来深入学习。
PERL复习题(答案不是标准答案,仅供参考)一、选择题1. What is the simplest type of data that Perl can work with?A elementB scalarC vectorD component2. Which operator can be used to take the bottom item from an array?A popB pushC pullD plant3. Which operator is used to arrange items in character order?A ascendB sortC arrangeD descend4. Rather than using print, what is often used in Perl when formatting is important?A printfB formatC alignD show5. Which modifier can be used when matching in Perl to ignore case?A sB vC iD c6. Which operator can be used to break up a string into more than one part based upon a separator?A chopB splitC divideD parse7. What option do you use when starting Perl to tell it to run in warning mode? _-w \ use warnings (Fill in the blank.)8. Which control structure can be used to execute only a condition is false?A untilB unlessC whileD without9. Which of the following commands should be used to open a filehandle named KAREN to an existing file named sw?A open KAREN “>sw”;B open KAREN, “>sw”;C open “sw” KAREN;D open “>sw”, KAREN;10. Within Perl, which operator is used to change the working directory?A cdB chdirC pwdD wd11. Which operator can be used to access the first item in an array?A shiftB startC right$D left$12. Within a loop, which operator immediately ends execution of the loop?A nextB lastC redoD leave13. Which function can be used to make sure your program exits with a nonzero status even if there a standard error?A hashB noexitC nozeroD die14. Which of the following operators work most like simple searching/pattern matching?A /fB /gC s///D m//15. Which keyword is used in Perl to define a subroutine?A branchB subC splitD make16. You want to close the directory handle EV AN. Which of the following should you use to accomplish this?A close EV AN;B closedir EV AN;C close_directory EV AN;D none of the above17. Which of the following lines of code accomplishes the same thing as $price = $price + 9;?A $price +9;B $price =+9;C $price +=9;D 9 + $price18. What value do variables have before they are first assigned?A undefB nullC 0D nil19. Which Perl function can be used to launch a child process to run a program?A splitB spinC forkD system20. Which Perl function can be used to identify the first found occurrence of a substring?A findB indexC locateD allocate21. Which control structure can be used to loop as long as a conditional expression returns true?A untilB unlessC whileD without22. Which operator can be used to create private variables within a subroutine?A nativeB limitedC myD regional23. Which of the following operators is used to return a value in a subroutine?A returnB sendC giveD show24. Your script has just read in a variable from the keyboard and you want to strip that variable of the newline character that came in. What operator should you use to perform this operation?A tidyB trimC chompD slim25. What is the default sort order in Perl?A alphabeticB numericC ASCIID none of the above26. Within a loop, which operator jumps to the end of the loop but does not exit the loop?A nextB lastC redoD leave27. (不确定)Which of the following should be used to print values in an array that do not contain newlines and add them to the end of each entry?A print @array;B print @array\n;C print “@array\n”;D print “$@array \\”;28. Which string comparison operator would be equivalent to the numeric > operator?A neB eqC geD gt29. Which function can be thought of as the opposite of split?A linkB joinC uniteD bond30. Which operator can be used to add an item to the bottom of an array?A popB pushC pullD plant31. Which of the following mathematical operations has the highest precedence in Perl?A **B ++C +D -32. 以下哪一个字符串直接量的定义方式是错误的()(1)'thank you'(2)" "(3)"a "friend" of yours"(4)"a \"friend\" of yours"33. 以下哪一条语句是错误的()(1)$_= 'hello world';(2)$a='hello world';(3)my $b,$a='hello world';(4)my ($a,$b)=(0,'hello world');34. 要使下面的程序正常运行,while后的表达式应选()。
Perl语言入门实战习题[试题] 《Perl语言入门实战习题》一、计算FASTA文件中每条序列的长度; 输入文件,FASTA格式:注:如果输入文件在windows下产生,在Linux系统下操作时,宜先用dos2unix处理:用法:dos2unix 输入文件输出文件:Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) { # @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.len>\n"; # 当命令行参数不是2的时候输出使用说明 }my ($infile,$outfile) = @ARGV; # 把命令行参数赋值给输入文件和输出文件 open IN,$infile || die"error: can't open infile: $infile"; # 打开输入文件句柄IN open OUT,">$outfile" || die$!; # 打开输出文件句柄OUT $/=">";<IN>; # 设置输入记录分隔符为”>”,并去除第一个”>”while ( my $seq = <IN>){ # 把序列ID行和序列赋值给$seqmy $id = $1 if($seq =~ /^(\S+)/); # 获取序列IDchomp $seq; # 去掉末尾的”>”$seq =~ s/^.+?\n//; # 删除第一行$seq =~ s/\s//g; # 删除序列中的空白字符my $len = length($seq); # 计算序列长度print OUT "$id\t$len\n"; # 输出结果到输出文件}$/="\n"; # 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT; # 关闭输出文件句柄二、计算FASTA文件中每条序列的GC含量; 输入文件同上,输出文件:Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.gc>\n";# 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄IN open OUT,">$outfile" || die$!;# 打开输出文件句柄OUT$/=">";<IN>;# 设置输入记录分隔符为”>”,并去除第一个”>” while(<IN>){# $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写my $id = $1 if(/^(\S+)/);# 获取序列IDchomp; # 去掉末尾的”>”s/^.+?\n//;# 删除第一行s/\s//g; # 删除序列中的空白字符my $GC = (tr/GC/GC/);#计算G或C碱基个数my $AT = (tr/AT/AT/);#计算A或T碱基个数my $len = $GC + $AT;# 计算序列非N长度my $gc_cont = $len ? $GC / $len : 0; #计算GC含量,如果长度为0,GC含量算0print OUT "$id\t$gc_cont\n"; # 输出结果到输出文件 }$/="\n";# 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT;# 关闭输出文件句柄三、求反相互补序列;输入文件同上,输出文件也是FASTA格式 Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.gc>\n";# 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄IN open OUT,">$outfile" || die$!;# 打开输出文件句柄OUT $/=">";<IN>;# 设置输入记录分隔符为”>”,并去除第一个”>” while (<IN>){# $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写my $id = $1 if(/^(\S+)/);# 获取序列IDchomp; # 去掉末尾的”>”s/^.+?\n//;# 删除第一行s/\s//g; # 删除序列中的空白字符$_ = reverse $_; # 序列方向tr/ATCG/TAGC/; # 序列互补print OUT ">$id\n",$_,"\n"; # 输出结果到输出文件}$/="\n";# 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT;# 关闭输出文件句柄四、列表信息整合;输入列表1:序列长度文件输入文件2:序列测序覆盖深度文件输出文件:把上述两个列表的信息整合成一个列表,并且最后一行给出汇总结果:Perl代码#!/usr/bin/perl -wuse strict;(@ARGV==3) || die"Usage: perl $0 <list1> <list2> <combine.list>\n"; # 当命令行参数不是3的时候输出使用说明my ($infile1,$infile2,$outfile) = @ARGV;# 把命令行参数赋值给输入文件1、输入文件2和输出文件 my %id_len; # 定义一个哈希open IN1,$infile1 || die$!; # 打开第一个文件句柄while(<IN1>){my ($id,$len) = split /\s+/,$_; # split函数用空白符号切割每一行的内容$id_len{$id} = $len; # 哈希赋值:id => length}close IN1; # 关闭第一个文件句柄open IN2,$infile2 || die$!; # 打开第2个文件句柄open OUT,">$outfile" || die$!; # 打开输出文件句柄my $tol_len = 0; # 定义总长度变量,并赋值为0my $tol_depth = 0; # 定义总深度变量,并赋值为0while (<IN2>){my ($id,$depth) = split; # split函数用空白符号切割每一行的内容my $len = $id_len{$id}; # 序列长度print OUT join("\t",$id,$len,$depth),"\n"; # 输出整合信息到输出文件$tol_len += $len; # 长度累加$tol_depth += $len * $depth; # 深度累加}$tol_depth /= $tol_len; # 计算总体平均深度print OUT "Total\t$tol_len\t$tol_depth\n"; # 输出汇总结果到输出文件close IN2; # 关闭第二个输入文件句柄close OUT; # 关闭输出文件句柄五、串流程;Perl在工作中常用于串流程,现有同事写了3个perl脚本分三步将输入文件,infile.txt处理成最终的final.result:第1步:perl step1.pl infile.txt output1 第2步:perl step2.pl infile.txt output2 第3步:perl step3.pl output1 output2 final.result为提高工作效率,现需要写一个脚本使用infile.txt 作为输入文件,直接得到final.result,中间产生的文件结果不保留。
Perl语言入门(第四版)习题答案————————————————————————————————作者:————————————————————————————————日期:《Perl语言入门习题答案》2.12 练习1、写一个程序,计算半径为12.5的圆的周长。
圆周长等于2π(π约为3.1415926)乘以半径。
答案为78.5。
-----------------------/home/confish/perl/girth#!/usr/bin/perl -w#this program calculate a circle's girth#confish@ubuntu7.10$r=12.5;$g=12.5*2*3.1415;print "the girth of the circle is $g\n";-----------------------/home/confish/perl/girth2、修改上述程序,用户可以在程序运行时输入半径。
如果,用户输入12.5,则应得到和上题一样的结果。
-----------------------/home/confish/perl/girthpro#!/usr/bin/perl -w#a better one to calculate girth#confish@ubuntu7.10print"enter the radius of the circle\n";chomp($r=<STDIN>);if($r>0){print"the girth of the circle is ".$r*2*3.1415."\n";}else{print"nonavailable!\n";}-----------------------/home/confish/perl/girthpro3、修改上述程序,当用户输入小于0 的数字时,程序输出的周长为0,而非负数。
#题2:#使用for循环打印出如下的字符。
# 1# 12# 123# 12345#*******************#Fw_Print_Step ($step++,"使用for循环打印出如下的字符。
11212312345");my $str= "";for (1..4) {$str= $str.$_;if ($_==4) {$str= $str.$_+1;}print " $str\n";}#*******************##题3:my $str1 = "abc";my $str2 = "efg";#将上述2个字符串连接起来,并输出合并后的字符串长度#*******************#Fw_Print_Step ($step++,"将上述2个字符串\"$str1\"和\"$str2\"连接起来,并输出合并后的字符串长度");my $str =$str1.$str2;my $str_length=length($str);print "新字串$str的长度为:$str_length";#*******************##题4:#以逆序方式打印出字符串包含的各个字符,如变量为"123456789"则输出为"9","8",..."2","1". my $str1="abc123def456";#*******************#Fw_Print_Step ($step++,"以逆序方式打印出字符串包含的各个字符,如变量为\"123456789\"则输出为\"9\",\"8\",...\"2\",\"1\".");my $str=$str1;print "以逆序方式打印出字符串\"$str1\"包含的各个字符:\n";for($length=length($str1); $length>0; $length--) {$sub_str=chop($str);if ($length>1) {print "\"$sub_str\",";} else {print "\"$sub_str\".";}}#*******************##题5:#分别使用for与while循环来计算1+2+3+...+100的值#*******************#Fw_Print_Step ($step++,"分别使用for与while循环来计算1+2+3+...+100的值"); print "用for循环计算1+2+3+...+100的值:\n ";my $result=0;for (1..100) {$result=$result+$_;}print "1+2+3+...+100=$result";print "\n用while循环计算1+2+3+...+100的值:\n ";my $result=0;my $num=1;while ($num<=100) {$result=$result+$num;$num++;}print "1+2+3+...+100=$result";#*******************##题6:#以逆序的方式打印出端口列表包含的成员口my @cmdArray = ("config", "int fa 0/1", "no shutdonw", "end");#*******************#Fw_Print_Step ($step++,"以逆序的方式打印出端口列表包含的成员口");for (my $start=$#cmdArray; $start>=0; $start--) {my $array=$cmdArray[$start];print "$array\n";}#*******************##题7:#使用foreach打印出Hash表的所有下标与值my %map = ('red', 0xff0000,'green', 0x00ff00,'blue',0x0000ff);#*******************#Fw_Print_Step ($step++,"使用foreach打印出Hash表的所有下标与值");foreach $capword (sort keys(%map)) {print ("$capword: $map{$capword}\n");}#while( ($key, $value) = Each (%Map)) {# Print "\N$key=$value;"}#*******************##题8:#使用正则匹配判断字符串是否包含error,若是打印提示信息。
Perl语言面试题1.问题:什么是Perl?答案:Perl是一种解释型、功能丰富的编程语言,它具有动态的特性,能够处理文本和数据,非常适合用于文本处理、系统管理、网络编程、数据库操作等任务。
2.问题:Perl的基本语法是什么?答案:Perl的基本语法包括变量声明、控制结构(如if、while等)、循环结构(如for、foreach等)、函数定义和调用等。
3.问题:在Perl中如何声明变量?答案:在Perl中,可以使用$符号来声明变量,例如$var = 10;。
4.问题:在Perl中如何进行字符串操作?答案:Perl提供了丰富的字符串操作函数,如substr、index、length、tr 等,可以进行字符串的切割、查找、替换等操作。
5.问题:在Perl中如何进行数组操作?答案:Perl支持数组操作,可以使用@符号来声明数组,并使用push、pop、shift、unshift等函数进行数组的添加、删除、移除等操作。
6.问题:在Perl中如何进行文件操作?答案:Perl提供了丰富的文件操作函数,如open、readline、readlines 等,可以进行文件的打开、读取、写入等操作。
7.问题:在Perl中如何进行正则表达式匹配?答案:Perl支持正则表达式匹配,可以使用正则表达式函数如qr()和m()来进行模式匹配和替换操作。
8.问题:在Perl中如何使用循环结构?答案:Perl支持多种循环结构,如for、foreach、while等,可以根据需要选择合适的循环结构进行迭代操作。
9.问题:在Perl中如何定义和使用函数?答案:在Perl中,可以使用sub关键字定义函数,并使用&符号调用函数。
函数可以接受参数并返回值。
10.问题:请举一个使用Perl进行文本处理的例子?答案:例如,使用Perl提取一个文本文件中的特定行,可以根据行号或关键字进行提取。
具体实现可以使用open函数打开文件,并使用readline或readlines函数逐行读取文件内容,根据条件筛选出需要的行。
Perl 习题(11)1 写一个程序,将一些字符串(不同的行)读入一个列表中,逆向输出它。
如果是从键盘输入的,那在Unix 系统中应当使用CTRL+D 表明end-of-file,在Windows 系统中使用CTRL+Z.(第3章习题)unless(@ARGV) {die "<input file> <output file>\n";}open(IN,"<$ARGV[0]") or die;my @line=<IN>;open(OUT,">$ARGV[1]") or die;foreach(reverse(@line)) {print OUT "$_";}2 写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字(提示:另外写一个子程序来计算平均值,总和除以数字的个数)。
利用下面的程序进行测试:(第4章习题)my @fred = &above_average(1..10);print "\@fred is @fred\n";print "(Should be 6 7 8 9 10)\n";my @barney = &above_average(100, 1..10);print "\@barney is @barney\n";print "(Should be just 100)\n";#!\usr\bin\perl -wuse strict;my @fred = &above_average(1..10);print "\@fred is @fred\n";print "(Should be 6 7 8 9 10)\n";my @barney = &above_average(100, 1..10);print "\@barney is @barney\n";print "(Should be just 100)\n";sub above_average{my @in=@_;my $average_value=&average(@in);my @out;foreach(@in) {if($_>$average_value){push @out,$_;}}return @out;}sub average {my @in=@_;my $sum=0;foreach(@in){$sum+=$_;}return $sum;}3 写一个程序,要求用户在不同的行中输入一些字符串,将此字符串打印出来,规则是:每一条占20 个字符宽度,右对齐。
Perl语言入门实战习题[试题] 《Perl语言入门实战习题》一、计算FASTA文件中每条序列的长度; 输入文件,FASTA格式:注:如果输入文件在windows下产生,在Linux系统下操作时,宜先用dos2unix处理:用法:dos2unix 输入文件输出文件:Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) { # @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.len>\n"; # 当命令行参数不是2的时候输出使用说明 }my ($infile,$outfile) = @ARGV; # 把命令行参数赋值给输入文件和输出文件 open IN,$infile || die"error: can't open infile: $infile"; # 打开输入文件句柄IN open OUT,">$outfile" || die$!; # 打开输出文件句柄OUT $/=">";<IN>; # 设置输入记录分隔符为”>”,并去除第一个”>”while ( my $seq = <IN>){ # 把序列ID行和序列赋值给$seqmy $id = $1 if($seq =~ /^(\S+)/); # 获取序列IDchomp $seq; # 去掉末尾的”>”$seq =~ s/^.+?\n//; # 删除第一行$seq =~ s/\s//g; # 删除序列中的空白字符my $len = length($seq); # 计算序列长度print OUT "$id\t$len\n"; # 输出结果到输出文件}$/="\n"; # 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT; # 关闭输出文件句柄二、计算FASTA文件中每条序列的GC含量; 输入文件同上,输出文件:Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.gc>\n";# 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄IN open OUT,">$outfile" || die$!;# 打开输出文件句柄OUT$/=">";<IN>;# 设置输入记录分隔符为”>”,并去除第一个”>” while(<IN>){# $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写my $id = $1 if(/^(\S+)/);# 获取序列IDchomp; # 去掉末尾的”>”s/^.+?\n//;# 删除第一行s/\s//g; # 删除序列中的空白字符my $GC = (tr/GC/GC/);#计算G或C碱基个数my $AT = (tr/AT/AT/);#计算A或T碱基个数my $len = $GC + $AT;# 计算序列非N长度my $gc_cont = $len ? $GC / $len : 0; #计算GC含量,如果长度为0,GC含量算0print OUT "$id\t$gc_cont\n"; # 输出结果到输出文件 }$/="\n";# 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT;# 关闭输出文件句柄三、求反相互补序列;输入文件同上,输出文件也是FASTA格式 Perl代码:#!/usr/bin/perl -wuse strict;unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表die"Usage: perl $0 <input.fa> <out.gc>\n";# 当命令行参数不是2的时候输出使用说明}my ($infile,$outfile) = @ARGV;# 把命令行参数赋值给输入文件和输出文件open IN,$infile || die"error: can't open infile: $infile";# 打开输入文件句柄IN open OUT,">$outfile" || die$!;# 打开输出文件句柄OUT $/=">";<IN>;# 设置输入记录分隔符为”>”,并去除第一个”>” while (<IN>){# $_=<IN>,把序列ID行和序列赋值给$_,$_= 可以省略不写my $id = $1 if(/^(\S+)/);# 获取序列IDchomp; # 去掉末尾的”>”s/^.+?\n//;# 删除第一行s/\s//g; # 删除序列中的空白字符$_ = reverse $_; # 序列方向tr/ATCG/TAGC/; # 序列互补print OUT ">$id\n",$_,"\n"; # 输出结果到输出文件}$/="\n";# 把输入记录分隔符改为默认值close IN; # 关闭输入文件句柄close OUT;# 关闭输出文件句柄四、列表信息整合;输入列表1:序列长度文件输入文件2:序列测序覆盖深度文件输出文件:把上述两个列表的信息整合成一个列表,并且最后一行给出汇总结果:Perl代码#!/usr/bin/perl -wuse strict;(@ARGV==3) || die"Usage: perl $0 <list1> <list2> <combine.list>\n"; # 当命令行参数不是3的时候输出使用说明my ($infile1,$infile2,$outfile) = @ARGV;# 把命令行参数赋值给输入文件1、输入文件2和输出文件 my %id_len; # 定义一个哈希open IN1,$infile1 || die$!; # 打开第一个文件句柄while(<IN1>){my ($id,$len) = split /\s+/,$_; # split函数用空白符号切割每一行的内容$id_len{$id} = $len; # 哈希赋值:id => length}close IN1; # 关闭第一个文件句柄open IN2,$infile2 || die$!; # 打开第2个文件句柄open OUT,">$outfile" || die$!; # 打开输出文件句柄my $tol_len = 0; # 定义总长度变量,并赋值为0my $tol_depth = 0; # 定义总深度变量,并赋值为0while (<IN2>){my ($id,$depth) = split; # split函数用空白符号切割每一行的内容my $len = $id_len{$id}; # 序列长度print OUT join("\t",$id,$len,$depth),"\n"; # 输出整合信息到输出文件$tol_len += $len; # 长度累加$tol_depth += $len * $depth; # 深度累加}$tol_depth /= $tol_len; # 计算总体平均深度print OUT "Total\t$tol_len\t$tol_depth\n"; # 输出汇总结果到输出文件close IN2; # 关闭第二个输入文件句柄close OUT; # 关闭输出文件句柄五、串流程;Perl在工作中常用于串流程,现有同事写了3个perl脚本分三步将输入文件,infile.txt处理成最终的final.result:第1步:perl step1.pl infile.txt output1 第2步:perl step2.pl infile.txt output2 第3步:perl step3.pl output1 output2 final.result为提高工作效率,现需要写一个脚本使用infile.txt 作为输入文件,直接得到final.result,中间产生的文件结果不保留。
字符串例题
以下是一些与字符串相关字符串例题:
1.编写一个函数,将字符串中的所有字母转换为大写。
2.编写一个函数,将字符串中的所有字母转换为小写。
3.编写一个函数,判断字符串是否为回文字符串。
4.编写一个函数,将字符串中的所有单词首字母转换为大写。
5.编写一个函数,将字符串中的所有单词逆序排列。
6.编写一个函数,将字符串中的所有单词反转。
7.编写一个函数,统计字符串中出现的字符频率。
8.编写一个函数,统计字符串中出现的单词频率。
9.编写一个函数,将字符串中的所有连续重复字符替换为单个字符。
10.编写一个函数,将字符串中的所有连续空格替换为单个空格。
请注意,这些练习题只是示例,实际上还有很多其他的字符串相关的问题可以进行练习和探索。
syntax练习题答案一、选择题1. 在Python中,以下哪个是正确的条件语句的语法?A. if x = 5B. if x == 5C. if x = 5 thenD. if x is 5答案:B2. 下列哪个是Python中的循环结构?A. for x in range(5)B. while x < 5C. do while x < 5D. both A and B答案:D3. 在Python中,以下哪个是正确的函数定义?A. def my_function()B. function my_function()C. def my_functionD. my_function()答案:A4. 在Python中,以下哪个是正确的列表推导式?A. [x for x in range(10)]B. for x in range(10)C. x for x in range(10)D. list(x for x in range(10))答案:A5. 在Python中,以下哪个是正确的字典推导式?A. {x: x2 for x in range(5)}B. {x: x2 in range(5)}C. dict(x: x2 for x in range(5))D. x: x2 for x in range(5)答案:A二、填空题1. 在Python中,使用______关键字定义一个类。
答案:class2. 在Python中,使用______关键字可以调用一个方法。
答案:self3. 在Python中,______运算符用于成员资格测试。
答案:in4. Python中的______语句用于异常处理。
答案:try-except5. 在Python中,______关键字用于定义装饰器。
答案:@(at符号)三、简答题1. 请解释Python中的列表推导式和生成器表达式的区别。
答案:列表推导式用于创建列表,而生成器表达式用于创建一个生成器。
2.12 练习写一个程序,计算半径为12.5的圆的周长。
圆周长等于2n (n约为3.1415926)乘以半径。
答案为78.5。
#!/usr/bin/perl$r=12.5; $pai=3.1415926 ;$C=2*$pai*$r;Print “$C\n”;修改上述程序,用户可以在程序运行时输入半径。
如果,用户输入12.5,则应得到和上题一样的结果。
#!/usr/bin/perl$r=<STDIN>;$pai=3.1415926 ;$C=2*$pai*$r;Print “$C\n”;修改上述程序,当用户输入小于0 的数字时,程序输出的周长为0,而非负数#!/usr/bin/perl$r=<STDIN>;$pai=3.1415926 ;if($r>=0){$C=2*$pai*$r;}If($r<0){$C=0;}Print “$C\n”;写一个程序,用户能输入2 个数字(不在同一行) 。
输出为这两个数的积。
#!/usr/bim/perl $a=<STDIN>;$b=<STDIN>;$c=$a*$b;Print”$c”;写一个程序,用户能输入1个字符串和一个数字(n)(不在同一行)。
输出为,n行这个字符串,1次1行(提示,使用“ x”操作符)。
例如,如果用户输入的是“fred”和“3”,则输出为:3 行,每一行均为fred。
如果输入为“fred”和“299792', 则输出为299792 行,每一行均为fred。
#!/usr.bin/perl$string=<STDIN>;$int=<STDIN>; $output=$string x $int print $output;3.9 练习写一个程序,将一些字符串(不同的行)读入一个列表中,逆向输出它。
如果是从键盘输入的,那在Unix系统中应当使用CTRL+D 表明end-of-file ,在Win dows 系统中使用CTRL+Z.写一个程序,读入一串数字(一个数字一行),将和这些数字对应的人名(下面列出的)输出来。
编程前缀后缀练习题一、前缀表达式(逆波兰表达式)计算二、后缀表达式(逆波兰表达式)计算三、前缀表达式转换为中缀表达式1. 将前缀表达式 + 3 4 + 2 1 转换为中缀表达式。
2. 将前缀表达式 / 20 5 6 2 转换为中缀表达式。
3. 将前缀表达式 + 9 5 4 2 转换为中缀表达式。
4. 将前缀表达式 + 3 2 7 4 转换为中缀表达式。
5. 将前缀表达式 / + 10 5 8 3 转换为中缀表达式。
四、后缀表达式转换为中缀表达式1. 将后缀表达式 3 4 2 1 + 转换为中缀表达式。
2. 将后缀表达式 20 5 / 6 2 转换为中缀表达式。
3. 将后缀表达式 9 5 4 2 转换为中缀表达式。
4. 将后缀表达式 3 2 + 7 4 转换为中缀表达式。
5. 将后缀表达式 10 5 + 8 3 转换为中缀表达式。
五、中缀表达式转换为前缀表达式1. 将中缀表达式 (3 + 4) (2 + 1) 转换为前缀表达式。
2. 将中缀表达式 20 / (5 6) 2 转换为前缀表达式。
3. 将中缀表达式 9 5 + 4 2 转换为前缀表达式。
4. 将中缀表达式 3 + 2 (7 4) 转换为前缀表达式。
5. 将中缀表达式 (10 + 5) / (8 3) 转换为前缀表达式。
六、中缀表达式转换为后缀表达式1. 将中缀表达式 (3 + 4) (2 + 1) 转换为后缀表达式。
2. 将中缀表达式 20 / (5 6) 2 转换为后缀表达式。
3. 将中缀表达式 9 5 + 4 2 转换为后缀表达式。
4. 将中缀表达式 3 + 2 (7 4) 转换为后缀表达式。
5. 将中缀表达式 (10 + 5) / (8 3) 转换为后缀表达式。
七、前缀表达式与后缀表达式的相互转换1. 将前缀表达式 + 3 4 2 1 转换为后缀表达式。
2. 将前缀表达式 / 25 5 3 2 转换为后缀表达式。
3. 将前缀表达式 + 7 2 4 3 转换为后缀表达式。
P语法练习题P语法练习题是一种广泛应用于编程教育领域的培训教材,通过练习学习者在编写P语言程序时需要掌握的各种语法规则。
本文将通过一系列P语法练习题的例子,介绍P语言的基本语法规则和使用方法。
一、变量定义与赋值1. 声明一个整型变量x,并将其初始化为5。
解答:int x = 5;2. 声明一个浮点型变量y,并将其初始化为3.14。
解答:float y = 3.14;3. 声明一个字符型变量c,并将其赋值为'A'。
解答:char c = 'A';二、基本运算1. 定义两个整型变量a和b,将它们相加后的结果赋值给变量c。
解答:int a, b, c;c = a + b;2. 定义一个整型变量num,将num的值自增1。
解答:int num;num++;三、条件语句1. 编写一个条件语句,判断变量x的值是否大于10,如果是,则输出"大于10",否则输出"小于等于10"。
解答:if (x > 10) {print("大于10");} else {print("小于等于10");}2. 编写一个条件语句,判断变量score的值,如果大于等于90,则输出"优秀",如果大于等于80,则输出"良好",如果大于等于60,则输出"及格",否则输出"不及格"。
解答:if (score >= 90) {print("优秀");} else if (score >= 80) {print("良好");} else if (score >= 60) {print("及格");} else {print("不及格");}四、循环语句1. 编写一个循环语句,输出1到10之间的所有偶数。
一、标题: [范文][Perl的世界]Perl CGI 程式写作常问问题集发信站: BBS 水木清华站 (Sat Mar 11 14:09:25 2000)中文版 Perl CGI 程式写作常问问题集 (Perl CGI Programming FAQ)=============================================================版本: 1.0原文作者:Shishir Gundavaram <shishir@>Tom Christiansen <tchrist@>中译、补充:萧百龄 <hsiao@>版权事宜:(复制、转载者务必遵守)This document, and all its parts, are Copyright (c) 1996, Shishir Gundavaram and Tom Christiansen. All rightsreservered. Permisson to distribute this collection, in part or full, via electronic means (emailed, posted or archived) or printed copy are granted providing that no charges are involved, reasonable attempt is made to use the most current version, and all credits and copyright notices are retained.Requests for other distribution rights, including incorporation in commercial products, such as books,magazine articles, or CD-ROMs should be made to either of the authors.本文件著作权属於 Shishir Gundavaram 及 Tom Christiansen 所有,Copyright (C) 1996。
Perl 习题(11)
1 写一个程序,将一些字符串(不同的行)读入一个列表中,逆向输出它。
如果是从键盘输入的,那在Unix 系统中应当使用CTRL+D 表明
end-of-file,在Windows 系统中使用CTRL+Z.(第3章习题)
2 写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字(提示:另外写一个子程序来计算平均值,总和除以数字的个数)。
利用下面的程序进行测试:(第4章习题)
my @fred = &above_average(1..10);
print "\@fred is @fred\n";
print "(Should be 6 7 8 9 10)\n";
my @barney = &above_average(100, 1..10);
print "\@barney is @barney\n";
print "(Should be just 100)\n";
3 写一个程序,要求用户在不同的行中输入一些字符串,将此字符串打印出来,规则是:每一条占20 个字符宽度,右对齐。
为了确保正确的输出,在开头打印出一串数字作为比较(帮助调试)。
注意,不要犯19 个字符宽度的错误。
例如,如果输入,hello, good-bye,则输出为:
123456789012345678901234567890123456789012345678901234567890
hello
good-bye
(第5章习题)
修改上一个程序,允许用户选择宽度,如,用户输入30,hello,
good-bye(在不同的行中),则每一行的宽度为30。
(提示:参阅第二章相应部分)。
提示,如果选择的宽度太长,可以增加比较行的长度。
4 写一个程序,读入一串单词(一个单词一行)◆,输出每一个单词出现的次数。
(提示:如果某个作为数字使用值是undefined 的,会自动将它转换为0。
)如果输入单词为fred, barney, dino, wilma, fred(在不同行中),则输出的fred 将为2。
作为额外的练习,可以将输出的单词按照ASCII 排序。
(第6章习题)
5 使用模式测试程序,创造一个模式能匹配任何单词(\w 意义下的单词),但这个单词必需以字母a 结尾。
它匹配wilma而没匹配barney 吗?它匹配Mrs. Wilma Flintstone 吗? wilma&fred 呢?使用前一章习题的文件进行练习(如果没有上述字符串,则加上它们)(第8章习题)
修改上述程序,使之将由a 结尾的单词放到$1 之中。
同时修改源代码,使此变量对应的值被放在单引号之中,如$1 contains …Wilma‟。
6 写一个程序,它可以得到当前文本文件的一个拷贝。
在拷贝的文件中,字符串Fred(大小写无关)将被Larry 替换掉。
(因此,“Manfred Mann”将变成“ManLarry Mann”.)输入的文件名已经在命令行中指定(不需要询问用户),输出的文件名是对应的输入文件名后面加上.out。
(第9章习题)
修改上面程序,使之将Fred 由Wilma 替换,Wilma 由Fred 替换。
如果输入的为fred&wilma,则输出为Wilma$Fred。
7 写一个程序,能重复要求用户猜测某个在1 到100 之间的数字,直到猜对为止。
你的程序应当能随机的产生一个数字,使用公式int(1 + rand 100)。
当用户猜测错误时,程序应该回应“Too high”或者“Too low”。
如果用户输入quit或exit,或者回车时,程序应立即退出。
如果用户猜测正确,程序也退出。
(第10章习题)
8 写一个程序,找出命令行中存在时间最长的文件名,并报告其天数。
当参数为空时,其行为如何(例如,命令行中没有输入任何的文件)?(第11 章习题)
9 如果你的操作系统支持,写一个程序来查找当前目录下的符号连接(symbolic links),并将它们的值打印出来(如ls–l 一样:name -> value)。
(第12章习题)
10 写一个程序,从文件中读入字符串,一行一个字符串,然后让用户输入模式,这个模式可能匹配上某些字符串。
对于每一个模式,程序将指出文件中有多少个字符串(多少行)匹配上了,并指出是哪些。
对于新的模式不需要重新读文件,将这些字符串保留在内存中。
文件名可以直接写在程序之中。
如果模式无效(例如,圆括号不匹配),则程序报告这个错误,并让用户继续尝试新的模式。
当用户输入一个空行,则程序退出。
(第16 章习题)
11 将blast程序原始输出转换成列表格式,16列数据分别是
先将下面两个序列集进行blast比对,选取的参数:
-p blastn
-i
-d
-o
-F F
-e 1e-10
然后将-o输出的blast结果按照题目要求转化为列表格式;
/panfs/GAG/caiql/panda/Solexa_assembly_estimate/Zhuhm/Final/BAC.fa
/panfs/GAG/caiql/panda/Solexa_assembly_estimate/Zhuhm/Final/OldVersion.fasta 1 Query_id 2 Query_length 3 Query_start 4 Query_end
5 Subject_id
6 Subject_length
7 Subject_start
8 Subject_end
9 Identity 10 Positive 11 Gap 12 Align_length 13 Score
14 E_value 15 Query_annotation 16 Subject_annotation。