银行编程考试题目及答案_第1页
银行编程考试题目及答案_第2页
银行编程考试题目及答案_第3页
银行编程考试题目及答案_第4页
银行编程考试题目及答案_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

银行实用编程考试题目及答案(Python+SQL)说明:本试卷适配银行科技岗、数据岗等需编程能力的职位招录考核,聚焦Python实操、SQL数据处理、银行核心业务编程场景三大模块,满分150分,考试时间120分钟。答案附详细代码解析及业务适配说明,助力精准备考。核心模块:Python基础及银行数据处理、SQL银行业务数据查询与统计、编程在存款/贷款/风控场景的实用应用。第一部分单项选择题(每题3分,共30分)每题只有一个正确答案,将正确选项序号填涂在答题卡对应位置。1.银行数据处理中,需对客户身份证号进行脱敏(保留前6位和后4位,中间用*替换),下列Python代码片段正确的是()A.defdesensitize_id(id_card):returnid_card[:6]+'*'*8+id_card[-4:]B.defdesensitize_id(id_card):returnid_card[6:]+'*'*8+id_card[:4]C.defdesensitize_id(id_card):returnid_card[:6]+'*'*6+id_card[-4:]D.defdesensitize_id(id_card):returnid_card[:4]+'*'*8+id_card[-6:]2.下列SQL语句中,可查询某银行2024年第四季度(10-12月)个人存款总额大于10万元的客户信息(表名:personal_deposit,字段:cust_id、cust_name、deposit_amount、create_month)的是()A.SELECTcust_id,cust_nameFROMpersonal_depositWHEREcreate_monthBETWEEN10AND12ANDdeposit_amount>100000;B.SELECTcust_id,cust_nameSUM(deposit_amount)FROMpersonal_depositWHEREcreate_monthIN(10,11,12)GROUPBYcust_id,cust_nameHAVINGSUM(deposit_amount)>100000;C.SELECTcust_id,cust_nameFROMpersonal_depositWHEREcreate_monthBETWEEN10AND12GROUPBYcust_id,cust_nameHAVINGdeposit_amount>100000;D.SELECTcust_id,cust_nameSUM(deposit_amount)AStotalFROMpersonal_depositWHEREcreate_month>12GROUPBYcust_id,cust_nameHAVINGtotal>100000;3.银行风控中,需计算客户近3个月平均交易金额,若Python中交易金额列表为amounts=[2500.50,3200.00,1800.75,4100.25],下列代码计算结果正确的是()A.sum(amounts[-3:])/3B.sum(amounts[:3])/3C.sum(amounts)/len(amounts)D.max(amounts[-3:])-min(amounts[-3:])4.下列关于Python操作Excel银行流水数据的说法,错误的是()A.可使用pandas库的read_excel()方法读取Excel文件B.to_excel()方法可将处理后的数据写入ExcelC.读取超大流水文件时,需设置chunksize参数分块处理D.pandas无法处理Excel中的合并单元格数据5.某银行贷款表(loan_info)含字段:loan_id、cust_id、loan_amount、loan_rate、loan_term(期限,月),计算客户每月还款额(等额本息),核心公式为:每月还款额=贷款本金×月利率×(1+月利率)^期数÷[(1+月利率)^期数-1],下列SQL函数适配正确的是()A.loan_amount*(loan_rate/12)*POWER(1+loan_rate/12,loan_term)/(POWER(1+loan_rate/12,loan_term)-1)B.loan_amount*loan_rate*POWER(1+loan_rate,loan_term)/(POWER(1+loan_rate,loan_term)-1)C.loan_amount*(loan_rate/12)*(1+loan_rate/12)^loan_term/[(1+loan_rate/12)^loan_term-1]D.loan_amount*loan_rate/12/(1-(1+loan_rate/12)^(-loan_term))6.Python中处理银行日期数据时,需将字符串格式“2024-10-2514:30:00”转换为datetime对象,正确代码是()A.datetime.strptime("2024-10-2514:30:00","%Y-%m-%d%H:%M:%S")B.datetime.parse("2024-10-2514:30:00")C.pd.to_datetime("2024-10-2514:30:00",format="%Y-%m-%d")D.datetime.strftime("2024-10-2514:30:00","%Y-%m-%d%H:%M:%S")7.下列SQL语句中,可删除银行流水表(bank_flow)中3个月前的历史数据(字段:trade_time,datetime类型)的是()A.DELETEFROMbank_flowWHEREtrade_time<DATE_SUB(NOW(),INTERVAL3MONTH);B.DELETEFROMbank_flowWHEREtrade_time<NOW()-3;C.DROPFROMbank_flowWHEREtrade_time<DATE_SUB(NOW(),INTERVAL3MONTH);D.DELETE*FROMbank_flowWHEREtrade_time<DATEADD(NOW(),-3,MONTH);8.银行编程中,需对客户交易数据去重,确保同一笔交易(trade_id唯一)只保留一条记录,Python中使用pandas实现的核心代码是()A.df.drop_duplicates(subset=['trade_id'],keep='first')B.df.duplicated(subset=['trade_id'])C.df.drop(subset=['trade_id'],axis=1)D.df.groupby('trade_id').count()9.某银行客户表(customer)含字段:cust_id、cust_name、gender、age、city,查询各城市男性客户平均年龄,正确SQL语句是()A.SELECTcity,AVG(age)ASavg_ageFROMcustomerWHEREgender='男'GROUPBYcity;B.SELECTcity,AVG(age)ASavg_ageFROMcustomerGROUPBYcity,genderHAVINGgender='男';C.SELECTcity,AVG(age)ASavg_ageFROMcustomerGROUPBYcityWHEREgender='男';D.SELECTcity,SUM(age)/COUNT(age)ASavg_ageFROMcustomerWHEREgender='男'GROUPBYgender;10.下列关于银行编程安全的说法,正确的是()A.可直接将客户密码明文存储在数据库中B.执行SQL查询时,使用字符串拼接方式构造SQL语句效率更高C.需对用户输入的交易金额进行合法性校验(如非负、数值类型)D.银行核心数据处理可使用非加密的HTTP协议传输第二部分多项选择题(每题4分,共20分,多选、少选、错选均不得分)请将正确选项序号填涂在答题卡对应位置。1.银行Python编程中,常用的数据分析与处理库包括()A.pandasB.numpyC.requestsD.matplotlib2.下列属于银行SQL编程核心应用场景的有()A.客户存款余额统计B.贷款逾期数据查询C.交易流水对账D.员工考勤管理3.银行编程中,处理大额交易数据时的优化方案包括()A.Python分块读取数据,避免内存溢出B.SQL查询时建立索引,提升查询效率C.对冗余数据进行清洗,减少数据量D.采用并行计算,提高处理速度4.下列关于银行贷款业务编程的说法,正确的有()A.需实现等额本金、等额本息两种常见还款方式的计算B.需校验贷款金额是否在银行规定的上下限范围内C.逾期罚息计算需结合逾期天数和罚息利率D.贷款期限可随意设置,无需关联客户资质5.银行编程中,客户身份信息脱敏的核心场景包括()A.数据报表展示B.日志记录C.内部培训数据D.监管数据报送第三部分判断题(每题2分,共10分,正确的打“√”,错误的打“×”)请将答案填涂在答题卡对应位置。1.pandas库中,DataFrame的fillna()方法可用于填充银行数据中的缺失值,如用0填充缺失的交易金额。()2.SQL中,UPDATE语句可修改银行客户表中的客户信息,无需加WHERE条件即可批量更新所有客户数据。()3.Python中,使用try-except异常处理机制可捕获银行交易计算中的报错(如除数为0、数据类型错误),避免程序崩溃。()4.银行流水数据中,trade_id字段可作为主键,确保每笔交易记录唯一且不重复。()5.对银行客户交易数据进行排序时,Python的sort_values()方法和SQL的ORDERBY子句均可实现,且默认排序方式为降序。()第四部分编程实操题(每题20分,共60分)请在答题卡指定区域作答,需写出完整代码,标注关键注释,结合银行业务场景说明逻辑;若有多种解法,可任选一种。题目1:Python实操(存款利息计算)某银行定期存款业务规则:1年期年利率1.5%,2年期年利率2.1%,3年期年利率2.75%,5年期年利率3.0%;若提前支取,按活期年利率0.3%计息,利息=本金×利率×存期(年)。请编写Python程序,实现以下功能:1.接收用户输入:本金(正浮点数)、存款期限(1/2/3/5,整数)、是否提前支取(Y/N);2.校验输入合法性(本金>0,期限为指定值,提前支取为Y/N),若输入错误提示用户重新输入;3.计算应付利息及本息合计,保留2位小数;4.输出结果(示例:本金10000.00元,2年期定期存款,未提前支取,应付利息420.00元,本息合计10420.00元)。题目2:SQL实操(客户交易统计)现有银行两张表,表结构如下:客户表(customer):cust_id(客户ID,主键)、cust_name(客户姓名)、cust_phone(客户手机号);交易表(trade):trade_id(交易ID,主键)、cust_id(客户ID,外键)、trade_amount(交易金额,正数为收入,负数为支出)、trade_time(交易时间,datetime)、trade_type(交易类型:1-存款,2-取款,3-转账)。请编写SQL语句,完成以下需求:1.查询2024年10月1日至2024年10月31日期间,有存款交易(trade_type=1)且累计存款金额大于5000元的客户信息(客户ID、姓名、手机号)及累计存款金额;2.按累计存款金额降序排序,若金额相同,按客户ID升序排序。题目3:Python+SQL综合实操(贷款逾期提醒)某银行贷款表(loan_overdue)含字段:loan_id(贷款ID)、cust_id(客户ID)、cust_name(客户姓名)、due_date(应还款日期,字符串格式“2024-10-25”)、overdue_days(逾期天数,整数)、overdue_amount(逾期金额,浮点数)。请编写Python代码,实现以下功能:1.读取该表数据(可模拟DataFrame数据,无需真实数据库连接);2.筛选出逾期天数>30天且逾期金额>1000元的客户,标记为“高风险逾期客户”;3.按逾期金额降序排列,添加“提醒话术”列(示例:尊敬的张三先生/女士,您的贷款已逾期45天,逾期金额5200.00元,请及时还款,避免影响征信);4.将筛选后的高风险客户数据,保存为Excel文件(文件名:high_risk_overdue_202410.xlsx)。第五部分案例分析编程题(30分)请结合银行风控业务场景,编写完整代码并分析逻辑,要求代码可运行、注释清晰,分析部分不少于200字。案例:某银行需对客户交易进行反欺诈初步筛查,筛查规则如下:1.单笔交易金额>50000元;2.同一客户当日交易次数≥5次;3.交易地点与客户常用城市(预设字典:cust_city={'1001':'北京','1002':'上海','1003':'广州','1004':'深圳'})不一致;4.满足以上任意2条及以上,标记为“可疑交易”,需输出客户ID、交易次数、可疑原因。已知交易数据模拟如下(可直接用Python构造DataFrame):trade_data={'cust_id':['1001','1001','1001','1002','1002','1003','1003','1004','1004','1004'],'trade_amount':[55000.00,2000.00,3000.00,60000.00,45000.00,25000.00,30000.00,52000.00,53000.00,10000.00],'trade_city':['北京','北京','天津','北京','上海','深圳','广州','杭州','深圳','深圳'],'trade_date':['2024-10-25','2024-10-25','2024-10-25','2024-10-25','2024-10-25','2024-10-25','2024-10-25','2024-10-25','2024-10-25','2024-10-25']}需求:编写Python代码,实现可疑交易筛查,输出筛查结果,并分析代码在银行实际应用中的优化方向。参考答案及解析第一部分单项选择题答案及解析1.答案:A解析:身份证号共18位,前6位+后4位=10位,中间需替换8位,A项格式正确;B、D项截取位数颠倒,C项中间替换位数不足。2.答案:B解析:需按客户分组统计总存款,HAVING过滤分组后结果,A项未统计总额,C项HAVING直接用原字段错误,D项月份条件错误。3.答案:A解析:近3个月取列表最后3个元素,sum求和后除以3,B项取前3个元素,C项求所有数据平均值,D项求极差,均不符合需求。4.答案:D解析:pandas可通过merge_cells参数处理合并单元格,D项说法错误;其余选项均为pandas操作Excel的正确用法。5.答案:A解析:等额本息公式需转换为月利率(年利率/12),SQL中幂运算用POWER函数,A项公式正确;B项未转换月利率,C项幂运算语法错误,D项公式推导错误。6.答案:A解析:strptime方法用于字符串转datetime,格式符匹配正确;B项parse方法非标准用法,C项格式符缺失时间部分,D项strftime用于datetime转字符串。7.答案:A解析:DATE_SUB函数用于日期减间隔,语法正确;B项日期计算方式错误,C项DROP用于删除表,D项DATEADD函数语法错误。8.答案:A解析:drop_duplicates方法可按指定字段去重,keep='first'保留第一条记录;B项返回重复标记,C项删除字段,D项分组统计,均不符合需求。9.答案:A解析:先筛选男性客户,再按城市分组求平均年龄,逻辑正确;B项分组冗余,C项WHERE在GROUPBY后语法错误,D项分组字段错误。10.答案:C解析:交易金额需校验合法性,避免非法输入,C项正确;A项密码需加密存储,B项字符串拼接易引发SQL注入,D项核心数据需用HTTPS加密传输。第二部分多项选择题答案及解析1.答案:ABD解析:pandas、numpy用于数据处理分析,matplotlib用于可视化;requests用于网络请求,非银行数据分析核心库。2.答案:ABC解析:存款统计、贷款逾期查询、流水对账均为银行SQL核心场景;员工考勤管理属于行政场景,非金融业务核心。3.答案:ABCD解析:分块读取、建立索引、数据清洗、并行计算均为大额交易数据处理的有效优化方案,可提升效率、避免内存问题。4.答案:ABC解析:等额本金和等额本息是主流还款方式,需校验贷款金额范围,逾期罚息按天数和利率计算;D项贷款期限需结合客户资质审核,不可随意设置。5.答案:ABCD解析:报表展示、日志记录、内部培训、监管报送均需对客户身份信息脱敏,保护客户隐私,符合监管要求。第三部分判断题答案及解析1.答案:√解析:fillna()方法可灵活填充缺失值,用0填充交易金额缺失值符合银行数据处理习惯。2.答案:×解析:UPDATE语句无WHERE条件会更新所有记录,易造成数据错误,银行操作中需严格加条件并校验。3.答案:√解析:try-except可捕获运行时异常,确保程序稳定运行,避免因数据错误导致业务中断。4.答案:√解析:trade_id作为主键,可唯一标识每笔交易,避免重复记录,符合银行数据规范。5.答案:×解析:两者默认排序方式均为升序(ASC),降序需手动指定DESC。第四部分编程实操题答案及解析题目1:Python实操(存款利息计算)参考答案代码:python

