Python编程PTA题解——字符串转换成十进制整数

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伶回合

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值