【PTA-python】第3章-9 字符串转换成十进制整数 (15 分)

分析

初步想法,把字符串通过int(x,16)转为十六进制,判断是不是属于0-15。实际上不可行,因为可以转的必然转成了,不可以转的会报错。

题目

第3章-9 字符串转换成十进制整数 (15 分)

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

解法

通过一个字符串存储所有的16进制字符,通过 if xx in str:判断是否在str内部。
0x不需要,实际上是结果输出规范性不够。
s.find()找到一个字符出现的位置。
部分正确

s=input()
n=len(s)
stand="0123456789abcdefABCDEF"
ss=""
pos=[]
for i in range(n):
    if s[i] in stand:
        ss=ss+s[i]
        pos.append(i)
n1=s.find('-')
n=int(ss,16)#经测试,当ss为空,输出为空
if n1<pos[0]:
    print("{}".format(-n))
else:
    print("{}".format(n))

因此,对于最终输出,要以ss为判断起点。

if ss=="":
	print()
else if n1<pos[0]:
	

正确答案:

实际上,对于pos,可以用s.find(ss[0])来得到第一个十六进制字符的位置。不需要额外的列表存储空间。

s=input()
n=len(s)
stand="0123456789abcdefABCDEF"
ss=""
pos=[]
for i in range(n):
    if s[i] in stand:
        ss=ss+s[i]
        pos.append(i)
n1=s.find('-')
if ss=="":
    print("0")
elif n1<pos[0]:
    print("{}".format(-int(ss,16)))
else:
    print("{}".format(int(ss,16)))
posted @ 2021-04-15 23:25  flybird2008  阅读(8)  评论(0)    收藏  举报  来源