defcalculate_deposit_interest():

#定义存款利率字典(key:期限,value:年利率)

rate_dict={1:0.015,2:0.021,3:0.0275,5:0.030}

current_rate=0.003#活期年利率

#输入本金并校验(需为正浮点数)

whileTrue:

try:

principal=float(input("请输入存款本金(元):"))

ifprincipal>0:

break

else:

print("本金需大于0,请重新输入!")

exceptValueError:

print("输入格式错误,请输入正浮点数!")

#输入存款期限并校验(仅支持1/2/3/5年)

whileTrue:

try:

term=int(input("请输入存款期限(1/2/3/5年):"))

ifterminrate_dict.keys():

break

else:

print("期限仅支持1/2/3/5年,请重新输入!")

exceptValueError:

print("输入格式错误,请输入整数!")

#输入是否提前支取并校验(仅支持Y/N)

whileTrue:

early_withdraw=input("是否提前支取(Y/N):").upper()

ifearly_withdrawin['Y','N']:

break

else:

print("输入错误,请输入Y或N!")

#计算利息和本息合计(保留2位小数)

ifearly_withdraw=='Y':

#提前支取按活期计息,存期简化按1年计算

interest=round(principal*current_rate*1,2)

else:

#定期存款计息:本金×年利率×期限

interest=round(principal*rate_dict[term]*term,2)

