Perl+习题答疑.docx
- 文档编号:9062026
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:18
- 大小:20.67KB
Perl+习题答疑.docx
《Perl+习题答疑.docx》由会员分享,可在线阅读,更多相关《Perl+习题答疑.docx(18页珍藏版)》请在冰豆网上搜索。
Perl+习题答疑
Perl习题(11)
1写一个程序,将一些字符串(不同的行)读入一个列表中,逆向输出它。
如果是从键盘输入的,那在Unix系统中应当使用CTRL+D表明end-of-file,在Windows系统中使用CTRL+Z.(第3章习题)
unless(@ARGV){
die"
}
open(IN,"<$ARGV[0]")ordie;
my@line=
open(OUT,">$ARGV[1]")ordie;
foreach(reverse(@line)){
printOUT"$_";
}
2写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字(提示:
另外写一个子程序来计算平均值,总和除以数字的个数)。
利用下面的程序进行测试:
(第4章习题)
my@fred=&above_average(1..10);
print"\@fredis@fred\n";
print"(Shouldbe678910)\n";
my@barney=&above_average(100,1..10);
print"\@barneyis@barney\n";
print"(Shouldbejust100)\n";
#!
\usr\bin\perl-w
usestrict;
my@fred=&above_average(1..10);
print"\@fredis@fred\n";
print"(Shouldbe678910)\n";
my@barney=&above_average(100,1..10);
print"\@barneyis@barney\n";
print"(Shouldbejust100)\n";
subabove_average{
my@in=@_;
my$average_value=&average(@in);
my@out;
foreach(@in){
if($_>$average_value){push@out,$_;}
}
return@out;
}
subaverage{
my@in=@_;
my$sum=0;
foreach(@in)
{
$sum+=$_;
}
$sum=$sum/@in;
return$sum;
}
3写一个程序,要求用户在不同的行中输入一些字符串,将此字符串打印出来,规则是:
每一条占20个字符宽度,右对齐。
为了确保正确的输出,在开头打印出一串数字作为比较(帮助调试)。
注意,不要犯19个字符宽度的错误。
例如,如果输入,hello,good-bye,则输出为:
123456789012345678901234567890123456789012345678901234567890
hello
good-bye
(第5章习题)
#!
/usr/bin/perl-w
usestrict;
unless(@ARGV){
die"
}
my$length=$ARGV[1];
open(IN,"<$ARGV[0]")ordie;
open(OUT,">$ARGV[2]")ordie;
my$cnt=1;
foreach(1..$length){
printOUT"$cnt";
$cnt++;
if($cnt==10){$cnt=0;}
}
printOUT"\n";
while(
chomp;
my$len=length($_);
if($len>=$length){printOUT"$_\n";}
else{
foreach(1..$length-$len){
printOUT"";
}
printOUT"$_\n";
}
}
closeIN;
closeOUT;
修改上一个程序,允许用户选择宽度,如,用户输入30,hello,good-bye(在不同的行中),则每一行的宽度为30。
(提示:
参阅第二章相应部分)。
提示,如果选择的宽度太长,可以增加比较行的长度。
my($n,@a)=split/\s*,\s*/,
chomp$a[-1];
4写一个程序,读入一串单词(一个单词一行)◆,输出每一个单词出现的次数。
(提示:
如果某个作为数字使用值是undefined的,会自动将它转换为0。
)如果输入单词为fred,barney,dino,wilma,fred(在不同行中),则输出的fred将为3。
作为额外的练习,可以将输出的单词按照ASCII排序。
(第6章习题)
#!
/usr/bin/perl-w
usestrict;
unless(@ARGV){
die"
}
my%count;
open(IN,"<$ARGV[0]")ordie;
while(
chomp;
$count{$_}++;
}
closeIN;
open(OUT,">$ARGV[1]")ordie;
foreach(sort{$acmp$b}keys%count){
printOUT"$_\t$count{$_}\n";
}
5使用模式测试程序,创造一个模式能匹配任何单词(\w意义下的单词),但这个单词必需以字母a结尾。
它匹配wilma而没匹配barney吗?
它匹配Mrs.WilmaFlintstone吗?
wilma&fred呢?
使用前一章习题的文件进行练习(如果没有上述字符串,则加上它们)(第8章习题)
修改上述程序,使之将由a结尾的单词放到$1之中。
同时修改源代码,使此变量对应的值被放在单引号之中,如$1contains‘Wilma’。
#!
/usr/bin/perl-w
usestrict;
unless(@ARGV)
{
die"
}
open(IN,"<$ARGV[0]")ordie;
open(OUT,">$ARGV[1]")ordie;
while(
{
chomp;
if($_=~/(\w*a)\W?
/or$_=~/(\w+a)$/){printOUT"$_contains\'$1\'\n";}
}#also,/(\w*a)\b/
closeIN;
closeOUT;
Whatabout“wssssilma&fred,alsoMrs.WilmaFlintstone”?
6写一个程序,它可以得到当前文本文件的一个拷贝。
在拷贝的文件中,字符串Fred(大小写无关)将被Larry替换掉。
(因此,“ManfredMann”将变成“ManLarryMann”.)输入的文件名已经在命令行中指定(不需要询问用户),输出的文件名是对应的输入文件名后面加上.out。
(第9章习题)
修改上面程序,使之将Fred由Wilma替换,Wilma由Fred替换。
如果输入的为fred&wilma,则输出为Wilma$Fred。
#!
/usr/bin/perl-w
usestrict;
unless(@ARGV){
die"
}
open(IN,"<$ARGV[0]")ordie;
open(OUT,">$ARGV[0].out")ordie;
while(
chomp;
s/fred/\n/ig;
s/wilma/Fred/ig;
s/\n/Wilma/ig;
printOUT"$_\n";
}
7写一个程序,能重复要求用户猜测某个在1到100之间的数字,直到猜对为止。
你的程序应当能随机的产生一个数字,使用公式int(1+rand100)。
当用户猜测错误时,程序应该回应“Toohigh”或者“Toolow”。
如果用户输入quit或exit,或者回车时,程序应立即退出。
如果用户猜测正确,程序也退出。
(第10章习题)
#!
/usr/bin/perl-w
usestrict;
if(defined$ARGV[0]and$ARGV[0]=~/help/i){
die"justrun\n";
}
print"Thisisagameofguessthenumberbetween1-100\nHaveFun^_^\n";
my$num=int(1+rand100);
my$in=
while
(1){
if($in=~/(quit)|(exit)/i){print"GameOver\n";last;}
elsif($in>$num){print"TooHigh\n";$in=
elsif($in<$num){print"TooLower\n";$in=
elsif($in==$num){print"Great,youareright\n";last;}
}
8写一个程序,找出命令行中存在时间最长的文件名,并报告其天数。
当参数为空时,其行为如何(例如,命令行中没有输入任何的文件)?
(第11章习题)
#!
/usr/bin/perl-w
usestrict;
unless(@ARGV){
die"perl$0
}
my@in=@ARGV;
my$longest=0;
my$save_name;
foreach(@in){
my$age=-M;
if($age>$longest){$longest=$age;$save_name=$_;}
}
print"Thelongestfileis$save_name\nIt$longestdaysaftermodified\n";
9如果你的操作系统支持,写一个程序来查找当前目录下的符号连接(symboliclinks),并将它们的值打印出来(如ls–l一样:
name->value)。
(第12章习题)
#!
/usr/bin/perl-w
usestrict;
unless(@ARGV){
die"perl$0
}
my@file=glob"$ARGV[0]/*";
foreach(@file){
chomp$_;
my$link=readlink"$_";
if(defined$link){print"$_->$link\n";}
}
@a=`ls-l|grep-e‘->’`;
10写一个程序,从文件中读入字符串,一行一个字符串,然后让用户输入模式,这个模式可能匹配上某些字符串。
对于每一个模式,程序将指出文件中有多少个字符串(多少行)匹配上了,并指出是哪些。
对于新的模式不需要重新读文件,将这些字符串保留在内存中。
文件名可以直接写在程序之中。
如果模式无效(例如,圆括号不匹配),则程序报告这个错误,并让用户继续尝试新的模式。
当用户输入一个空行,则程序退出。
(第16章习题)
#!
/usr/bin/perl-w
usestrict;
unless(@ARGV){
die"
}
open(IN,"<$ARGV[0]")ordie;
my@in=
while
(1){
print"Pleaseinputamodel\n";
my$model=
chomp$model;
if($model=~/^\s+$/or!
defined$model){
print"Next\n";
last;
}
else{
my$cnt=0;
foreach(@in)
{
if($_=~/$model/){
print"$_";
$cnt++;
}
}
print"Total$cntmatchthemodel\n";
next;
}
}
11将blast程序原始输出转换成列表格式,16列数据分别是
1Query_id 2Query_length 3Query_start 4Query_end
5Subject_id 6Subject_length 7Subject_start 8Subject_end
9Identity 10Positive 11Gap 12Align_length 13Score
14E_value 15Query_annotation 16Subject_annotation
BLASTN2.2.18[Mar-02-2008]
Reference:
Altschul,StephenF.,ThomasL.Madden,AlejandroA.Schaffer,
JinghuiZhang,ZhengZhang,WebbMiller,andDavidJ.Lipman(1997),
"GappedBLASTandPSI-BLAST:
anewgenerationofproteindatabasesearch
programs",NucleicAcidsRes.25:
3389-3402.
Query=X16077#rRNA_18S[Arabidopsisthaliana]18SrRNAgene
(1902letters)
Database:
/panfs/GAG/xiemin/FFF/rRNA/././ass.scafSeq.gapfill3.shorter.
cut/ass.scafSeq.gapfill3.shorter.18
131sequences;13,055,928totalletters
Searching..................................................done
ScoreE
Sequencesproducingsignificantalignments:
(bits)Value
scaffold6343376e-92
>scaffold634
Length=18181
Score=337bits(170),Expect=6e-92
Identities=230/250(92%)
Strand=Plus/Minus
Query:
1171gagaaatcaaagtttttgggttccggggggagtatggtcgcaaggctgaaacttaaagga1230
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
9158gagaaatcaaagtttttgtattccgggggaagtatggttgcaaagctgaaacttaaagaa9099
Query:
1231attgacggaagggcaccaccaggagtggagcctgcggcttaatttgactcaacacgggga1290
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
9098attgacggaagggcaccaccaggagtggagcctgcggcttaatttgactcaacacgggaa9039
Query:
1291aacttaccaggtccagacatagtaaggattgacagactgagagctctttcttgattctat1350
|||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
9038atcttaccaggcccagacactggaaggattgacagattgaaagctctttcttgattcagt8979
Query:
1351gggtggtggtgcatggccgttcttagttggtggagcgatttgtctggttaattccgttaa1410
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
8978gggtggtggtgcatggccgttcttagttggtggagtgatttgtctgcttaattgcgataa8919
Query:
1411cgaacgagac1420
||||||||||
Sbjct:
8918cgaacgagac8909
Score=317bits(160),Expect=6e-86
Identities=321/372(86%),Gaps=2/372(0%)
Strand=Plus/Minus
Query:
353gatcgcatggcctctgtgctggcgacgcatcattcaaatttctgccctatcaactttcga412
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
10036gatcgcatggcctc-gcgccagcgacgcatctttcaaatgtctgccctatcaactttcga9978
Query:
413tggtaggatagtggcctaccatggtggtaacgggtgacggagaattagggttcgattccg472
|||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
9977tggtaagttctatgcttaccatggttgtaacgggtaacggggaatcagggttcgattccg9918
Query:
473gagagggagcctgagaaacggctaccacatccaaggaaggcagcaggcgcgcaaattacc532
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
9917gagaggcagcctgagacacggctaccacatccaaggaaggcagcaggcgcgcaaattacc9858
Query:
533caatcctgacacggggaggtagtgacaataaataacaataccgggctctttcga-gtctg591
|||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
9857cactcccggcacggggaggtagtgacgaaagataacaatacgggactcatccgaggcctc9798
Query:
592gtaattggaatgagtacaatctaaatcccttaacgaggatccattggagggcaagtctgg651
|||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
9797gtaattggaatggcaacactttaaatcctttatggagtatctaactgagggcaagtctgg9738
Query:
652tgccagcagccgcggtaattccagctccaatagcgtatatttaagttgttgcagttaaaa711
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
9737tgccagcagccgcggtaattccagctcagttagcgtatatcaaagttgttgcggttaaaa9678
Query:
712agctcgtagttg723
||||||||||||
Sbjct:
9677agctcgtagttg9666
Score=129bits(65),Expect=3e-29
Identities=137/161(85%)
Strand=Plus/Minus
Query:
956gacagtcgggggcattcgtatttcatagtcagaggtgaaattcttggatttatgaaagac1015
|||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
9373gacaggcgggggcattcgtattgctacgttagaggtgaaattcttggatcgtagcaagac9314
Query:
1016gaacaactgcgaaagcatttgccaaggatgttttcattaatcaagaacgaaagttggggg1075
|||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct:
9313ggactgaagcgaaagcatttgccaaggatgttctcgttgatcaagaacgaaagtttgggg9254
Query:
1076ctcgaagacgatcagataccgtcctagtctcaaccataaac1116
|||||||||||||||||||||||||||||||||||||
Sbjct:
9253ctcgaaggcgatcagataccgccctagtccaaaccataaac9213
Score=123bits(62),Expect=2e-27
Identities=86/94(91%)
Strand=Plus/Minus
Query:
1658aacgaggaattcctagtaagcgcgagtcatcagctcgcgttgactacgtccctgcccttt1717
|||||||||||||||||||||||||||||||||||||||
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Perl 习题 答疑