作业6
【问题描述】
输入一个自然数N(2到9之间),要求输出如下的魔方阵,即边长为NN,元素取值为1至NN,1在
左上角,呈顺时针方向依次放置各元素。
N=3时:
1 2 3
8 9 4
7 6 5
【输入形式】
从标准输入读取一个整数N。
【输出形式】
将结果输出到文件文件file.out。输出符合要求的方阵,每个数字占5个字符宽度,向右对齐,在每一行末均输出一个回车符。
【输入样例】
4
【输出样例】输出文件file.out内容为:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
【评分标准】
本题不准使用数学库函数。结果正确得20分,每个测试点4分。
【提示】
print函数的格式化控制串可用来控制每个数字的占位宽度。以下输出写法使67占5个字符宽度。
print("%5d"%(67))![在这里插入图片描述](https://img-blog.csdnimg.cn/20210429180300188.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzUxNjc3Njc0,size_16,color_FFFFFF,t_70#pic_center)
我就不多bb了。
n = int(input())
s = [0] * n
ans = []
num = 1
x, y, i, j = 0, 0, 0, 0
for i in range(n):
ans.append(s[:])
i = 0
q = n*n
while num <=q :
for p in range(n):
ans[i][j] = num
num += 1
j+=1
n -= 1
i += 1
j -= 1
for p in range(n):
ans[i][j] = num
num += 1
i += 1
i -= 1
j -= 1
for p in range(n):
ans[i][j] = num
num += 1
j -=1
j += 1
i -= 1
n -=1
for p in range (n):
ans[i][j] = num
num += 1
i -= 1
i += 1
j += 1
with open("file.out", "w") as file:
for p in ans:
for f in p:
file.write("%5d"%f)
file.write("\n")
文件排版22
英文电影中参演人员名单一般以某种方式进行排版显示。给定一个未排版的文件listin.txt,该文件中每行参演人员名单由冒号’:'分隔成前后两部分,但格式杂乱无章,单词(由除空格和水平制表符之外的其它字符构成)之间可能有多个空格或水平制表符分隔。编写程序,要求将其按如下排版规则排版输出到另一个文件listout.txt中:
1.从标准输入读取一整数,作为排版后所有各行冒号’:‘在一行中的固定位置;假设输入的整数肯定大于排版后所有各行冒号’:'前的字符个数,位置从1开始计数;
2.冒号’:‘左边的单词串以冒号为基准右对齐,左边的第一个单词之前如果有多余的位置,则以空格填充;冒号’:‘右边的单词串以冒号’:'为基准左对齐,最后一个单词后只有回车换行符,不再有其它字符;
3.冒号’:'左右两边的单词间都只有一个空格分隔,并且要求冒号两边各有一个空格与单词分隔。
假设输入文件中每行字符个数不超过100。
【输入形式】
待排版的参演人员名单从当前目录下的listin.txt文件中读入;表示冒号’:'位置的整数从标准输入读入。
【输出形式】
排版后的参演人员名单输出到当前目录下的listout.txt中。
【输入样例】
假设文件listin.txt内容为:
Digital Intermediate by : EFILM
Supervising Digital Colorist : STEVEN J. SCOTT
Second Colorist :ANDREW FRANCIS
Digital Intermediate Producer:LOAN PHAN
Digital Intermediate Editor: DEVON MILLER
表示冒号固定位置的整数为:
40
with open("listout.txt","w") as f:
f.write("")
loca = int(input())
with open(r"listin.txt", "r") as f:
data = f.readlines()
a = []
str_lens = []
for line in data:
flag = False
for i in line:
if i == " " or i == "\t":
if flag == False:
if i == " ":
a.append(i)
flag = True
if i == "\t":
a.append(" ")
flag = True
else:
continue
else:
flag = False
a.append(i)
cache_str = "".join(a)
cache_list = cache_str.split(":")
print(cache_list)
for i in range(len(cache_list)):
cache_list[i] = cache_list[i].strip()
str_lens.append(len(cache_list[0]))
with open("listout.txt","a") as q:
q.write(" "*(loca-len(cache_list[0])-2)+cache_list[0]+" : "+cache_list[1]+"\n")
a = []
print(str_lens)
二维列表排序
有以下两个二维列表,第一个列表的元素是元组,请对其按列表元素的第 2 个元素值从小到大进行排序输出,输出其前 m 项;
第二个列表的元素仍是列表,请对其分别按每个元素的第 1 和第 3 个元素值从小到大进行排序,输出其前 n 项。
m 和 n 是由用户输入的非负整数,当 m 或 n 大于列表长度时,对整个列表进行排序输出。
列表一: [(‘dungeon’,7),(‘winterfell’,4),(‘bran’,9),(‘meelo’,6)]
列表二: [[ ‘Angle’, ‘0121701100106’,99], [ ‘Jack’, ‘0121701100107’,86], [ ‘Tom’, ‘0121701100109’,65], [ ‘Smith’, ‘0121701100111’, 100], [‘Bob’, ‘0121701100115’,77], [‘Lily’, ‘0121701100117’, 59]]
【输入形式】在两行中分别输入正整数m 和 n
列表一排序后的前 m 项
列表二按第 1 个元素值升序排序的前 n 项
列表二按第 3 个元素值升序排序的前 n 项
import numpy as np
m=int(input())
n=int(input())
a=[('dungeon',7),('winterfell',4),('bran',9),('meelo',6)]
# a=[('dungeon',7),('winterfell',4),('bran',9),('meelo',6)]
b= [[ 'Angle', '0121701100106',99], [ 'Jack', '0121701100107',86], [ 'Tom', '0121701100109',65], [ 'Smith', '0121701100111', 100], ['Bob', '0121701100115',77], ['Lily', '0121701100117', 59]]
a.sort(key=lambda x: x[1], reverse=False)
if m>=4:
print(a[0:4])
else:
print(a[0:m])
b.sort(key=lambda x: x[0], reverse=False)
if n>=6:
print(b[0:6])
else:
print(b[0:n])
# print(b[0:n])
b.sort(key=lambda x: x[2], reverse=False)
if n>=6:
print(b[0:6])
else:
print(b[0:n])