IT职业发展训练一(习题参考)-2024

8 minute read

Published:

本库包含作业答案,请确保阅读并完全同意重要声明

访问代码仓库

7-1 判断火车票座位

代码功能

根据用户输入的字符串,判断并输出座位类型(窗口或过道)。

思路

  1. 读取用户输入的字符串。
  2. 提取字符串的最后一个字符和前面的数字部分。
  3. 检查数字是否在1到17之间,字符是否在 “ABCDEF” 范围内。
  4. 根据字符判断并输出座位类型:
    • “A” 或 “F” 输出 “窗口”
    • “C” 或 “D” 输出 “过道”
    • 其他情况输出 “输入错误”
userInput = str(input())

userChar = userInput[-1]
userNum = int(userInput[:-1])

if userNum < 1 or userNum > 17 or (not userChar in "ABCDEF") :
    print("输入错误")
elif userChar in "AF":
    print("窗口")
elif userChar in "CD":
    print("过道")

7-2 天天向上的力量 III

代码功能

计算并输出一年内每天增长和减少一定比例后的结果。

思路

  1. 读取用户输入的浮点数 kernel。
  2. 初始化两个变量 pro 和 fall 为 1.0。
  3. 循环365次,每次分别按比例增加和减少 pro 和 fall。
  4. 输出 pro、fall 和 pro 与 fall 的比值。
kernel = float(input())

pro = fall = 1.0

for i in range(365):
    pro *= (1+kernel/1000)
    fall *= (1-kernel/1000)
    
print("{:.2f},{:.2f},{:.0f}".format(pro,fall,round(pro/fall)))

7-3 恺撒密码 I

代码功能

将用户输入的字符串中的小写字母进行凯撒加密(每个字母向后移动3位)。

思路

  1. 读取用户输入的字符串并转换为列表。
  2. 遍历列表中的每个字符。
  3. 如果字符是小写字母,则将其转换为加密后的字符。
  4. 将列表转换回字符串并输出。
userInput = list(input())

for i in range(len(userInput)):
    if 'a' <= userInput[i] <= 'z':
        userInput[i] = chr((ord(userInput[i]) - ord('a') + 3 )%26 + ord('a'))
        
print("".join(userInput)) 

7-4 敏感词过滤

代码功能

过滤用户输入中的敏感词,将敏感词替换为 “*”

思路

  1. 定义敏感词列表。
  2. 读取用户输入的字符串。
  3. 遍历敏感词列表,查找并替换敏感词。
  4. 输出过滤后的字符串。
garbage = ["垃圾","陷阱","山寨","内幕","盗版"]
userInput = str(input())

for i in garbage:
    loc = userInput.find(i)
    while(not loc == -1):
        userInput = userInput[0:loc] + "*" + userInput[loc+len(i):]
        loc = userInput.find(i)

print(userInput)

7-5 个税计算器

代码功能

根据用户输入的工资,计算应缴税款和实发工资。

思路

  1. 读取用户输入的工资。
  2. 计算应纳税所得额。
  3. 根据应纳税所得额计算应缴税款。
  4. 输出应缴税款和实发工资。
userInput = float(input())
total = userInput-3500 if userInput-3500 > 0 else 0

tax = 0
if total > 80000 :
    tax = total*0.45-13505
elif total > 55000 :
    tax = total*0.35-5505
elif total > 35000 :
    tax = total*0.3-2755
elif total > 9000 :
    tax = total*0.25-1005
elif total > 4500 :
    tax = total*0.2-555
elif total > 1500 :
    tax = total*0.1-105
else :tax = total * 0.03

print("应缴税款{:.2f}元,实发工资{:.2f}元。".format(tax,userInput-tax))

7-6 快乐的数字

代码功能

判断一个数字是否为快乐数字。

思路

  1. 定义一个函数计算数字各位平方和。
  2. 在主函数中读取用户输入的数字。
  3. 循环计算数字各位平方和,最多循环100次。
  4. 如果结果为1,则输出True,否则输出False。
def cal(num):
    strNum = str(num)
    res = 0
    for i in strNum:
        res += pow(int(i),2)
    return res

def main():
    n = int(input())
    for i in range(100):
        n = cal(n)
        if n == 1: break
        
    if n == 1: print("True")
    else : print("False")
    
main()

7-7 分类统计字符

代码功能

统计用户输入字符串中的小写字母、大写字母、数字、空格和其他字符的数量。

