本帖最后由 Paranoid丶 于 2021-2-9 00:03 编辑
新人学python,最近在ZeroJudge上做题,这道题做的人少,上面也没有解题报告,我的做法感觉太麻烦了,抱着学习的心态,想要更多的解法。
已解决,确实eval方便得多,感谢几位大佬提供的思路和代码~
题目
按给定的格式,进行位运算并输出结果,输入均为5位二进制数
注意:按从左到右顺序计算,不考虑运算符优先顺序,看示例就知道了
原题(被墙):d681: BinaryCount
输入输出示例
输入 |
输出 |
10001 or 10000 and 11101 and 01001 |
00001 |
10111 or 10111 or 10010 or 00101 |
10111 |
01000 and 01001 or 10011 and 11101 |
11001 |
10111 and 00011 or 10010 or 11011 |
11011 |
01001 and 10110 or 10010 and 11101 |
10000 |
我的思路
看了可能会影响思路,慎重!
我的做法可能有点峰回路转,就是先将输入转为列表,然后按2的间隔取运算符“and”或“or”,然后从左到右,我是将字符串转为整数,然后取个十百千位这样逐个进行位运算(自信点,看起来应该不乱吧。。、),最后输出结果
我的代码
x=list((input().replace('or','||').replace('and','&&').strip()).split())
x1 = int(x[0])
for n in range(1,len(x),2):
x2 = int(x[n+1])
_sept = 0
for m in range(5):
x1_sept = x1 // 10 ** m % 10
x2_sept = x2 // 10 ** m % 10
if x[n] == '||':
_sept += (x1_sept | x2_sept) * 10 ** m
else:
_sept += (x1_sept & x2_sept) * 10 ** m
x1 = _sept
print(''.join(x),'=',str(x1).rjust(5,'0'))
|