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

题目要求

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

输入格式

输入在一行中给出一个以#结束的非空字符串。

输出格式

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例

+-P-xf4+-1!#

输出样例

-3905

代码理解

代码的核心可以分为两步:
A、提取输入中的合法字符
B、转换进制

A步需要注意:
1、只录入#前的字符
2、小写a~f也被包含在其中,需要转化为大写

B步需要注意:
1、int(x, base=10)中,当base传入位置实参后,x变量类型需要为字符串而不能是数字
2、int(x, base=10)中x不能为空,所以当初始输入在#前没有合法字符时不能调用int(),而需要直接输出0

代码+注释

# 接收初始输入st
st = input()

# 建立空字符串s储存符合范围的字符
s = ''

# 截取st井号#前的部分录入s
for i in st:
	if i == '#':
		break    
	s += i
	
# 定义空字符串c储存合法字符,定义空字符串a储存负号‘-’
c, a = '', ''

# 定义negative来标志合法字符前是否存在负号‘-’
negative = True

# 遍历s
# 在合法字符前存在负号则储存进a
# i为合法字符则储存进c(由于不分大小写,我们需要将小写a~f转换为大写然后存储)
for i in s:
	if i == '-' and negative:
		a = '-'
		negative = False
	if '0' <= i <= '9' or 'A' <= i <='F':
		c += i
		negative = False
	if 'a' <= i <= 'f':
		c += i.upper()
		negative = False
		
# 判断c中是否存在合法字符,存在则按照约定规则打印,不存在则输出0
if c != '':
	print('{0}{1}'.format(a, int(c, 16)))
else:
	print(0)

代码结果

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

你可能感兴趣的:(python,程序设计)