python核心编程第九章答案

9.1 比较简单 看每一行开头是不是# 是的话,忽略这一行

#!/usr/bin/env python
import os
while True:
    inputfile = raw_input("please input the file name:")
    if not os.path.exists(inputfile):
        print "the file you input dose't exists"
        continue
        print "the name you input does not exists"
    f1 = open(inputfile, 'r')
    for each_line in f1:
        if not each_line.strip().startswith('#'):
            print each_line
    f1.close()

9.2 设一个标记=0, 每打印一行,标记+1

#!/usr/bin/env python
import os
infile = raw_input("please input n(n lins) f(file you want to read n lines):")
n, filein = infile.split()
n = int(n)
print n
print filein
if not os.path.isfile(filein):
    print "the file you input does not exists"
f1 = open(filein, 'r')
line = 0
for each_line in f1:
    if line < n:
        print each_line,
        line += 1
    else:
        break
f1.close()

9.3 每读一行标记+1,这里发现一个有意思的问题, 如果你最后没有写 f.close() 用这段程序读自己的话,有可能自己的程序没有了


infile = raw_input('please input filename:')
f1 = open(infile)
num = 0
for each_line in f1:
    num+=1
print "the file you input has %d lines" % num
f1.close()
看有人给出了一个代码更少的方法

filename = raw_input("please input the filename")
print len( [line for line in open(filename)] )
print [line for line in open(filename)]

虽然内存开销大了一点,但是在文件比较小的情况下可以忽略不计了,

另外发现一个有意思的事 最后一行显示如果是空行的话,有时候我们的显示结果会多一行, 把列表打印出来发现这是最后一行油一个'\n'的缘故

如果有兴趣的话可以加一行判断最后一行是否为空的代码~


9.4 windows上比较简单 直接os.sys('pause')

linux 别人博客上搜到的不太好用,那位大牛解决了望告知


9.5

不能理解那个打开多个文件~

这里简单的实现一个,创建一个随机的五位到十位的姓名,一个20到一百的随机数

并且用了两种方法来计算平均数 一种正常的打开文件,一行一行读,然后另一个用了列表解析

开始的时候一直平均数不同

列表解析这样写的(int (score) for line in f1, for score in line.split()[1])

这样的结果是把一个两位数也给分解了~ 最后打印出来是一堆各位数.....

这样写就好   (int (line.split()[1]) for line in f1)

#!/usr/bin/env python
import random
import string
srstring = string.letters;
f1 = open('source.txt', 'w')
for i in range(0, 10):
    name = ''
    length = random.randint(5,10)
    for j in range(length):
        name += random.choice(srstring)
    score = random.randint(20, 100)
    score = str(score)
    outstring = name + ' ' +score + '\n'
    f1.write(outstring)
f1.close()
f1 = open('source.txt', 'r')
sum1 = 0
n = 0
for each_line in f1:
    sum1 += int(each_line.split()[1])
    n += 1
print sum1, sum1/n
f1.seek(0)
print sum(int(line.split()[1]) for line in f1)
f1.close()
    


你可能感兴趣的:(python)