total=round(principal+interest,2)

#输出结果(格式化展示)

status="提前支取"ifearly_withdraw=='Y'else"未提前支取"

print(f"本金{principal:.2f}元,{term}年期定期存款,{status},应付利息{interest:.2f}元,本息合计{total:.2f}元")

#调用函数执行

calculate_deposit_interest()解析:代码通过三层循环实现输入合法性校验,规避非法数据导致程序崩溃;严格遵循银行存款计息规则,区分定期与提前支取场景,结果保留2位小数符合金融数据精度要求。代码结构清晰,注释完整,可直接对接银行存款业务的基础计息需求。题目2:SQL实操(客户交易统计)参考答案SQL语句:sql

SELECT

c.cust_id,

c.cust_name,

c.cust_phone,

SUM(t.trade_amount)AStotal_deposit--累计存款金额

FROM

customerc

INNERJOIN

tradetONc.cust_id=t.cust_id--关联客户表与交易表

WHERE

t.trade_timeBETWEEN'2024-10-0100:00:00'AND'2024-10-3123:59:59'--限定10月交易

ANDt.trade_type=1--筛选存款交易(trade_type=1)

GROUPBY

c.cust_id,c.cust_name,c.cust_phone--按客户分组

HAVING

SUM(t.trade_amount)>5000--过滤累计存款超5000元的客户

