咨询Python代码print('FFFFFFDCBAA'[int(input())//10])的运行原理
字符串索引实现成绩等级映射的原理解析
先看两段实现相同功能的代码:
精简实现
print('FFFFFFDCBAA'[int(input())//10])
等效的条件判断实现(注:原代码存在语法逻辑错误,已修正)
s = int(input())//10 if s == 10 or s == 9: print('A') elif s == 8: print('B') elif s == 7: print('C') elif s == 6: print('D') else: print('F')
二者的对应关系
要搞懂对应逻辑,拆解两个核心部分:
- 输入值处理:
int(input())//10是把输入的0-100分除以10取整,得到s的取值范围是0到10(对应059、6069、...、90~99、100分)。 - 字符串索引映射:Python中字符串是有序字符序列,支持用
[索引]获取对应位置的字符(索引从0开始)。把'FFFFFFDCBAA'的索引与字符对应关系列出来:- 索引0-5:
F(对应s=05,即059分) - 索引6:
D(对应s=6,即60~69分) - 索引7:
C(对应s=7,即70~79分) - 索引8:
B(对应s=8,即80~89分) - 索引9-10:
A(对应s=910,即9099分和100分)
- 索引0-5:
对比条件判断逻辑,这个字符串的索引刚好和分数段的等级一一对应,用索引直接取值就替代了冗长的if-elif-else判断。
为什么字符串可以直接用索引?
在Python里,字符串属于序列类型,和列表、元组一样,内部是有序排列的元素集合。序列类型的核心特性之一就是支持通过整数索引访问单个元素,索引从0开始计数,所以我们可以直接用字符串[索引]的方式获取对应位置的字符,这是Python内置的基础语法特性。
注:原条件判断代码里的
if s==10 or 9是错误写法,9会被当作布尔值True,导致无论s是什么都会进入这个分支;而精简的字符串索引代码是完全正确的实现。
内容的提问来源于stack exchange,提问作者김은주
相关产品推荐
相关产品推荐

