【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)))
浙公网安备 33010602011771号