【问题标题】:Python Logic Operators BinaryPython 逻辑运算符二进制
【发布时间】:2021-08-21 13:28:28
【问题描述】:

我对编程完全陌生。 如何在不使用位运算符的情况下编写 Python 脚本来执行以下操作,只允许使用逻辑和或运算符。提前致谢! 我被卡住了。

& 和 如果两个对应位都为 1,则将结果位设置为 1。 例如。 1010 & 1100 是 1000

|或者 如果两个对应位之一为 1,则将结果位设置为 1。 例如 1010 | 1100 是 1110

^ 异或 仅当相应位之一为 1 时才将结果位设置为 1。 例如。 1010 ^ 1100 是 0110

输出: 输入二进制表达式:110110 & 110011 结果:110010

expr = input('Enter binary expression:  ')
n1, op, n2 = expr.split()
n1 = int(n1)
n2 = int(n2)

enter image description here

【问题讨论】:

  • 这个网站不是为了给你做功课。但这里有一些提示:1)不要使用int转换整数,需要单独转换每个数字。 2)查找函数zip

标签: python-3.x


【解决方案1】:

如果您不允许使用按位运算符,那么最直接的方法可能是一点一点地自己进行比较。如果我们将它们表示为字符串,这是最容易做到的

我们甚至不需要将输入转换为整数(这可以通过调用 int(n1, 2) 来指定 base-2 而不是 base-10),因为它们已经以二进制字符串的形式给出。如果它们以 base-10 给出,我们可以将它们作为整数读取,然后使用内置的 bin() 方法将它们表示为二进制字符串。

由于有一个方法bin()可以将整数表示为二进制字符串(以字符0b开头,我们可以通过将它们切掉来删除),我们可以使用它,比较字符串中的数字,然后将结果转换回整数。

expr = input('Enter binary expression:  ')  # sample: enter "110110 & 110011"
n1, op, n2 = expr.split()
# -------------
result = ''
for (c1, c2) in zip(n1, n2):
    next_bit = ""
    if op == "&":
        next_bit = "1" if (c1 == "1" and c2 == "1") else "0"
    elif op == "|":
        next_bit = "1" if (c1 == "1" or c2 == "1") else "0"
    elif op == "^":
        next_bit = "1" if (c1 != c2) else "0"
    result += next_bit

print(result)
# 110010

这不是最有效的方法(您可以进行一些复杂的迭代算术并将数字视为整数,而不是将它们视为字符串并逐位比较),但这可能是最直接和最容易理解的,尤其是考虑到数字是如何在这里输入的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多