思路

  1. 读取用户输入的字符串并转换为列表。
  2. 初始化计数变量。
  3. 遍历列表中的每个字符,根据字符类型增加相应的计数。
  4. 输出各类字符的数量。
def main():
    userInput = list(input())
    lowLetter = CapLetter = num = blank = other = 0
    for i in userInput:
        if 'a' <= i <= 'z' : lowLetter += 1
        elif 'A' <= i <= 'Z' : CapLetter += 1
        elif '0' <= i <= '9' : num += 1
        elif i == ' ' : blank += 1
        else: other += 1
    
    print(lowLetter,CapLetter,num,blank,other)
    
main()

7-8 温度转换异常处理

代码功能

将用户输入的温度值在摄氏度和华氏度之间转换,并处理异常情况。

思路

  1. 读取用户输入的温度值。
  2. 根据温度值的最后一个字符判断温度类型并进行转换。
  3. 使用try-except块处理可能的异常情况。
  4. 输出转换后的温度值或错误信息。
try:
    a = input()
    if a[-1] in "Ff":
        C = (eval(a[0:-1]) -32)/1.8
        print("{:.2f}C".format(C))
    elif a[-1] in "Cc":
        F = 1.8 * eval(a[0:-1]) + 32
        print("{:.2f}F".format(F))
    else:
        print("输入错误,末位只能是'C','c','F','f'")
except NameError:
    print('试图访问的变量名不存在')
except SyntaxError:
    print('存在语法错误')
except Exception as e:
    print(e)

7-9 判断IP地址合法性

代码功能

判断用户输入的IP地址是否合法。

思路

  1. 读取用户输入的IP地址并按”.”分割。
  2. 检查分割后的部分数量是否为4。
  3. 遍历每个部分,检查其是否为0到255之间的整数。
  4. 输出IP地址是否合法。
IP = input().split(".")
if len(IP) != 4:
    print("No")
    exit()
for i in IP:
    try:
        if(255 < int(i) or 0 > int(i)):
            print("No")
            exit()
    except:
        print("No")
        exit()
print("Yes")

7-10 身份证号校验

代码功能

校验用户输入的身份证号码是否合法。

思路

  1. 定义一个函数校验身份证号码。
  2. 在函数中检查身份证号码长度是否为18位。
  3. 计算校验位并与身份证号码的最后一位进行比较。
  4. 输出身份证号码是否合法。
def check_id(id):
    if len(id) != 18 : return False
    coef = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    checklist = list("10X98765432")
    check = sum(int(id[i])*int(coef[i]) for i in range(17))
    
    return id[-1] == checklist[check%11]

id = input()
if check_id(id) :
    print("身份证号码校验为合法号码!")
else:
    print("身份证校验位错误!")

6-1 使用函数求特殊a串数列和

代码

def fn(a,n):
    res = 0
    for i in range(1,n+1):
        temp = eval(str(a)*i)
        res += temp
    return res

解题思路

此函数fn通过eval函数将数字a重复n次形成的字符串转换为整数,然后计算其数值并累加到结果res中。这种方法适用于计算形如11, 111, 1111等数列的和。

6-2 使用函数输出指定范围内Fibonacci数的个数

代码

fib_list = [1, 1]  

def fib(n):
    if len(fib_list) > n:
        return fib_list[n]
    
    for i in range(len(fib_list), n + 1):
        fib_list.append(fib_list[i - 1] + fib_list[i - 2])
    
    return fib_list[n]

def PrintFN(m, n):
    i = 0
    res = []
    while(fib(i) <= n ):
        if(fib(i) >= m ):
            res.append(fib(i))
        i += 1

    return res

解题思路

fib函数是一个递归函数,用于生成Fibonacci数列,并通过列表fib_list缓存已计算的值。PrintFN函数则用于找出在mn范围内的Fibonacci数,并存储在列表res中。

7-1 质数判断

代码

import math

def isPrime(n):
    if n < 2 : return False
    if n == 2 :return True
    for i in range(2,int(math.sqrt(n))+1):
        if n%i == 0: return False
    return True

num=int(input())
if isPrime(num):
    print('yes')
else:
    print('no')

解题思路

isPrime函数通过检查一个数是否只能被1和它本身整除来判断其是否为质数。它首先排除了小于2的数,然后检查是否为2(唯一的偶数质数),接着使用平方根优化的算法来减少不必要的检查。

