在 Python 中实现 XOR

     2023-05-08     150

关键词:

【中文标题】在 Python 中实现 XOR【英文标题】:Implementing XOR in Python 【发布时间】:2016-01-01 00:12:43 【问题描述】:

所以我正在尝试在 Python 中实现逻辑运算符 XOR。我首先询问用户他们想要测试多少个输入(4 - TT、TF、FT、FF)。我知道 XOR 计算 T&T->F、T&F->T、F&T->T、F&F->F。

我将作为用户输入的第一个布尔值存储在变量 P 中作为字符串。然后我转换为布尔值。就这样……

    P = input("Enter boolean number 1: ")
    P = bool(P)

我不会立即将输入转换为 bool,因为任何非空字符串都会导致 True,无论字符串是否为“False”。

我已经为上述四种可能的条件建立了 XOR 真值表作为四个单独的 if 语句,然后只打印(“P xor Q is False”或“P xor Q is True”),这一切都取决于真值表异或。

所有这些逻辑都在一个 for 循环中,从用户输入他们想要输入的数量开始,从 1 倒数到 0。

当我运行这个程序时,无论用户输入什么,打印语句都是“P xor Q is False”。

我就是不知道为什么!我觉得解决方案很简单,这让我很困扰,所以任何正确方向的帮助都将不胜感激,谢谢!

这是我的代码:

numOfInputs = int(input("Enter the number of inputs: "))

for num in range(numOfInputs, 0, -1):
    print()

    P = input("Enter the first boolean: ")
    P = bool(P)
    Q = input("Enter the second boolean: ")
    Q = bool(Q)

    print()

    if(P == True and Q == True):
        print("P xor Q is False")
    if(P == True and Q == False):
        print("P xor Q is True")
    if(P == False and Q == True):
        print("P xor Q is True")
    if(P == False and Q == False):
        print("P xor Q is False")

【问题讨论】:

“我不会将输入转换为 bool” - 但你可以,在 P = bool(P) 行中。为什么你认为你没有? 那还是和 P = bool(input(...)) 一样吗?我有点想,如果立即强制转换,除了空字符串之外的任何内容都会被评估为“True”。 任何非空字符串都将作为布尔值转换为 True。如果您将 bool 调用移至另一行,这不会改变。 有道理。那我应该如何改变我的方法呢? @PaulGowder 我已经使用literal_eval 发布了一个答案,这是安全的。使用eval 确实不是一个好主意。 【参考方案1】:

TF 都是“真”,因为任何非空字符串在 Python 中都是“真”。这或许可以解释为什么您的循环没有按预期工作。

第一步是修复你的选角:

p = input('Enter a boolean value, True or False: ')
if p.lower() == 'false':
   p = False
q = input('Enter the second boolean, True or False: ')
if q.lower() == 'false':
   q = False

现在,异或只是两个值不相等时:

if p != q:
   print('p xor q is true')
else:
   print('p xor q is false')

【讨论】:

刚刚也想通了。作品!我将如何仅使用逻辑运算符(and/not/or)来实现它,所以没有等号或不等号? @S.Tolm 您的比较代码很好,只是您的输入需要修复。 这里没有p = Trueq = True 案例。无论如何,它碰巧大部分都可以工作,但它非常脆弱。【参考方案2】:

如果您对 False 使用空字符串,您的代码可以正常工作,即只需按 return

空字符串是bool 转换为False 的唯一字符串值:

>>> bool('False')
True

>>> bool('0')
True

>>> bool('')
False

见the documentation。

如果您不使用字符串,Python 认为 0[] 都等同于 False,即零容器或空容器。大多数其他的东西都是True

如果您想使用其中任何一个作为输入,您可以使用ast.literal_eval 将字符串值转换为实际类型,然后转换为布尔值以获得TrueFalse

>>> import ast.literal_eval
>>> value = literal_eval('False')
>>> type(value)
bool
>>> value
False

>>> value = literal_eval('0')
>>> type(value)
int
>>> bool(value)
False

您的布尔比较可以简化,例如:

if(P == True and Q == False):
    print("P xor Q is True")

可能是:

if P and not Q:
    print("P xor Q is True")

【讨论】:

cocos2d-x游戏《雷电大战》开源啦!要源码要资源快快来~~

写在前面的话:这是笔者开发的第二个小游戏《雷电大战》,之前就过这个游戏和《赵云要格斗》一样,最终将会开源。由于自己的一些个人原因。这个游戏还没有完成,但是许多网友都过来寻求代码或资源,本着开源的精神,... 查看详情

androidxml动画初步解析(activity界面之间跳转demo)

上一篇文章android简单地设置Activity界面的跳转动画讲了简单的activity界面之间的跳转,并且使用的是android内置的一些动画,此章就小提一下如何自己写一些动画来进行跳转。按例,还是上一下效果:(结尾附上源码)  &nb... 查看详情

javascript高级程序设计四

