PTA Python程序设计-03

PTA Python程序设计-03,第1张

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可得出[ 1 0 n − 1 10^{n-1} 10n1, 1 0 n 10^n 10n)

将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!")

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/870582.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存