ORDERBY

total_depositDESC,c.cust_idASC;--按金额降序、客户ID升序排序解析:采用INNERJOIN关联两张表,确保仅查询有存款交易的客户;WHERE条件精准限定时间范围和交易类型,GROUPBY按客户维度分组统计,HAVING过滤分组后结果(需用聚合函数,不可直接用原字段);排序逻辑完全匹配需求,适配银行月度存款客户统计场景,兼容MySQL、Oracle等主流数据库。题目3:Python+SQL综合实操(贷款逾期提醒)参考答案代码:python

importpandasaspd

#模拟贷款逾期数据(替代数据库读取,实际可通过pandas.read_sql查询)

loan_data={

'loan_id':['L001','L002','L003','L004','L005'],

'cust_id':['C001','C002','C003','C004','C005'],

'cust_name':['张三','李四','王五','赵六','孙七'],

'due_date':['2024-09-01','2024-08-15','2024-10-20','2024-07-05','2024-10-10'],

'overdue_days':[45,28,5,100,35],

'overdue_amount':[5200.00,800.00,3000.00,15000.00,1200.00]

}

df=pd.DataFrame(loan_data)

#筛选高风险逾期客户(逾期天数>30且逾期金额>1000元)

high_risk_df=df[(df['overdue_days']>30)&(df['overdue_amount']>1000)]

