python题目集,源于学校老师布置在pta上的题目,博主用来复习的
7-1 阶梯电价
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调X元/千瓦时。请编写程序计算电费。
输入格式:
一行中输入某用户的月用电量(单位:千瓦时)和电价上调的X值(单位:元),中间用空格分开。
输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”。
输入样例1:
在这里给出一组输入。例如:
10 0.05
输出样例1:
在这里给出相应的输出。例如:
cost = 5.30
输入样例:
在这里给出一组输入。例如:
100 0.05
输出样例:
在这里给出相应的输出。例如:
cost = 55.50
思路:
按题意模拟,注意最后输出格式,小数点后两位
代码:
x, a = map(float, input().split())
s = 0.0
if x > 50:
s = 50 * 0.53 + (x - 50) * (a+0.53)
print("cost = {:.2f}".format(s))
else:
s = x * 0.53
print("cost = {:.2f}".format(s))
7-2 jmu-python-凯撒密码加密算法
编写一个凯撒密码加密程序,接收用户输入的文本和密钥k,对明文中的字母a-z和字母A-Z替换为其后第k个字母。
输入格式:
接收两行输入,第一行为待加密的明文,第二行为密钥k。
输出格式:
输出加密后的密文。
输入样例:
在这里给出一组输入。例如:
Hello World!
3
输出样例:
在这里给出相应的输出。例如:
Khoor Zruog!
思路:
遍历字符串,判断该字符是否为字母;
如果是字母,使用ord(),将字母转换为ASCII值,再加上密钥值;
强制转换为char类型后,判断是否为字母,因为会出现超过字母最大ASCII值的情况;
如果出现大于最大值的情况,就减去26,再储存进列表。
其余字符原样进入列表最后输出使用join()
代码:
s = input()
x = eval(input())
res = []
for i in s:
if i.isalpha():
temp = ord(i)+x
if chr(temp).isalpha():
res.append(chr(temp))
else:
res.append(chr(temp-26))
else:
res.append(i)
print("".join(res))
7-3 水仙花数(20 分)
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。
例如:153=1×1×1+5×5×5+3×3×3。
本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3≤N≤5)
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
在这里给出一组输入。例如:
3
输出样例:
在这里给出相应的输出。例如:
153
370
371
407
思路:
写出for循环范围,三位数就是100-999,根据n可得出[, )
将num从int类型转换为str类型,再使用for索引下标;或者不断%10,/10,达到提取每一位数字的目的;
最后就是计算和判断,等于就输出
代码:
n = int(input())
for num in range(10**(n-1), 10**n):
res = 0
str_num = str(num)
for i in range(len(str_num)):
x = int(str_num[i])
res += x ** n
if res == num:
print(num)
7-4 求满足条件的斐波那契数
斐波那契数,亦称之为斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……,这个数列从第3项开始,每一项都等于前两项之和。求大于输入数的最小斐波那契数。
输入格式:
在一行输人一个正整数n(n>=10)。
输出格式:
在一行输出大于n的最小斐波那契数。
输入样例:
在这里给出一组输入。例如:
10
输出样例:
在这里给出相应的输出。例如:
13
思路:
while True无限循环,符合条件break退出返回值输出
代码:
def fin(n):
a = 1
b = 1
while True:
s = a + b
a = b
b = s
if s > n:
break
return s
n = int(input())
print(fin(n))
7-5 判断三角矩阵
本题要求编写程序,判断一个给定的方阵是否是三角矩阵。三角矩阵包含上三角矩阵和下三角矩阵两种。
上三角矩阵指主对角线以下的元素都为0的矩阵;下三角矩阵指主对角线以上的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
输入矩阵是三种情况之一(上三角矩阵、下三角矩阵或都不是)。
输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“upper triangular matrix”,如果输入的矩阵是下三角矩阵,输出“lower triangular matrix”,都不是输出“no”。
输入样例:
在这里给出一组输入。例如:
3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
4
1 2 4 0
56 5 7 9
3 4 8 9
0 0 0 0
输出样例:
在这里给出相应的输出。例如:
upper triangular matrix
lower triangular matrix
no
思路:
设置s1, s2分别作为上三角和下三角矩阵判断的标志;
双重for循环遍历矩阵中每个元素;
注意行列的大小,来区别是上三角还是下三角;如果存在矩阵元素不为0, 此三角矩阵标志为False;
代码:
t = int(input())
for i in range(t):
s1, s2 = True, True
n = int(input())
m = []
for j in range(n):
x = input()
m.append([int(num) for num in x.split()])
for row in range(n):
for column in range(n):
if column > row:
if m[row][column]:
s1 = False
elif column < row:
if m[row][column]:
s2 = False
if not s1 and s2:
print("upper triangular matrix")
elif s1 and not s2:
print("lower triangular matrix")
else:
print("no")
7-6 输出全排列
输入整数n(3<=n<=7),编写程序输出1,2,…,n整数的全排列,按字典序输出。
输入格式:
一行输入正整数n。
输出格式:
按字典序输出1到n的全排列。每种排列占一行,数字间无空格。
输入样例:
在这里给出一组输入。例如:
3
输出样例:
在这里给出相应的输出。例如:
123
132
213
231
312
321
思路:
计算全排列有多少种组合;
把每一位数字放进列表,无限循环shuffle()打乱顺序;
if判断是否已在结果列表中,这是一个去重操作;循环的退出条件就是结果列表的长度要等与全排列的所有组合数
最后sorted()按字典序排序,输出
代码:
import random
n = int(input())
num = []
count = 1
for i in range(1, n+1):
count *= i
num.append(str(i))
res = []
while True:
random.shuffle(num)
s = "".join(num)
if not s in res:
res.append(s)
if len(res) == count:
break
for i in sorted(res):
print(i)
7-7 jmu-分段函数l
本题目要求计算以下分段函数的值(x为从键盘输入的一个任意实数):
如果输入非数字,则输出“Input Error!”
输入格式:
在一行中输入一个实数x。
输出格式:
在一行中按”y=result”的格式输出,其中result保留两位小数。
输入样例:
-2
输出样例:
在这里给出相应的输出。例如:
y=3.00
思路:
按题意模拟即可,对于输入非数字的情况可以使用try、except
代码:
try:
x = eval(input())
if x <= -2:
y = (-2) * x - 1
elif -2 < x <= 1:
y = 3
else:
y = 2 * x + 1
print("y=%.2f" % y)
except:
print("Input Error!")