是否有一个函数,我可以给一个数组,如果提供的函数为所有函数返回true,它将返回true?
theFunction(array(1,2,3) , 'is_numeric') //true
theFunction(array(1,"b",3) , 'is_numeric') //false
Run Code Online (Sandbox Code Playgroud) 我正在为我们在办公室使用的另一件软件写一个插件,允许用户审核他们正在处理的文件.我试图让我的工具尽可能灵活.我的想法是用户将生成一个节点树,其中可以包含其他节点作为子节点.在树的底部,节点将是根据用户正在使用的文件而失败或通过的条件节点.此外,用户可以将每个节点设置为特定的逻辑类型,包括AND,OR,NOR,NAND .
AND: All sub nodes must pass
OR: At least one sub node must pass
NAND: At least one sub node must fail
NOR: All sub nodes must fail
Run Code Online (Sandbox Code Playgroud)
我现在要弄清楚的是,如果我有一些由节点或子节点返回的bool集合,那么将上述逻辑类型应用于此列表的最有效方法是什么?我手头开始编写foreach
语句,但似乎二进制逻辑对于计算机工作的方式来说是如此根本,因为它将是一种更好,更快,更少迭代的方法.
我需要将第二个变量的值分配给第三个变量,如果第一个变量是(bool)false或未定义,则需要使用第二个变量的值.
我通常使用三元表示法这样做:
$foobar = ($some_prefix_and_some_variable_name) ? $some_prefix_and_some_variable_name : $bar ;
Run Code Online (Sandbox Code Playgroud)
但是,如果$ foo变量名称很长,有时这不是很漂亮,因为它需要在这种表示法中重复.
我现在的问题是,使用这种表示法是否同样好:
$foobar = $some_prefix_and_some_variable_name OR $foobar = $bar;
Run Code Online (Sandbox Code Playgroud)
这个符号可以与三元版本互换吗?
php boolean-logic ternary-operator variable-assignment assignment-operator
在我的项目中有一个Logic evaluation
部分,它将输入作为包含logical expressions
(true/false
)的字符串.
我想评估此字符串并返回最终的布尔值.
string Logic="1&0|1&(0&1)"
//string Logic="true AND false OR true AND (false AND true)"
Run Code Online (Sandbox Code Playgroud)
这将是我的Logic
.长度可能会增加.
有没有办法评估这个表达式LINQ / Dynamic LINQ
?
我有一些Python代码,我正在尝试优化.它处理两个相同大小的2D阵列(它们的大小可以是任意的).第一个数组充满了任意布尔值,第二个数组充满了0到1之间的半随机数.
我要做的是根据修饰符数组中的值更改二进制值.这是一个工作正常的代码片段,并封装了我在两个for循环中尝试做的事情:
import numpy as np
xdim = 3
ydim = 4
binaries = np.greater(np.random.rand(xdim,ydim), 0.5)
modifier = np.random.rand(xdim,ydim)
for i in range(binaries.shape[0]):
for j in range(binaries.shape[1]):
if np.greater(modifier[i,j], 0.2):
binaries[i,j] = False
Run Code Online (Sandbox Code Playgroud)
我的问题:有更好的(或更合适的)方法吗?我宁愿使用切片而不是嵌套for循环,但比较和布尔逻辑让我觉得这可能是最好的方法.
在javascript中,代字号运算符是按位NOT或补码,为什么以下不能按预期工作?
var x = true;
var tildeX = ~x;
var exclX = !x;
tildeX == exclX; // returns false
Run Code Online (Sandbox Code Playgroud) 我知道只有当它通过任何方式评估为真时,语句才有效OR/AND
.
我不明白为什么计算机至少在C++上无法理解这一点.
#include <stdio.h>
#include <stdbool.h>
int main(void) {
// your code goes here
if(false && false)
printf("true\n");
else
printf("false\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:false
我知道,看着那段代码,你很快就会看到2个谬误,这将是错误的.
但是,如果他们两个都作为一个AND运算符一起变得虚假,那会怎样呢?不试图在NOT
这里的操作员只是不明白为什么2个错误的检查在一起,两个给出相同的输出不是真的?
现在我写了更多关于这个似乎会打破很多程序嘿嘿...
我想我只是想知道一种不同的思维方式,一瞬间,我不明白为什么它不会那样工作.
编辑:yaa我想我会收到一堆downvotes我想这只是简单的计算机是如何构建的,他们没有真正的逻辑
编辑2:
好的,我会举个例子
假设您必须将一堆数据包组合在一起,而不是垃圾邮件过多的小数据包.但是有一个问题,如果那些小数据包太大你根本无法将它们组合起来就像发送它们一样.但是,假设您已经开始组合数据包,并且在此过程中会产生一个大数据包,因此您无法继续进行任何进一步的操作,您必须在此处退出并发送当前的组合数据包.
问题是什么时候突破列表中的数据包循环..
我试图避免有2个循环来检查高级列表,知道该怎么做尝试使其尽可能优化对我来说非常重要.
所以我进入了一个项目
if(already building a combined packet boolean AND current_packet->size > MAX_COMBINE_PACKET)
break;
else
//don't try to combine the packets just send normally.
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下我还没有开始组合数据包,数据包大小可以适合组合数据包.
但是在这种情况下,如果数据包已经开始组合或者尚未开始组合但是仍然可以组合它并不会尝试将它组合起来并不重要.
我想我需要把它分成更多if语句.
编辑3:真实的代码
/* pull packets from packet list into buf, and erase/free them */
static int pull_packets(packet_list_t *l, …
Run Code Online (Sandbox Code Playgroud) 我不是一个经验丰富的程序员,我的代码有问题,我认为这是我的逻辑错误,但我无法在http://anh.cs.luc.edu/python/hands-on/找到答案3.1/handsonHtml/whilestatements.html.我想要的是检查串行设备是否被锁定,并且"它被锁定"和"它未被锁定"的条件之间的不同之处,,,,
在于该行中有4个逗号包含GPGGA
字母.所以我希望我的代码启动,如果没有,,,,,
但我想我的循环是错误的.任何建议将不胜感激.提前致谢.
import serial
import time
import subprocess
file = open("/home/pi/allofthedatacollected.csv", "w") #"w" will be "a" later
file.write('\n')
while True:
ser = serial.Serial("/dev/ttyUSB0", 4800, timeout =1)
checking = ser.readline();
if checking.find(",,,,"):
print "not locked yet"
True
else:
False
print "locked and loaded"
Run Code Online (Sandbox Code Playgroud)
...
以下代码返回人员的BMI风险 - 低,中或高.它工作得很好.但是,我想知道是否有其他方法可以解决它而不使用太多的返回语句.
有没有其他方法,Pythonic或逻辑上让它更短?
def bmi_risk(bmi, age):
''' function returning bmi's risk on human '''
if bmi < 22 and age < 45:
return "Low"
if bmi < 22 and age >= 45:
return "Medium"
if bmi >= 22 and age < 45:
return "Medium"
if bmi >= 22 and age >= 45:
return "High"
Run Code Online (Sandbox Code Playgroud) 我无法在Python中生成示例,其中显示了布尔运算符优先级规则以及短路评估.我可以用以下方式显示运算符优先级
print(1 or 0 and 0) # Returns 1 because `or` is evaluated 2nd.
Run Code Online (Sandbox Code Playgroud)
但是当我将其更改为此时,出现短路问题:
def yay(): print('yay'); return True
def nay(): print('nay')
def nope(): print('nope')
print(yay() or nay() and nope()) # Prints "yay\nTrue"
Run Code Online (Sandbox Code Playgroud)
对于每一个的4种可能性时表达式之前or
是True
它是唯一的求值表达式.如果运算符优先级有效,则应打印"nay\nnope\nyay\nTrue"
或"nay\nyay\nTrue"
短路,因为and
应该首先进行评估.
从这个例子中可以想到的是,Python从左到右读取布尔表达式,并在结果已知时结束,无论运算符优先级如何.
我的错误在哪里或者我错过了什么?请举例说明and
第一次评估它是否可见,这不是由于代码从左到右解释.
boolean-logic ×10
python ×3
boolean ×2
c# ×2
php ×2
.net ×1
.net-3.5 ×1
.net-4.0 ×1
c++ ×1
dynamic-linq ×1
javascript ×1
linq ×1
numpy ×1
optimization ×1
python-3.x ×1
slice ×1
validation ×1
while-loop ×1