吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1289|回复: 3
收起左侧

[已解决] 【python】寻求更简单的解法

[复制链接]
Paranoid丶 发表于 2021-2-8 21:18
本帖最后由 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

微信截图_20210208212657.png

我的思路

看了可能会影响思路,慎重

我的做法可能有点峰回路转,就是先将输入转为列表,然后按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'))

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

无闻无问 发表于 2021-2-8 22:13
你用eval函数更好…

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Paranoid丶 + 1 + 1 谢谢@Thanks!

查看全部评分

老伙计 发表于 2021-2-8 22:30
本帖最后由 老伙计 于 2021-2-8 22:40 编辑
while True:
    s = input() . strip()
    if s:
        x = s . split()
        v = int(x[0] , 2)
        for i in range(2 , len(x) , 2): 
            if x[i - 1] . lower() == "or" : 
                v |= int(x[i] , 2)
            elif x[i - 1] . lower() == "and" :
                v &= int(x[i] , 2)
        e = bin(v)[2:]
        while len(e) < 5:
            e = '0' + e
        print(e)
    else:
        break
  运行实况:
D:\00.Excise\Python>python x.py
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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Paranoid丶 + 1 + 1 谢谢@Thanks!

查看全部评分

518 发表于 2021-2-8 23:18
无闻无问 发表于 2021-2-8 22:13
你用eval函数更好…

大佬666
Input = input()
while(Input):
    Input = Input.replace('or', '|').replace('and', '&').split(' ')
    for i in range(0, len(Input), 2):
        Input[i] = "0b" + Input[i] + ")"
        Input[0] = "(" + Input[0]
    print(bin(eval(' '.join(Input)))[2:].zfill(5))
    Input = input()

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Paranoid丶 + 1 + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 09:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表