7-2 计算三维空间某点距离原点的欧式距离

代码

import math

def distance(x,y,z):
    return math.sqrt(x**2+y**2+z**2)

def main():
    x,y,z = input().split(",")
    d = distance(float(x),float(y),float(z))
    print("{:.2f}".format(d))
    
main()

解题思路

distance函数计算三维空间中点(x, y, z)到原点的欧式距离。main函数从用户获取输入,并调用distance函数计算距离,然后格式化输出结果。

7-3 特殊生日

代码

def check(year, month, day):
    birth = list(str(year * 10000 + month * 100 + day))
    return len(birth) == len(set(birth))

def main(year, month, day):
    while True:
        if check(year, month, day):
            print("小明的生日是{:.0f}年{:02}月{:02}日".format(year, month, day))
            break
        
        day -= 1
        if day == 0:
            month -= 1
            if month == 0:
                month = 12
                year -= 1
            day = 31  

        if year == 1000:
            break

main(2024, 8, 28)

解题思路

check函数用于检查一个日期的所有数字是否都是唯一的。main函数通过递减天数,当天数为0时递减月份,月份为0时递减年份,直到找到符合条件的特殊生日。

7-4 绩点计算

代码

gpaList = ["A" , "A-" , "B+" , "B" , "B-" , "C+" , "C" , "C-" , "D" , "D-" , "F"]
sorceList = [4.0,3.7,3.3,3.0,2.7,2.3,2.0,1.5,1.3,1.0,0]

def debug():
    print(len(gpaList) , len(sorceList))

def main():
    userInput = input()
    userScore = userWeight = 0
        
    while(userInput != "-1"):
        weight = int(input())
        userWeight += weight
        
        if userInput not in gpaList :
            print("data error")
            exit()
        else:
            userScore += sorceList[gpaList.index(userInput)] * weight

        userInput = input()

    print("{:.2f}".format(userScore/userWeight))
    

main()

解题思路

这段代码首先定义了两个列表,gpaListsorceList,分别代表成绩等级和对应的绩点。main函数通过循环接收用户输入的成绩和权重,然后计算加权平均绩点。

7-5 身份证号处理

代码

from datetime import datetime
someday = datetime(2022,10,1)

def main():
    id = input()
    yy = int(id[6:10])
    mm = int(id[10:12])
    dd = int(id[12:14])
    
    age = someday.year - yy
    
    xb = "男" if int(id[16])%2 == 1 else "女"
    
    print("你出生于{:04}年{:02}月{:02}日".format(yy,mm,dd))
    print("你今年{}周岁".format(age))
    print("你的性别为{}".format(xb))

main()

解题思路

main函数通过解析输入的身份证号码来计算年龄和性别。年龄是通过当前年份减去出生年份得到的。性别是根据身份证号码的第17位数字的奇偶性来判断的。

7-6 进制转换

代码

num = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G"]

def getSign(a):
    return "-" if str(a)[0] == "-" else ""

def getString(absA, b):
    if absA == 0:
        return "0"
    res = ""
    while absA != 0:
        res = num[absA % b ] + res
        absA //= b
    return res

a = int(input())
b = int(input())
mark = getSign(a)
bitString = getString(abs(a), b)
print(mark + bitString)

解题思路

这段代码实现了一个简单的进制转换功能。getSign函数用于获取数字的符号,getString函数用于将绝对值的数字转换为给定进制的字符串表示。用户输入一个数字和目标进制,程序输出转换后的字符串。

7-1 重复元素判定 A

代码

def check(l):
    for i in range(len(l)):
        if l[i] in l[i+1:]:
            return True
    return False

str = input()
l = eval(str)
if check(l): 
    print("True")
else :
    print("False")

解题思路

该问题通过遍历列表l,并检查当前元素是否在l[i+1:]中出现,如果出现则返回True,表示存在重复元素。如果遍历结束都没有发现重复元素,则返回False

7-2 列表元素”零”的移动

代码

try:
    def main():
        l = eval(input())
        res = []
        n = 0
        for i in range(len(l)):
            if l[i] != 0:
                res.append(l[i])
            else :
                n += 1  
        for i in range(n):
            res.append(0)
        print(res)
    main()
except:
    print("ERROR")
    exit()

解题思路

此代码段定义了一个main函数,它接受一个列表作为输入,遍历列表,将非零元素添加到结果列表res中,并计算零元素的数量n。然后,将n个零添加到res的末尾,并打印结果。

7-3 第K序元素查找

代码

try :
    def main():
        l = eval(input())
        n = int(input())
        
        l.sort(reverse = True)
        
        print(l[n-1])
        
    main()
    
except:
    exit()

解题思路

该问题定义了一个main函数,它首先接收一个列表和一个整数n作为输入,然后对列表进行降序排序,并打印第n个元素。

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

代码

l1 = input().split(" ")
l2 = input().split(" ")
res = []

for i in l1:
    if not i in l2 :
        res.append(i)
for i in l2:
    if not i in l1 :
        res.append(i)
        
for i in range(len(res)):
    if i == len(res)-1 : print(res[i] , end = "")
    else : print(res[i] , end = " ")

解题思路

此代码段首先将输入的两个字符串分割成列表l1l2,然后通过两次遍历找出两个列表中不共有的元素,并将它们添加到结果列表res中,最后打印出这些元素。

7-5 根据分数线审核考生是否能参加复试(二级样题)

代码

try :
    stand = [55,55,90,90,310]
    def check():
        l = input().split(" ")
        for i in range(len(l)):
            l[i] = int(l[i])
        l.append(sum(l))
        
        for i in range(5):
            if int(l[i]) < stand[i] :
                return False
        return True
            
    def main():
        t = int(input())
        res = 0 
        for i in range(t) :
            if(check()):
                print("YES")
                res += 1
            else:
                print("NO")
        print("Pass: {}".format(res))
            
    main()
except Exception as e:
    print(e)
    exit()

解题思路

此代码段定义了两个函数,check用于检查输入的成绩列表是否满足分数线要求,main用于处理多组成绩数据,并统计满足要求的组数。

7-6 四则运算(用字典实现)

代码

try:
    def main():
        a = float(input())
        f = input()
        b = float(input())
        res = 0
        
        if f == "+" :
            res = a + b
        elif f == "-" :
            res = a - b
        elif f == "*" :
            res = a * b
        elif f == "/" :
            res = a / b

        print("{:.2f}".format(res))
    main()
except :
    print("divided by zero")

解题思路

此代码段定义了一个main函数,它接收两个浮点数和一个运算符,然后根据运算符执行相应的四则运算,并打印格式化后的运算结果。

7-7 字典更新

代码

dict1 = {'小明': '13299887777', '特朗普': '814666888', '普京': '522888666', '吴京': '13999887777'}

name = input()
phone = input()

try :
    dict1[name]
    dict1[name] = phone
except :
    print("数据不存在")

for i in dict1.keys():
    print(i,end = ":")
    print(dict1[i])

解题思路

此代码段首先定义了一个字典dict1,然后通过用户输入更新字典中的电话号码。如果用户输入的名称在字典中不存在,则打印“数据不存在”。

7-8 两数之和-1

代码

l = [int(x) for x in input().split(",")]
tar = int(input())

for i in range(len(l)//2 + 1) :
    if l.count(tar-l[i]) > 0 and l.index(tar-l[i]) != i:
        print(min(i,l.index(tar-l[i])),max(i,l.index(tar-l[i])))
        exit()
print("no answer")

解题思路

此代码段接收一个整数列表和目标整数tar,然后尝试找到列表中两个不同位置的数,它们的和等于tar。如果找到,则打印这两个数的索引;如果没有找到,则打印“no answer”。

7-9 用户登录D

代码

dic1 = {"张三":"123456","李四":"1234567","王五":"password"}

error_time = 0

while error_time < 3:
    username = input()
    userpass = input()

    if username in dic1.keys() and userpass == dic1[username] :
        print("登录成功")
        break
    else :
        print("登录失败")
        error_time += 1

解题思路

此代码段定义了一个用户登录系统,允许用户有三次尝试机会。如果用户名和密码匹配,则打印“登录成功”并退出循环;如果三次尝试都失败,则退出程序。

7-10 单词分组

代码

l1 = input().split()
l2 = input().split()
res = []

l2 = [word.upper() for word in l2]

for i in range(len(l1)) :
    if l1[i].upper() not in l2:
        res.append(l1[i])

print(" ".join(res))

解题思路

此代码段接收两个单词列表,将第二个列表转换为大写形式,然后检查第一个列表中的单词(转换为大写)是否存在于第二个列表中,如果不存在,则添加到结果列表res中,最后打印这些单词。