新的一天开始,让我们伴随者轻快的心情,开始今天的笔记1、操作符:  (1): *、/、-在ECMAScript中操作的时候,如果遇到有一个操作值不是数值型(Number),那么就会在后台调用number()方法,将其转化成Number   (2):+... 查看详情

alpha叠加

学习过程中的记录,供参考。foruok原创,转载请保留出处。欢迎关注微信订阅号“程序视界”。Alpha值的含义对于RGBA(或BGRA)数据,Alpha通道中存储的Alpha值,实际上应该是Opaque值,即不透明度。当Alpha值为255时,表示不透明;Al... 查看详情

使用strace工具跟踪系统调用和信号

 使用strace来执行程序,它会记录程序执行过程中调用,接收到的信号,通过查看记录结果,就可以知道程序打开哪些文件,进行哪些读写,映射哪些内存,向系统申请多少内存等信息 strace移植下载strace源码:strace-4.5.15.t... 查看详情

sarscape5.2哨兵1a数据的读取

SARscape5.2支持哨兵1A数据的读取,支持的数据类型有:SMSLC——条带模式的斜距单视复数产品IWSLC——干涉宽幅模式(TOPSMode)的斜距单视复数产品EWSLC——超宽幅模式(TOPSMode)的斜距单视复数产品SMGRD——... 查看详情

蓝桥杯历届试题错误票据(水)

 历届试题错误票据 时间限制:1.0s 内存限制:256.0MB      问题描写叙述某涉密单位下发了某种票据。并要在年终所有收回。每张票据有唯一的ID号。全年全部票据的ID号是连续的。但ID的開始数码... 查看详情

nsfilemanager的应用

单例,是在一个文件中只创建一次就能够全部一起共享,多创建的地址是相同的NSFileManager*manager=[NSFileManagerdefaultManager];是一个单例 NSFileManager*manager=[NSFileManagerdefaultManager];       //判断一个文件 查看详情

nodejs开发微信公众号微信网页授权

微信的网页授权指的是在微信公众号中访问第三方网页时获取用户地理、个人等信息的权限。对于开发了自己的网页app应用时,获取个人的信息非常重要。上篇博客讲到了注册时可以获取用户的信息,很多人会问为什么还需要网... 查看详情

面向对象七大基本设计原则,今天我们就来谈谈

面向对象的七大基本原则:原则一单一职责原则单一职责原则(SRP:Singleresponsibilityprinciple)又称单一功能原则核心:解耦和增强内聚性(高内聚,低耦合)。原则二:里氏替换原则(LSP:Liskov Substitution Principle)核心:... 查看详情

一个js编写全选弹出对话框ajax-json的案例

  js功能有:全选、弹出对话框、使用json传输ajax数据;不想在写多余的文字了,直接上代码:<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@taglibprefix=" 查看详情

iosbug日志-tableviewcell复用

试了三种方法列在下面新建cell文件包括.h.m.xib 然后在xib文件加上一个标签,目的是复用这个cell 一,在要调用的listcell中初始化一个类方法//+(ListCell*)cellwithTableView:(UITableView*)tablaeView;  //+(ListCell*)cellwithTableView:(UITabl... 查看详情

双向链表<一>

摘要:摘要:这里用的递归法,采用两种版本,一种是C语言,一种是C++;但是,用C语言没有“引用”,所以采用的是指向指针的指针;而C++具备“引用”,所以直接用&引用,简洁;先看C++的代码;BiTreeCreateBiTree(BiTr... 查看详情

js事件绑定和jq的事件绑定的几种方式

JS事件绑定的方式:1、内嵌法:<input type="button" onclick="test()" value="click me"/>  或者是多事件绑定:<input type="button" onclick="javascript:test();test1();" value 查看详情

基于html5的多张图片上传

图片上传之前也有写过demo,不过是单张上传的,最近有个业务需求是需要多张上传的,于是乎从新改写了一下HTML结构:<divclass="container"><label>请选择一个图像文件:</label><inputtype="file"id="file_input"multiple/></div&... 查看详情

html中让表单input等文本框为只读不可编辑的方法

 HTML中让表单input等文本框为只读不可编辑的方法 有时候,我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如使inputtext的内容,中国两个字不可以修改 有时候,我们希望表单中的文本框是只读的,让... 查看详情

stackoverflow2016最新架构探秘

这篇文章主要揭秘StackOverflow截止到2016年的技术架构。  首先给出一个直观的数据,让大家有个初步的印象。   相比于2013年11月,StackOverflow在2016年02月统计数据有较大变化,下面给出2016年02月09号一天的数据,如下:HTTP... 查看详情

poj3041匈牙利算法模板题

一开始预习是百度的算法然后学习了一下然后找到了学长的ppt又学习了一下..发现..居然不一样...找了模板题试了试..百度的不好用反正就是wa了..果然还是应当跟着学长混..图两边的点分别是行数和列数每有一个点就让所处行列连... 查看详情