PTA python 习题及代码实例

PTA python 习题及代码实例,第1张

PTA python 习题及代码实例

1.输入一个人名,按照要求给出回应。

name = input()
print(name + "同学,人生苦短,我学python")
print(name[0:1] + "大侠,学好python,走遍天下也不怕")
print(name[1:len(name)] + "小盆友,学好python,你最帅")

2.按照1美元=6人民币的汇率编写一个美元和人民币的双向兑换程序

money = input()
number = float(money[1:len(money)])
if money.startswith("R"):
    print("$%.2f" % (number / 6.0))
elif money.startswith("$"):
    print("R%.2f" % (number * 6.0))

3.输入一个数值表示圆的半径,求相应圆的面积。圆周率要求使用math库中的pi常量。

import math
R = float(input())
print("%.2f" % (math.pi * pow(R, 2)))

4.本题要求实现一个计算m~n(m

def sum(m,n):
  s=0
  for i in range(m,n+1):
     s=s+i
  return s

5,本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:

f(n)=f(n−2)+f(n−1) (n≥3),其中f(1)=1,f(2)=1。
def f(n):
    if n == 1 or n == 2:
        return 1
    s=f(n - 1) + f(n - 2)
    return s

6.企业根据利润提成发放奖金问题。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,
可提成7.5%; 20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%; 高于100万元时,超过100万元的部分按1%提成。从键盘输入当月利润,求应发放奖金总数?

def money(num):
    if num<100000 and num>=0:
        return num*0.1
    elif num<200000 and num>= 100000:
        return 100000*0.1+(num-100000)*0.075
    elif num<400000 and num >=200000:
        return 100000*0.1+100000*0.075+(num-200000)*0.05
    elif num<600000 and num>=400000:
        return 100000*0.1+100000*0.075+200000*0.05+(num-400000)*0.03
    elif num<1000000 and num>=600000:
        return 100000*0.1+100000*0.075+200000*0.08+(num-600000)*0.015
    elif num>=1000000:
        return 39500+(num-1000000)*0.01
    else:
        return 0
num=eval(input())
print(money(num))

输入年、月、日,要求输出该年份的元旦到该日期总共经过了多少天。
Leap=(31,29,31,30,31,30,31,31,30,31,30,31)
DisLeap=(31,28,31,30,31,30,31,31,30,31,30,31)
result=[]
def dayNum(num):
    for i in range(num):
        date = []
        str1 = input()
        date = str1.split(' ')
        try:
            year = int(date[0])
            month = int(date[1])
            day = int(date[2])
            if year%400==0 or year%4==0 and year%100!=0:
                if month<=12 and month>0 and day>0 and day<=Leap[month-1]:
                    res = 0
                    for j in range(month-1):
                        res+=Leap[j]
                    res+=day
                    result.append("Totaldays = "+str(res))
                else:
                    result.append("ErrorInput") 
            else:
                if month<=12 and month>0 and day>0 and day<=DisLeap[month-1]:
                    res = 0
                    for j in range(month-1):
                        res+=DisLeap[j]
                    res+=day
                    result.append("Totaldays = "+str(res))
                else:
                    result.append("ErrorInput") 
        except:
            result.append("ErrorInput")
        
    for k in result:
        print(k)
n = eval(input())
if n>=0:
    dayNum(n)

7.温度刻画存在不同体系,摄氏度以1标准大气压下水的结冰点为0度,沸点为100度,将温度进行等分刻画。
华氏度以1标准大气压下水的结冰点为32度,沸点为212度,将温度进行等分刻画。

c = input()
cType = c[-1]
if cType == 'F' or cType == 'f':
    print("%.2fC" % ((float(c[0 : -1]) - 32) / 1.8))
elif cType == 'C' or cType == 'c':
    print("%.2fF" % (float(c[0 : -1]) * 1.8 + 32))
else:
    print("Error")

8.编程序实现功能:输入一个整数,判断其是否能同时被3、5、7整除。能被整除则输出“Yes”,否则, 输出“No”。

def  f(n):
    n!=0
    if (n%7==0|n%3==0|n%5==0):
        print("Yes")
    else:
        print("No")
n=int(input())
f(n)

9,计算下列分段函数f(x)的值:

def format(x):
    if(x==0):
        print("f(0.0)=0.000")
    else:
        print("f({:.2f})={:.3f}".format(x,1/x))
x=float(input())
format(x)

10.本题目要求读入一个字符串,统计字符串中字母、数字、空格、其它字符的个数。

letter = 0
digits = 0
spaces = 0
other = 0
str0 = input()
for i in str0:
    if i.isalpha():
        letter+=1
    elif i.isdigit():
        digits+=1
    elif i.isspace():
        spaces+=1
    else:
        other+=1
print('letters=%d,digits=%d,spaces=%d,others=%d'%(letter,digits,spaces,other))

11.输入一个字符串,把最左边的10个不重复的字符(大小写算不同字符)挑选出来。 如不重复的字符不到10个,则按实际数目输出。

a=input()
s = ""
for i in a:
    if i not in s:
        if(len(s)<10):
               s+=i
print(s)

12.输入一个整数列表,找出整数列表中最大元素的下标,如果最大元素的个数超过1,那么请打印输出所有的下标。

a = input("")
if a=="":
    print()
else:
    li = a.split(",")
    if len(li)==1:
        print(0)
    else:
        li2 = []
        for i in li:
            li2.append(int(i))
        li2.sort()
        maxInt = li2[len(li2)-1]
        for i in range(0,len(li)):
            if int(li[i]) == maxInt:
                print(i)

13.输入一个列表,删除其中的重复值,再输出。s = input("")

li = eval(s)
li2=[ele for ele in reversed(li)]
li = []
for i in li2:
    if i not in li:
        li.insert(0,i)
print(li)

14.统计字符串列表中每个字母出现的次数。
编写程序,使用eval()函数读入一个仅包含字符串对象的列表,然后统计该列表中每个字母出现的次数。 列表中的字符串对象仅包含小写英文字母。

s = input('')
li = eval(s)
dict = {}
for i in li:
    for j in i:
        if j not in dict.keys():
            dict[j] = 1
        else:
            dict[j] = dict[j] + 1
for i in sorted(dict):
    print(i, dict[i], sep=',')

15.小明在帮老师处理数据,这些数据的第一行是n,代表有n行整数成绩需要统计。
接着连续输入n个成绩,如果中途输入错误(非整数)提示’Error! Reinput’,
并输出错误的数据。然后重新输入,直到输入n个正确的成绩才退出。如果整个
输入过程中没有错误数据,提示’All OK’。最后输出所有学生的平均值,保留两
位小 数。

n = int(input())
num = n
sum_grade = 0
flag = True
err_grade = ""
err_list = []
while n:
    try:
        err_grade = input()
        grade = int(err_grade)
        sum_grade += grade
        n = n-1
    except:
        flag = False
        err_list.append(err_grade)
if flag:
    print("All OK")
else:
    for grade in err_list:
        print("Error for data %s! Reinput" % grade)
print("avg grade = %.2f" % (sum_grade/num))

16.输入一个非空字符串和一个索引值,输出字符串中,该索引值对应的字符。若发现异常,则输出“输入下标有误”

s = input("")
try:
    i = int(input())
except:
    print("输入下标有误")
else:
    try:
        print(s[i])
    except:
        print("输入下标有误")

17,所谓“往返跑方阵”,是指对任意给定的n,将1到n×n的整数依次填写到n×n的方阵中,从右上角第1个格子开始,向下填充;倒底后,往左移动一列,改变方向,向上填充;
到最上面一行后,再向左一列,改变方向,向下填充;.…… 以此类推,直到将n×n的方阵填满。本题要求构造这样的“往返跑方阵”。

def f(n):
    list1 = []
    for i in range(n):
        li = []
        list1.append(li)
    a = 1
    lie1 = n
    while lie1>0:
        if n%2!=0:
            if lie1 % 2 != 0:
                for j in range(n):
                    list1[j].insert(0, a)
                    a += 1
            else:
                for j in range(n):
                    list1[0 - j - 1].insert(0, a)
                    a += 1
        else:
            if lie1 % 2 == 0:
                for j in range(n):
                    list1[j].insert(0, a)
                    a += 1
            else:
                for j in range(n):
                    list1[0 - j - 1].insert(0, a)
                    a += 1
        lie1-=1
    return list1

nn = int(input(""))
for i in f(nn):
    for j in i:
        print("%3d" % j, end="")
    print()

供学习参考,如有优化代码请评论区分享

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

原文地址: http://outofmemory.cn/zaji/5593800.html

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

发表评论

登录后才能评论

评论列表(0条)

保存