浙大Python程序设计(MOOC)习题答案

章节

  • 第一章
    • 7-1 从键盘输入两个数,求它们的和并输出
    • 7-2 从键盘输入三个数到a,b,c中,按公式值输出
    • 7-3 输出“人生苦短,我学Python”
    • 7-4 写字母H
  • 第二章
    • 7-1 计算 11 + 12 + 13 + ⋯ + m 11+12+13+\dots+m 11+12+13++m
    • 7-2 计算分段函数
    • 7-3 阶梯电价
    • 7-4 求奇数分之一序列前N项近似和
    • 7-5 求交错序列前N项和
    • 7-6 产生每位数字相同的n位数
    • 7-7 转换函数使用
    • 7-8 比较大小
    • 7-9 输出摄氏-华氏温度转换表
    • 7-10 偶数位特殊序列和
    • 7-11 求平方与倒数序列的近似和
    • 7-12 计算函数f(x)
    • 7-13 分段计算居民水费
    • 7-14 输出指定图形
  • 第三章
    • 7-1 大于身高的平均值
    • 7-2 输出字母在字符串中位置索引
    • 7-3 求整数的位数及各位数字之和
    • 7-4 字符替换
    • 7-5 删除字符
    • 7-6 输出10个不重复的英文字母
    • 7-7 逆序的三位数
    • 7-8 判断两个字符串是否为变位词
    • 7-9 输入字符串,排序后输出最大字符及该字符在原字符串中的索引
    • 7-10 计算有n个字符串中最长的字符串长度
    • 7-11 位1的个数
    • 7-12 整数的二进制相加
    • 7-13 汉明距离
    • 7-14 判断回文字符串
    • 7-15 输入一行字符串,并将它转换成10进制数输出
    • 7-16 统计满足特定条件的字符数
    • 7-17 查验身份证
  • 第四章
    • 7-1 生成输入数的乘方表
    • 7-2 判断素数
    • 7-3 显示指定范围的素数并求和
    • 7-4 猴子吃桃问题
    • 7-5 求分数序列前N项和
    • 7-6 运输打折问题
    • 7-7 最大公约数和最小公倍数
    • 7-8 求满足条件的斐波那契数
    • 7-9 求误差小于输入值的e的近似值
    • 7-10 求 π π π的近似值
    • 7-11 水仙花数
    • 7-12 找出不是公共的元素
    • 7-13 找完数
    • 7-14 猴子选大王
    • 7-15 特定矩阵元素和
    • 7-16 矩阵行、列、对角线和的最大值
    • 7-17 判断三角矩阵
    • 7-18 打印九九口诀表
    • 7-19 求矩阵的局部极大值
    • 7-20 矩阵转置
    • 7-21 显示直角数字图形
    • 7-22 显示菱形图形
    • 7-23 显示Pascal三角形

第一章

7-1 从键盘输入两个数,求它们的和并输出

a=int(input())
b=int(input())
print(a+b)

7-2 从键盘输入三个数到a,b,c中,按公式值输出

在同一行依次输入三个值a,b,c,用空格分开,输出 b*b-4*a*c的值

a,b,c=input().split()
a,b,c=int(a),int(b),int(c)
print(b*b-4*a*c)

7-3 输出“人生苦短,我学Python”

print("人生苦短,我学Python")

7-4 写字母H

用*编写程序,输出H

for i in range(1,6):
    if i==3:
        print("*****")
    else:
        print("*   *")

第二章

7-1 计算 11 + 12 + 13 + ⋯ + m 11+12+13+\dots+m 11+12+13++m

输入一个正整数 m ( 20 ≤ m ≤ 100 ) m(20\le m\le100) m(20m100),计算 11 + 12 + 13 + ⋯ + m 11+12+13+\dots+m 11+12+13++m的值。
输出格式:
在一行中按照格式 “ s u m = S ” “sum = S” sum=S输出对应的和 S S S

m=int(input())
S=0
for i in range(11,m+1):
    S=S+i
print("sum = {}".format(S))

7-2 计算分段函数

