王世杰 小作业9
1
2
3
4
5
6
7
8
9
10
11
12
13
|
陈皓:没写完~ 苗子瑾:第五个没写完 陈皓:第六个 陈皓:一遇到数学就蒙 苗子瑾:想想就头疼 苗子瑾:等我回宿舍交作业吧…… 周愉:看见那个绿色的灯了么 周愉:全灭了我就到家了 陈皓:我家网络出门题了 陈皓:刚给联通打完电话,效率问题~ 陈皓:效率问题 苗子瑾:这个图打不开 苗子瑾:这个图 |
1.有以上文件record.txt,将此文件三人对话每个人的内容单独保存一个文件,并每个文件中不包含对话人名
fd = open(r'E:\untitled\hw\1.1text', mode = 'w+', encoding = 'utf-8') fd.write('''陈皓:没写完~ 苗子瑾:第五个没写完 陈皓:第六个 陈皓:一遇到数学就蒙 苗子瑾:想想就头疼 苗子瑾:等我回宿舍交作业吧…… 周愉:看见那个绿色的灯了么 周愉:全灭了我就到家了 陈皓:我家网络出门题了 陈皓:刚给联通打完电话,效率问题~ 陈皓:效率问题 苗子瑾:这个图打不开 苗子瑾:这个图 ''') fd.seek(0, 0) while True: s = fd.readline() if s == '': break else: for i in s: if i == ':': s1 = s[:s.index(':')] s2 = s[s.index(':')+1:] break if s1 == '陈皓': cd = open(r'E:\untitled\hw\c.text', mode='a', encoding='utf-8') cd.write(s2) if s1 == '苗子瑾': cd = open(r'E:\untitled\hw\m.text', mode='a', encoding='utf-8') cd.write(s2) if s1 == '周愉': cd = open(r'E:\untitled\hw\z.text', mode='a', encoding='utf-8') cd.write(s2)
2.读入用户输入的文件的路径和一个字符串和行数,将文件中的第n行行首插入用户输入的字符串
import sys s = sys.argv[2] n = sys.argv[3] m = int(n) text = sys.argv[1] with open(text, mode='r+', encoding='utf-8') as rf: while m > 1: print(rf.readline()) m -= 1 rf.seek(0,1) rf.write(s)
3.下面只有一种方式不能打开文件,请尝试,并说明原因?
01. f = open('E:/test.txt', 'w')
02. f = open('E:\test.txt', 'w')
03. f = open('E://test.txt', 'w')
04. f = open('E:\\test.txt', 'w')
02不可以,window下读取可以用\,但在字符串中\会被当做转义字符使用,被转义后可能就找不到原来的路径了。
4.打开一个文件使用open()函数的时候,通过设置文件的打开方式,决定打开的文件具有哪些性质,请总结都有哪些方式,并说明区别
r只读方式打开,指针放在文件的开头,这是默认方式。
rb以二进制只读方式打开,指针放在文件的开头,默认方式。
r+以读写方式打开文件,指针默认为放在文件的开头。
rb+以二进制读写方式打开文件,指针默认为放在文件的开头。
w打开文件只用于写入,如果文件存在,则删除原来的文件内容,重新编写;若文件不存在,则创建文件写入。
wb以二进制方式打开文件只用于写入,如果文件存在,删除原文件内容,从头重新编写;若不存在,创建新文件。
w+打开文件为读写方式,如果文件存在,则删除原来文件的内容,重新编写;若文件不存在,则创建新文件写入。
wb+以二进制方式打开文件用于读写,如果文件存在,则删除原文件内容,从头开始编写;若文件不存在,则创建新文件写入。
a打开文件用于追加,若文件存在,指针放在文件结尾,新内容会被写入已有内容之后,若文件不存在,创建新文件写入。
ab以二进制方式打开文件用于追加,若文件存在,指针放在文件结尾,新内容会被写入已有内容之后,若文件不存在,创建新文件写入。
a+打开文件用于读写,若文件存在,指针放入文件结尾,文件是追加模式,若文件不存在,创建新文件用于读写。
ab+以二进制方式打开文件用于读写,文件存在,指针放在文件结尾,若文件不存在,创建新文件用于读写。
5.如何将一个文件对象f中的数据存放到列表中
s = '''a b c d ''' with open('5.1text', mode='w+', encoding='utf-8') as fd: fd.writelines(s) print(fd.readlines(4)) l = [] with open('5.1text', mode='r', encoding='utf-8') as f: while True: #f.seek(0,1) data = f.readline() if data == '': break else: l.append(data) print(l)
6.如果得到文件对象f的每一行数据,尝试使用多种方法
s = '''a b c d ''' with open('6.1text', mode='w+', encoding='utf-8') as fd: fd.writelines(s) fd.seek(0,0) #print(fd.read()) #print(fd.readlines()) while True: data = fd.readline() if data == '': break else: print(data)
3.
坦克
某次战役中,为便于信息交互,我军侦察部门将此次战役的关键高地坐标设定为(x=0,y=0)并规定,每向东增加100米,x加1,每向北增加100米,y加1。同时,我军情报部门也破译了敌军向坦克发送的指挥信号,其中有三种信号(L,R,M)用于控制坦克的运动,L 和 R 分别表示使令坦克向左、向右转向,M 表示令坦克直线开进100米,其它信号如T用于时间同步,P用于位置较准。
一日,我军侦察兵发现了敌军的一辆坦克,侦察兵立即将坦克所在坐标(P, Q)及坦克前进方向(W:西,E:东,N:北,S:南)发送给指挥部,同时启动信号接收器,将坦克接收到的信号实时同步发往指挥部,指挥部根据这些信息得以实时掌控了该坦克的位置,并使用榴弹炮精准地击毁了该坦克。
请设计合理的数据结构和算法,根据坦克接收到的信号,推断出坦克所在的位置。
设计时请考虑可能的扩展情况,并体现出您的设计风格。
假设,侦察兵发送给指挥部的信息如下:
坦克坐标:(11,39)
坦克运行方向:W
坦克接收到的信号为:MTMPRPMTMLMRPRMTPLMMTLMRRMP
其位置应该是(9,43),运动方向为E
s = input('侦察兵输入坦克的动向:') x1, y1 = eval(input('侦察兵输入坦克的坐标:')) d1 = input('侦察兵输入坦克的行驶方向:') class Coordinate(object): def __init__(self,x,y): self.x = x self.y = y class Direction(Coordinate): def __init__(self,d,x,y): super().__init__(x,y) self.d = d class Trend(Direction): def __init__(self,d,t,x,y): super ().__init__(d,x,y) self.t = t def tre(self): if self.d == 'W': if self.t == 'L': self.d = 'S' if self.t == 'R': self.d = 'N' if self.t == 'M': self.x -= 1 return (self.d, self.x, self.y) if self.d == 'E': if self.t == 'L': self.d = 'N' if self.t == 'R': self.d = 'S' if self.t == 'M': self.x += 1 return (self.d, self.x, self.y) if self.d == 'N': if self.t == 'L': self.d = 'W' if self.t == 'R': self.d = 'E' if self.t == 'M': self.y += 1 return (self.d, self.x, self.y) if self.d == 'S': if self.t == 'L': self.d = 'E' if self.t == 'R': self.d = 'W' if self.t == 'M': self.y -= 1 return (self.d, self.x, self.y) l = [] for i in s: if i != 'T' and i != 'P': l.append(i) for j in range(len(l)): tre = Trend(d1, l[j], x1, y1) l2 = list(tre.tre()) d1 = l2[0] x1 = l2[1] y1 = l2[2] print('坦克坐标是:({},{}),动向是:{}'.format(x1, y1, d1))
扑克牌: