IT职业发展训练一(习题参考)-2024
Published:
本库包含作业答案,请确保阅读并完全同意重要声明
访问代码仓库
7-1 判断火车票座位
代码功能
根据用户输入的字符串,判断并输出座位类型(窗口或过道)。
思路
- 读取用户输入的字符串。
- 提取字符串的最后一个字符和前面的数字部分。
- 检查数字是否在1到17之间,字符是否在 “ABCDEF” 范围内。
- 根据字符判断并输出座位类型:
- “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
代码功能
计算并输出一年内每天增长和减少一定比例后的结果。
思路
- 读取用户输入的浮点数 kernel。
- 初始化两个变量 pro 和 fall 为 1.0。
- 循环365次,每次分别按比例增加和减少 pro 和 fall。
- 输出 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位)。
思路
- 读取用户输入的字符串并转换为列表。
- 遍历列表中的每个字符。
- 如果字符是小写字母,则将其转换为加密后的字符。
- 将列表转换回字符串并输出。
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 敏感词过滤
代码功能
过滤用户输入中的敏感词,将敏感词替换为 “*”
思路
- 定义敏感词列表。
- 读取用户输入的字符串。
- 遍历敏感词列表,查找并替换敏感词。
- 输出过滤后的字符串。
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 个税计算器
代码功能
根据用户输入的工资,计算应缴税款和实发工资。
思路
- 读取用户输入的工资。
- 计算应纳税所得额。
- 根据应纳税所得额计算应缴税款。
- 输出应缴税款和实发工资。
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 快乐的数字
代码功能
判断一个数字是否为快乐数字。
思路
- 定义一个函数计算数字各位平方和。
- 在主函数中读取用户输入的数字。
- 循环计算数字各位平方和,最多循环100次。
- 如果结果为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 分类统计字符
代码功能
统计用户输入字符串中的小写字母、大写字母、数字、空格和其他字符的数量。
思路
- 读取用户输入的字符串并转换为列表。
- 初始化计数变量。
- 遍历列表中的每个字符,根据字符类型增加相应的计数。
- 输出各类字符的数量。
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 温度转换异常处理
代码功能
将用户输入的温度值在摄氏度和华氏度之间转换,并处理异常情况。
思路
- 读取用户输入的温度值。
- 根据温度值的最后一个字符判断温度类型并进行转换。
- 使用try-except块处理可能的异常情况。
- 输出转换后的温度值或错误信息。
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地址是否合法。
思路
- 读取用户输入的IP地址并按”.”分割。
- 检查分割后的部分数量是否为4。
- 遍历每个部分,检查其是否为0到255之间的整数。
- 输出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 身份证号校验
代码功能
校验用户输入的身份证号码是否合法。
思路
- 定义一个函数校验身份证号码。
- 在函数中检查身份证号码长度是否为18位。
- 计算校验位并与身份证号码的最后一位进行比较。
- 输出身份证号码是否合法。
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
函数则用于找出在m
到n
范围内的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()
解题思路
这段代码首先定义了两个列表,gpaList
和sorceList
,分别代表成绩等级和对应的绩点。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 = " ")
解题思路
此代码段首先将输入的两个字符串分割成列表l1
和l2
,然后通过两次遍历找出两个列表中不共有的元素,并将它们添加到结果列表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
中,最后打印这些单词。