计算下列分段函数的值:
g ( x ) = { 0 x = 0 1 2 x x ! = 0 g(x)=\begin{cases}0\quad x=0\\\frac{1}{2x}\quad x!=0\end{cases} g(x)={0x=02x1x!=0
输出格式:
在一行中按 “ g ( x ) = r e s u l t ” “g(x) = result” g(x)=result的格式输出,其中 x x x r e s u l t result result都保留 3 3 3位小数。

x=float(input())
if x!=0:
    result=1/(2*x)
else:
    result=0
print("g({0:.3f}) = {1:.3f}".format(x,result))

7-3 阶梯电价

居民用户电价分为两个“阶梯”:月用电量 50 50 50千瓦时(含 50 50 50千瓦时)以内的,电价为 0.53 0.53 0.53元/千瓦时;超过 50 50 50千瓦时的,超出部分的用电量,电价上调 X X X元/千瓦时。
输入格式:
一行中输入某用户的月用电量(单位:千瓦时)和电价上调的 X X X值(单位:元),中间用空格分开。
输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”。

power,x=input().split()
power=int(power)
x=float(x)
if power<=50:
    cost=0.53*power
else:
    cost=0.53*50+(power-50)*(x+0.53)
print("cost = {:.2f}".format(cost))

7-4 求奇数分之一序列前N项近似和

计算序列的前 N N N项近似和 1 + 1 / 3 + 1 / 5 + ⋯ 1+1/3 + 1/5 + \cdots 1+1/3+1/5+ 输出格式:
在一行中按照 “ s u m ≈ S ” “sum ≈ S” sumS的格式输出近似和 S S S S S S是大于序列和的最小整数

import math
N=int(input())
s=0
for i in range(1,N+1,2):
    a=float(1/i)
    s=s+a
S=math.ceil(s)
print("sum ≈ {}".format(S))

7-5 求交错序列前N项和

计算交错序列的前 N N N项之和 1 − 2 / 3 + 3 / 5 − 4 / 7 + 5 / 9 − 6 / 11 + ⋯ 1-2/3+3/5-4/7+5/9-6/11+\cdots 12/3+3/54/7+5/96/11+

N=int(input())
s=0
for i in range(1,N+1):
    if i%2==1:
        s=s+i/(2*i-1)
    else:
        s=s-i/(2*i-1)
print("{:.3f}".format(s))

7-6 产生每位数字相同的n位数

读入 2 2 2个正整数 A A A B B B 1 ≤ A ≤ 9 , 1 ≤ B ≤ 10 1\le A\le9, 1\le B\le10 1A9,1B10,产生数字AA…A,一共B个A

a,b=input().split(",")
a,b=int(a),int(b)
for i in range(1,b+1):
    print(a,end='')

7-7 转换函数使用

输入一个整数和进制,转换成十进制输出

a,b=input().split(",")
a,b=int(a),int(b)
c=(a//10)*b+(a%10)
print(c)

7-8 比较大小

输入 3 3 3个不同整数,这 3 3 3个整数分别对应 3 3 3个字母的ASCII码值,把这 3 3 3个字母按它的ASCII码值从小到大输出。

a,b,c=input().split()
a,b,c=int(a),int(b),int(c)
i,j,k=chr(a),chr(b),chr(c)
if a>b:
    i,j=j,i
if a>c:
    i,k=k,i
if b>c:
    j,k=k,j
print("{0:}<{1:}<{2:}".format(i,j,k))

7-9 输出摄氏-华氏温度转换表

输入2个正整数lower和upper(-20<=lower<=upper<=50),表示摄氏范围。请输出一张取值范围为[lower,upper]、 且每次增加2摄氏度的摄氏-华氏温度转换表。温度转换的计算公式:$ F=C×1.8+32
输入格式:
在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。
输出格式:
第一行输出:“celsius□□□□fahr”
接着每行输出一个摄氏温度celsius(整数)与一个华氏温度fahr(占据14个字符宽度,靠右对齐,保留1位小数)。
若输入的范围不合法,则输出"Invalid."。

lower,upper=map(int,input().split())
if -20<=lower<=upper<=50:
    print("celsius    fahr")
    while lower<=upper:
        f=float(lower*1.8+32)
        print("{0:d}{1:>14.1f}".format(lower,f))
        lower=lower+2
else:
    print("Invalid.")

7-10 偶数位特殊序列和

给定不超过9的正整数a,给定正整数n,n是偶数,4<=n<=18,要求编写程序求aa+aaaa+aaaaaa+⋯+aa⋯a(n个a)之和

a,n=map(int,input().split())
s=0
b=a
for i in range(1,n+1):
    b=10*b+a
    if i%2==1:
        s=s+b
print(s)

7-11 求平方与倒数序列的近似和

对m和n(m≤n)计算序列近似和:m2 +1/m+(m+1)2+1/(m+1)+⋯+n2+1/n

import math
a,b=map(int,input().split())
c=0
for i in range(a,b+1):
    s=i**2+float(1/i)
    c=s+c
S=math.floor(c)
print("sum ≈ {}".format(S))

7-12 计算函数f(x)

f ( x ) = s i n ( 35 ° ) + e x − 15 x x 4 + 1 − l n ( 7 x ) f(x)=sin(35°)+\frac{e^x-15x}{\sqrt{x^4+1}}-ln(7x) f(x)=sin(35°)+x4+1 ex15xln(7x)

import math
x=float(input())
y=math.sin(35*math.pi/180)+(math.e**x-15*x)/math.sqrt(x**4+1)-math.log(7*x)
print("f({0:})={1:.3f}".format(x,y))

7-13 分段计算居民水费

按用水量阶梯式计价,居民应交水费y(元)与月用水量x(吨)相关:当x不超过15吨时,y=4x/3;超过后,y=2.5x−17.5。

x=float(input())
if x<=15:
    y=4*x/3
else:
    y=2.5*x-17.5
print("{:.2f}".format(y))

7-14 输出指定图形

输入正整数(1<=n<=7),输出指定图形。(提示:用*运算符)

n=int(input())
for i in range(1,n+1):
    print('* '* i)

第三章

7-1 大于身高的平均值

一个班的身高已经量好了,请输出其中超过平均身高的那些身高。程序的输入为一行数据,其中以空格分隔,每个数据都是一个正整数。程序要输出那些超过输入的正整数的平均数的输入值,每个数后面有一个空格,输出的顺序和输入的相同。

sheight = map(int,input().split())
theight = list(sheight)
average = sum([i for i in theight])/len(theight)
over = [n for n in theight if n > average]
for j in over:
    print(j,end=' ')

7-2 输出字母在字符串中位置索引

lst=(input())
a,b=input().split()
lst1=[]
for i in range(len(lst)):
    if lst[i]==a or lst[i]==b:
        lst1.extend([(i,lst[i])])
res=lst1[::-1]
for i in range(len(res)):
    print(res[i][0],res[i][1])

7-3 求整数的位数及各位数字之和

n=int(input())
t=[i for i in str(n)]
l=len(t)
s=sum([int(i) for i in t])
print(l,s)

7-4 字符替换

str = input()
lst = list(str)
for i in lst:
    n = ord(i)
    if n >= ord('A') and n <= ord('Z'):
        n = ord('A')+ord('Z')-n
    print(chr(n),end='')

7-5 删除字符

输入一个字符串 str,再输入要删除字符 c,大小写不区分,将字符串 str 中出现的所有字符 c 删除。

str = input().strip()
c = input().strip()
str = str.replace(c.upper(),'')
str = str.replace(c.lower(),'')
print("result: {}".format(str))

7-6 输出10个不重复的英文字母

随机输入一个字符串,把最左边的10个不重复的英文字母(不区分大小写)挑选出来。 如没有10个英文字母,显示信息“not found”

letter='abcdefghijklmnopgrstuvwxyz'
s=input().strip()
s1=s.lower()
t=list(s1)
t1=[k for k in range(len(t)) if t[k] in letter and t.index(t[k])==k]
s2=''.join([s[k] for k in t1])
if len(s2)>=10:
    print(s2[:10])
else:
    print("not found")

7-7 逆序的三位数

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

n=int(input())
s=str(n)
res=s[::-1]
print(int(res))

7-8 判断两个字符串是否为变位词

如果一个字符串是 另一个字符串的重新排列组合,那么这两个字符串互为变位词。比如,”heart”与”earth”互为变位 词,”Mary”与”arMy”也互为变位词。

lst1 = list(input())
lst2 = list(input())
lst1.sort()
lst2.sort()
if lst1 == lst2:
    print("yes")
else:
    print("no")

7-9 输入字符串,排序后输出最大字符及该字符在原字符串中的索引

tup = tuple(input())
for i in tup:
    if i == max(tup):
        result = i
ind = len(tup)-1-tup[::-1].index(result)
print("{}   {}".format(max(tup),ind))

7-10 计算有n个字符串中最长的字符串长度

n = int(input())
lst = []
lst1 = []
for i in range(1,n+1):
    lst.append(input().strip())
for l in lst:
    lst1.append(len(l))
length = max(lst1)
print("length={}".format(length))

7-11 位1的个数

输入一个非负整数,求它变成二进制后1的个数

n = int(input())
count = 0
for i in bin(n):
    if i == '1':
        count += 1
print(count)

7-12 整数的二进制相加

输入两个整数,大小在[0,63]之间。求它们的二进制和,二进制用8位表示。

m = int(input())
n = int(input())
a = m + n
m1 = int(format(m, "b"))
n1 = int(format(n, "b"))
a1 = int(format(a, "b"))
print("%08d" % m1)
print("%08d" % n1)
print("-" * 8)
print("%08d" % a1)

7-13 汉明距离

两个整数间的汉明距离指的是这两个数对应二进制位不同的位置的数目。输入两个整数 x , y , 0 ≤ x , y ≤ 2 31 x,y, \quad0\le x,\quad y\le2^{31} x,y,0x,y231输出 x , y x,y x,y的汉明距离。

x,y = input().split()
x = int(x)
y = int(y)
count = 0
temp = bin(x^y)
for i in temp:
    if i == '1':
        count += 1
print(count)

7-14 判断回文字符串

回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。 输入一个字符串,判断该字符串是否为回文,只考虑数字和字母字符,字母的大小写没有区别。

s = input().lower()
str = ''.join([i for i in s if i.isalnum()])
str1 = str[::-1]
if str == str1:
    print("yes")
else:
    print("no")

7-15 输入一行字符串,并将它转换成10进制数输出

输入一行字符串,去掉非16进制字符,并将它转换成10进制数输出。

s = input().strip()
cha = '0123456789abcdeABCDE'
str = ''.join([i for i in s if i in cha])
print("{}\n{}".format(str,int(str,16)))

7-16 统计满足特定条件的字符数

输入字符串A(没有重复字符),输入字符串B,求在字符串A中字符的个数,这些字符必须同时又在字符串B中。

A = input().strip()
B = input().strip()
count = 0
for i in A:
    if i in B:
        count += 1
print(count)

7-17 查验身份证

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

n=int(input())
wrong=0
w=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)
m=('1','0','X','9','8','7','6','5','4','3','2')
for i in range(n):
    s=input()
    t=list(s)
    c=[t[i] for i in range(0,17) if ord(t[i]) in range(ord('0'),ord('9')+1)]
    if len(c)<17:
        print(s)
        wrong+=1
    else:
        a=sum([int(t[i])*w[i] for i in range(17)])
        z=a%11
        if m[z]!=t[17]:
            print(s)
            wrong+=1
if wrong==0:
    print("All passed")

第四章

7-1 生成输入数的乘方表

输入一个非负数和正整数 n n n 3 ≤ n ≤ 9 3\le n\le9 3n9,生成一张输入数的乘方表。按照幂的递增顺序输出 n + 1 n+1 n+1行,计算结果保留 2 2 2位小数。

a,n = input().split()
a,n = float(a),int(n)
for i in range(n+1):
    print("{0:.1f}**{1:d}={2:.2f}".format(a,i,a**i))

7-2 判断素数

import math
N = int(input())
count = 0
for i in range(1,N+1):
    num = int(input())
    for j in range(2,int(math.sqrt(num))):
        if num%j == 0:
            count += 1
    if count == 0:
        print("Yes")
    else:
        print("No")

7-3 显示指定范围的素数并求和

显示指定范围的素数,素数间空一格,每五个换一行。 单独一行输出素数的个数及素数的和。

M,N = map(int,input().split())
amount = 0
sum = 0
for i in range(M,N+1):
    count = 0
    if i>1:
        for j in range(2,i):
            if i%j == 0:
                count += 1
        if count == 0:
            amount += 1
            sum += i
            print(i,end=' ')
            if amount%5 == 0:
                print()
print("\namount={} sum={}".format(amount,sum))

7-4 猴子吃桃问题

一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?

N = int(input())
n = 1
for i in range(1,N):
    n = (n+1)*2
print(n)

7-5 求分数序列前N项和

计算序列 2 / 1 + 3 / 2 + 5 / 3 + 8 / 5 + . . . 2/1+3/2+5/3+8/5+... 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

N = int(input())
a,b,c,sum = 1,2,0,0
for i in range(1,N+1):
    sum += b/a
    c = b
    b = a+b
    a = c
print("{:.2f}".format(sum))

7-6 运输打折问题

某运输公司对用户计算运费。路程(S)越远,每公里运费越低。其中基本运输费用为每吨每公里1元,标准如下:
浙大Python程序设计(MOOC)习题答案_第1张图片

W,S = map(eval,input().split())
if S<250:
    cost = W*S
if S>=250 and S<500:
    cost = 0.98*W*S
if S>=500 and S<1000:
    cost = 0.95*W*S
if S>=1000 and S<2000:
    cost = 0.92*W*S
if S>=2000 and S<3000:
    cost = 0.9*W*S
if S>=3000:
    cost = 0.85*W*S
print(int(cost))

7-7 最大公约数和最小公倍数

M,N = map(int,input().split())
a = 1
for i in range(2,min(M,N)):
    while(M%i == 0 and N%i == 0):
        M,N = M/i,N/i
        a = a*i
print("{} {}".format(a,int(a*M*N)))

7-8 求满足条件的斐波那契数

斐波那契数,亦称之为斐波那契数列,指的是这样一个数列: 1 、 1 、 2 、 3 、 5 、 8 、 13 、 21 、 … … , 1、1、2、3、5、8、13、21、……, 1123581321这个数列从第3项开始,每一项都等于前两项之和。求大于输入数的最小斐波那契数。

n = int(input())
lst = [1,1]
while(lst[-1]<=n):
    lst.append(lst[len(lst)-2]+lst[len(lst)-1])
print(lst[-1])

7-9 求误差小于输入值的e的近似值

自然常数 e e e可以用级数 1 + 1 / 1 ! + 1 / 2 ! + ⋯ + 1 / n ! 1+1/1!+1/2!+⋯+1/n! 1+1/1!+1/2!++1/n!来近似计算。 e i e_i ei代表前i项求和。输入误差范围 e r r o r error error,当 e i + 1 − e i < e r r o r e_{i+1}-e_iei+1ei<error,则表示 e e e的近似值满足误差范围。

error = float(input())
a,b = 1,1
s1 = 1+1/1
s2 = 1+1/1+1/2
while((s2-s1) > error):
    b = b+1
    a = a*b
    s1 += 1/a
    s2 += 1/(a*(b+1))
print("{:.6f}".format(s2))

7-10 求 π π π的近似值

用公式求 π π π的近似值: π 2 / 6 = 1 + 1 / 2 2 + 1 / 3 2 + 1 / 4 2 + … π^2/6=1+1/2^2+1/3^2+1/4^2+\dots π2/6=1+1/22+1/32+1/42+当求和项小于误差时,结束求和。

import math
error = float(input())
s = 1
i = 1
while(1/(i**2) > error):
    i += 1
    s += 1/(i**2)
pi = math.sqrt(s*6)
print("{:.6f}".format(pi))

7-11 水仙花数

水仙花数是指一个 N N N位正整数 ( N ≥ 3 ) (N≥3) (N3),它的每个位上的数字的N次幂之和等于它本身。 例如: 153 = 1 × 1 × 1 + 5 × 5 × 5 + 3 × 3 × 3 153=1×1×1+5×5×5+3×3×3 153=1×1×1+5×5×5+3×3×3

N = int(input())
i = 0
for n in range(10**(N-1),10**N):
    sum = 0
    for j in range(0,N):
        i = n//(10**j)%10
        sum += i**N
    if sum == n:
        print(n)

7-12 找出不是公共的元素

lst1 = input().split()
lst2 = input().split()
for i in lst1:
    count = 0
    for j in lst2:
        if i == j:
            count +=1
    if count == 0:
        print(i,end=' ')
for i in lst2:
    count = 0
    for j in lst1:
        if i == j:
            count +=1
    if count == 0 and i!=lst2[-1]:
        print(i,end=' ')
    if count == 0 and i == lst2[-1]:
        print(i,end='')

7-13 找完数

完数就是该数恰好等于除自身外的因子之和。例如: 6 = 1 + 2 + 3 6=1+2+3 6=1+2+3,其中 1 、 2 、 3 1、2、3 123 6 6 6的因子。

import math
m,n= map(int,input().split())
count = 0
for i in range(m,n+1):
    lst = [1]
    for j in range(2,int(math.sqrt(i))+1):
        if i%j == 0:
            lst.append(j)
            if j*j != i:
                lst.append(i//j)
    if i == sum([a for a in lst]):
        count += 1
        print('{} = '.format(i), end="")
        lst.sort()
        print(" + ".join("%s" %a for a in lst))
if count == 0:
    print("None")

7-14 猴子选大王

一群猴子要选新猴王。新猴王的选择方法是:让 N N N只候选猴子围成一圈,从某位置起顺序编号为 1 1 1~ N N N号。从第 1 1 1号开始报数,每轮从 1 1 1报到 3 3 3,凡报到 3 3 3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

N = int(input())
lst = []
for i in range(1,N+1):
    lst.append(i)
length = 0
index = 1
while True:
    if len(lst) == 1:
        print(lst[0])
        break
    if length == len(lst):
        length = 0
    if index == 3:
        del lst[length]
        index = 1
    else:
        index += 1
        length += 1

7-15 特定矩阵元素和

给定一个 n × n n×n n×n的方阵,计算该矩阵主、副对角线上的所有元素之和。主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线

n = int(input())
lst = []
sum = 0
for i in range(n):
    lst.append(input().split())
for j in range(n):
    for k in range(n):
        if j == k or j+k == n-1:
           sum += float(lst[j][k])
print("{:.2f}".format(sum))

7-16 矩阵行、列、对角线和的最大值

求一个3*3矩阵每行、每列及对角线和的最大值

num = input().split()
lst = [num[:3],num[3:6],num[6:]]
lst1 = []
sum3,sum4 = 0,0
for i in range(3):
    sum1,sum2 = 0,0
    for j in range(3):
        sum1 += int(lst[i][j])
        sum2 += int(lst[j][i])
        if i == j:
            sum3 += int(lst[i][j])
        if i+j == 2:
            sum4 += int(lst[i][j])
    lst1.append(sum1)
    lst1.append(sum2)
lst1.append(sum3)
lst1.append(sum4)
print(max(lst1))

7-17 判断三角矩阵

三角矩阵包含上三角矩阵和下三角矩阵两种。上三角矩阵指主对角线以下的元素都为0的矩阵;下三角矩阵指主对角线以上的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。

T = int(input())
for i in range(1,T+1):
    n = int(input())
    lst = []
    for j in range(n):
        lst.append(input().split())
    index,index1 = 0,0
    for h in range(n):
        for l in range(n):
            if l<h:
                index += int(lst[h][l])
            if l>h:
                index1 += int(lst[h][l])
    if index == 0 and index1 != 0:
        print("upper triangular matrix")
    elif index1 == 0 and index != 0:
        print("lower triangular matrix")
    else:
        print("no")

7-18 打印九九口诀表

N = int(input())
for i in range(1,N+1):
    for j in range(1,i+1):
        print("%d*%d=%-4d"%(j,i,j*i),end='')
        if j == i:
            print()

7-19 求矩阵的局部极大值

给定 M M M N N N列的整数矩阵 A A A,如果 A A A的非边界元素 A [ i ] [ j ] A[i][j] A[i][j]大于相邻的上下左右4个元素,那么就称元素 A [ i ] [ j ] A[i][j] A[i][j]是矩阵的局部极大值。

M,N = map(int,input().split())
A = []
for n in range(M):
    A.append(list(map(int,input().split())))
count = 0
for i in range(1,M-1):
    for j in range(1,N-1):
        if A[i][j]>A[i-1][j] and A[i][j]>A[i][j-1] and A[i][j]>A[i+1][j] and A[i][j]>A[i][j+1]:
            print(A[i][j],i+1,j+1)
            count += 1
if count == 0:
    print("None {} {}".format(M,N))

7-20 矩阵转置

m,n = map(int,input().split())
A = []
for i in range(m):
    A.append(list(map(int,input().split())))
A1 = []
for i in range(n):
    j = 0
    while(j<m):
        A1.append(str(A[j][i]))
        j += 1
for i in range(n):
    print(' '.join(A1[i*m:(i+1)*m]))

7-21 显示直角数字图形

n = int(input())
for i in range(1,n+1):
    for j in range(1,i+1):
        print(chr(j+64),end='')
    print()

7-22 显示菱形图形

n = int(input())
for i in range(1,n+1,2):
    print('{:^11s}'.format('*'*i))
for i in range(n-2,0,-2):
    print('{:^11s}'.format('*'*i))

7-23 显示Pascal三角形

n = int(input())
print('1 ')
if n>1:
    print("1 1 ")
    add = 0
    i = 3
    lst = [1, 1]
    while(i<n+1):
        lst1 = lst[:]
        lst = [1, 1]
        for j in range(1,i-1):
            add = lst1[j-1]+lst1[j]
            lst.insert(-1,add)
        i += 1
        for k in lst:
            print(k,end=' ')
        print()

你可能感兴趣的:(python,经验分享)