#添加个性化提醒话术列

high_risk_df['提醒话术']=high_risk_df.apply(

lambdax:f"尊敬的{x['cust_name']}先生/女士,您的贷款已逾期{x['overdue_days']}天,逾期金额{x['overdue_amount']:.2f}元,请及时还款,避免影响征信",

axis=1#按行应用函数

)

#按逾期金额降序排列

high_risk_df=high_risk_df.sort_values('overdue_amount',ascending=False)

#保存为Excel文件(不保留索引,避免冗余)

high_risk_df.to_excel('high_risk_overdue_202410.xlsx',index=False)

#打印结果预览

print("高风险逾期客户数据已保存至Excel,数据预览如下:")

print(high_risk_df[['cust_id','cust_name','overdue_days','overdue_amount','提醒话术']])解析:代码先模拟数据库数据(实际业务中可通过pandas.read_sql对接数据库),用布尔索引精准筛选高风险客户;通过apply方法生成个性化提醒话术,贴合银行催收场景需求;保存Excel文件时取消索引,确保数据整洁;整体逻辑从数据读取、筛选、处理到输出形成闭环,可直接用于银行逾期客户管理工作。第五部分案例分析编程题答案及解析参考答案代码:python

importpandasaspd

#预设客户常用城市字典(key:客户ID,value:常用城市)

cust_city={'1001':'北京','1002':'上海','1003':'广州','1004':'深圳'}

#构造交易数据(模拟从数据库获取的当日交易记录)

trade_data={

'cust_id':['1001','1001','1001','1002','1002','1003','1003','1004','1004','1004'],

'trade_amount':[55000.00,2000.00,3000.00,60000.00,45000.00,25000.00,30000.00,52000.00,53000.00,10000.00],

'trade_city':['北京','北京','天津','北京','上海','深圳','广州','杭州','深圳','深圳'],

'trade_date':['2024-10-25']*10#当日交易,简化赋值

}

df=pd.DataFrame(trade_data)

#步骤1:统计同一客户当日交易次数

cust_trade_count=df.groupby('cust_id')['trade_date'].count().reset_index(name='trade_count')

df=pd.merge(df,cust_trade_count,on='cust_id')#合并交易次数至原数据

#步骤2:逐条判断是否触发筛查规则

df['rule1']=df['trade_amount']>50000#规则1:单笔大额交易(>5万元)

df['rule2']=df['trade_count']>=5#规则2:当日交易次数过多(≥5次)

#规则3:交易地点与常用城市不一致

df['rule3']=df.apply(lambdax:x['trade

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论