Python编程PTA题解大全——索引
Description:输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
Input:输入仅一行,输入一个以#结束的非空字符串。
Output:输出仅一行,输出转换后的十进制数。题目保证输出在长整型范围内。
Sample Input:±P-xf4±1!#
Sample Output:-3905
str = input() #输入字符串
str2 = '' #str2为删除井号后面字符的字符串
str3 = '' #str3为保存的16进制字符
i = 0 #i为遍历字符时的索引
s = -1 #s由第一个16进制的索引所确定
n = 1 #n表示16进制数的正负
num = 0 #num为最终输出的10进制数
for ch in str:
if ch != '#':
str2 += ch #保存井号之前的字符组成新字符串
else:
break
for ch in str2: #保存16进制的字符组成新字符串
if ord('0') <= ord(ch) <= ord('9') or ord('a') <= ord(ch.lower()) <= ord('f'):
str3 += ch
if s == -1:
s = i #令s为第一个16进制字符的索引,当下一个16进制字符出现,s已经不是-1,所以不会赋新值
i += 1
for i in range(s): #遍历第一个16进制字符之前的字符
if str2[i] == '-': #如果存在负号,那么n=-1
n = -1
break
if str3 != '': #当所输入的字符有16进制字符时,输出相应值,若没有,则输出num默认值0
num = n * int(str3, 16)
print(num)
注:这道题中最容易出错的是最后的输出,一定要考虑若输入的字符串没有16进制字符时,应输出默认值0