learn.lianglianglee.com/专栏/程序员的数学课/02 逻辑与沟通,怎样才能讲出有逻辑的话?.md.html
2022-09-06 22:30:37 +08:00

453 lines
30 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>02 逻辑与沟通,怎样才能讲出有逻辑的话?.md.html</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/专栏/程序员的数学课/00 开篇词 数学,编程能力的营养根基.md.html">00 开篇词 数学,编程能力的营养根基</a>
</li>
<li>
<a href="/专栏/程序员的数学课/01 从计数开始,程序员必知必会的数制转换法.md.html">01 从计数开始,程序员必知必会的数制转换法</a>
</li>
<li>
<a class="current-tab" href="/专栏/程序员的数学课/02 逻辑与沟通,怎样才能讲出有逻辑的话?.md.html">02 逻辑与沟通,怎样才能讲出有逻辑的话?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/03 用数学决策,如何规划好投入、转化和产出?.md.html">03 用数学决策,如何规划好投入、转化和产出?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/04 万物可数学,经典公式是如何在生活中应用的?.md.html">04 万物可数学,经典公式是如何在生活中应用的?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/05 求极值:如何找到复杂业务的最优解?.md.html">05 求极值:如何找到复杂业务的最优解?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/06 向量及其导数:计算机如何完成对海量高维度数据计算?.md.html">06 向量及其导数:计算机如何完成对海量高维度数据计算?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/07 线性回归:如何在离散点中寻找数据规律?.md.html">07 线性回归:如何在离散点中寻找数据规律?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/08 加乘法则:如何计算复杂事件发生的概率?.md.html">08 加乘法则:如何计算复杂事件发生的概率?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/09 似然估计:如何利用 MLE 对参数进行估计?.md.html">09 似然估计:如何利用 MLE 对参数进行估计?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/10 信息熵:事件的不确定性如何计算?.md.html">10 信息熵:事件的不确定性如何计算?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/11 灰度实验:如何设计灰度实验并计算实验的收益?.md.html">11 灰度实验:如何设计灰度实验并计算实验的收益?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/12 统计学方法:如何证明灰度实验效果不是偶然得到的?.md.html">12 统计学方法:如何证明灰度实验效果不是偶然得到的?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/13 复杂度:如何利用数学推导对程序进行优化?.md.html">13 复杂度:如何利用数学推导对程序进行优化?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/14 程序的循环:如何利用数学归纳法进行程序开发?.md.html">14 程序的循环:如何利用数学归纳法进行程序开发?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/15 递归:如何计算汉诺塔问题的移动步数?.md.html">15 递归:如何计算汉诺塔问题的移动步数?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/16 二分法:如何利用指数爆炸优化程序?.md.html">16 二分法:如何利用指数爆炸优化程序?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/17 动态规划:如何利用最优子结构解决问题?.md.html">17 动态规划:如何利用最优子结构解决问题?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/18 AI 入门:利用 3 个公式搭建最简 AI 框架.md.html">18 AI 入门:利用 3 个公式搭建最简 AI 框架</a>
</li>
<li>
<a href="/专栏/程序员的数学课/19 逻辑回归:如何让计算机做出二值化决策?.md.html">19 逻辑回归:如何让计算机做出二值化决策?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/20 决策树:如何对 NP 难复杂问题进行启发式求解?.md.html">20 决策树:如何对 NP 难复杂问题进行启发式求解?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/21 神经网络与深度学习:计算机是如何理解图像、文本和语音的?.md.html">21 神经网络与深度学习:计算机是如何理解图像、文本和语音的?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/22 面试中那些坑了无数人的算法题.md.html">22 面试中那些坑了无数人的算法题</a>
</li>
<li>
<a href="/专栏/程序员的数学课/23 站在生活的十字路口,如何用数学抉择?.md.html">23 站在生活的十字路口,如何用数学抉择?</a>
</li>
<li>
<a href="/专栏/程序员的数学课/24 结束语 数学底子好,学啥都快.md.html">24 结束语 数学底子好,学啥都快</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content" style="max-width: 960px; margin: 0 auto;
overflow-x: auto;
overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><h1>02 逻辑与沟通,怎样才能讲出有逻辑的话?</h1>
<p>你好,欢迎来到第 02 课时—— “与”“或”“非”:怎样才能讲出有逻辑的话?</p>
<p>我们都知道,语言沟通的背后是说话人逻辑思维的过程,单句与单句间、事件与事件间,都是靠关联词联系起来的,所以这节课我将从数学逻辑的角度,向你论述语言沟通背后的原理。</p>
<p>我将先向你介绍这一课时的根本思维原则 —— MECE 原则,再从“与”“或”“非”“异或”,以及“文氏图”这些运算方式出发,带你深入剖析沟通表达中的关联词。</p>
<h3>从日常沟通看逻辑</h3>
<p>在日常的沟通中,代表逻辑关系的词汇有很多,例如“而且”“或者”“但是”“如果...那么...”“因为...所以...”等关联词。</p>
<p>在我们使用这些词汇的时候,其实都是在表达事件之间的逻辑关系,如果你的逻辑是混乱的或者是不清晰的,就会出现关联词乱用的情况,从而造成沟通效率低下,甚至传递错误信息。</p>
<p>我们先来看一个例子,事情背景是某个系统需要从 A 环境迁移过渡至 B 环境,大家可以注意一下这段话有什么表达不妥之处。</p>
<blockquote>
<p>“为了保证系统的稳定过渡,<strong>并且</strong>保证在过渡期,各个使用方的需求正常迭代,<strong>因此</strong>系统拟定共分为三期:过渡期、实验期、切换期。其中,过渡期采用某技术,保证数据系统打通;实验期通过 AB 实验,验证流程正确。”</p>
</blockquote>
<p>从字面来看,我们能脑补出说话者要做什么事情,以及做这些事情的目的和方法。但是,从逻辑的视角来看,上面一段话至少包含了以下几个问题:</p>
<ul>
<li>“保证系统的稳定过渡”和“在过渡期内,各个使用方的需求正常迭代”,这二者的语意是包含关系,并不是并列关系,用 <strong>“并且”</strong> 进行连接,不合理。</li>
<li>为了保证系统的稳定过渡,因此需要分为三期。这里构不成因果关系,用 <strong>“因此”</strong> 进行连接,不合理。</li>
<li>过渡期怎样怎样,实验期怎样怎样,切换期呢?丢了一个重要环节,不知道需要做什么事情。</li>
</ul>
<p><strong>这些问题看似是语文问题,实际是背后思考的逻辑问题。</strong></p>
<p>而逻辑思维对于程序员的代码编程能力非常重要所以接下来我将向你介绍“MECE 原则”帮你提升逻辑能力MECE 原则非常重要,它将贯穿整个课时内容。</p>
<h3>MECE 原则,提升逻辑思维水平</h3>
<p>MECE 原则Mutually Exclusive Collectively Exhaustive的中文意思是“相互独立完全穷尽”简而言之能够做到不重叠、不遗漏兼顾排他性和完整性。</p>
<blockquote>
<p>MECE 原则是麦肯锡提出的一种结构化思考方式,无论是报告撰写,提案演讲,业务分析,它是一种很好的思维方式。</p>
</blockquote>
<p>它就像是切比萨一样,一个大比萨,用 4 刀切成了 8 份,每一份之间彼此不重叠(排他);所有的小比萨不遗漏(完整)地合在一起,又还原了大比萨。</p>
<p><img src="assets/Ciqc1F-X_WCACPQdAAS8XzplCC8498.png" alt="图片1.png" /></p>
<p>我们来看个例子,公园的票价问题。公园的门票价格是 20 元,优惠票包括了老人票和儿童票。价格制度为:</p>
<ul>
<li>不到 10 岁的儿童免费;</li>
<li>10 岁以上的未成年人半价;</li>
<li>60 岁及以上的老人免费;</li>
<li>其他成年人无折扣。</li>
</ul>
<p>我们用 MECE 原则来看一下这里的定价制度,就会发现这个制度不满足“不遗漏”“不重叠”的要求。比如,这让 10 岁的小琳很尴尬,她到底是算不到 10 岁免费呢?还是 10 岁以上未成年的半价呢?至少,从上面的描述是看不出来的。</p>
<p>用程序语言来看,上面价格对应的代码就是:</p>
<pre><code>org_price = 20
age = 10
if age &lt; 10:
discount = 0.0
if age &gt; 10 and age &lt; 18:
discount = 0.5
if age &gt; 60:
discount = 0.0
if age &gt;= 18 and age &lt; 60:
discount = 1.0
final_price = discount * price
</code></pre>
<p>显然,当 age 为 10 的时候,程序不会走任何一个策略分支,于是代码会出现错误。</p>
<p>在解决类似的逻辑问题时,<strong>一定要注意所有边界值的可能性</strong>。原则上,每个可行值(尤其是边界值)能且只能落在一个策略分支中。</p>
<p>一个常用的分析方法就是画线法,如下图所示。画一根数轴,代表所有的可行值,再使用 if 语句分解问题,空心点表示开区间,实心点表示闭区间。</p>
<p><img src="assets/CgqCHl-X_XKAD9IhAAECj1fCMwQ960.png" alt="图片2.png" /></p>
<p>画线法</p>
<h3>逻辑运算:“与”“或”“非”“异或”</h3>
<p>接着我们来深入到逻辑的运算,首先看一下命题的概念。</p>
<p><strong>命题是一个描述客观事物的陈述,它包含了正确或错误两个可能性。</strong></p>
<ul>
<li>如果命题正确,我们一般用 true 或 1 来表示;</li>
<li>如果命题错误,我们一般用 false 或 0 来表示。</li>
</ul>
<p>有了命题,我们就可以对命题和命题进行逻辑计算。这很像有了数字之后,就有了加减法。逻辑运算的对象是命题,它根据命题的真假进行计算,并且最终再输出真或者假,作为结果。</p>
<p>逻辑的运算,通常有“与”“或”“非”,以及叠加在这之上的“异或”。</p>
<h4>1.最基础的“与”“或”“非”。</h4>
<ul>
<li>逻辑 <strong>“与”</strong>—— A 并且 B在 Python 语言中也记作 A and B。只有命题 A 和命题 B 同时为真的时候A and B才是真否则都是假</li>
<li>逻辑 <strong>“或”</strong>—— A 或者 B在 Python 语言中也记作 A or B。命题 A 或者命题 B 有一个为真的时候A or B 就是真,否则为假;</li>
<li>逻辑 <strong>“非”</strong>——不是 A在 Python 语言中也记作 notA。命题 A 为假的时候not A 就是真,否则为假。</li>
</ul>
<p>值得一提的是,在不同学科、不同编程语言中,对于逻辑的“与”“或”“非”的符号表示并不相同,可能的符号有:</p>
<p><img src="assets/CgqCHl-X_ZaAPWjiAACEuBV6W0U200.png" alt="图片3.png" /></p>
<p>虽然符号不一样,但是计算结果都是一样的。</p>
<h4>2.从文氏图看“异或”</h4>
<p><strong>“异或”在 Python 语言中也记作A^B</strong>。命题 A 和命题 B 的真假不同时,则 A^B 为真,否则为假。一个好的记忆方式是,异为 1即 A 和 B 的真假性相异(不同),则结果为 1为真</p>
<p>一个形象判断逻辑关系的方法是,便是<strong>文氏图</strong>,如下图所示,假设在文氏图中有两个命题 A 和 B用椭圆形的区域表示一个命题为真的地方而椭圆区域外则表示这个命题为假的区域。</p>
<p><img src="assets/Ciqc1F-X_Y6AWx9PAACybmhz670044.png" alt="图片4.png" /></p>
<p>文氏图</p>
<p>通过分析两个命题的椭圆形,在图中的位置关系,就能得到每个运算的结果。接下来,我先用文氏图演示“与”“或”“非”的运算过程,最后再向你讲解什么是“异或”。</p>
<ul>
<li><strong>“与” A and B</strong></li>
</ul>
<p>根据逻辑运算的定义如下图所示A and B 为真的区域就是,椭圆 A 和椭圆 B的交集蓝色区域</p>
<p><img src="assets/Ciqc1F-X_aiAQY8DAAC51MF7nEY060.png" alt="图片5.png" /></p>
<p>A and B 文氏图</p>
<ul>
<li><strong>“或” A or B</strong></li>
</ul>
<p>如下图所示A or B 为真的区域,便是椭圆 A 和椭圆 B 的并集(蓝色区域)。</p>
<p><img src="assets/CgqCHl-X_bSAMk_NAACS8sN1OUQ850.png" alt="图片6.png" /></p>
<p>A or B 文氏图</p>
<ul>
<li><strong>“非” not A</strong></li>
</ul>
<p>如下图所示not A 为真的区域,便是椭圆 A 以外的部分(蓝色区域):</p>
<p><img src="assets/Ciqc1F-X_bqAPtn0AACQgR3cvsI153.png" alt="图片7.png" /></p>
<p>not A 文氏图</p>
<ul>
<li><strong>“异或” A^B</strong></li>
</ul>
<p>A^B表示 命题 A 和命题 B 的真假不同,也就是真假相异,故是下方文氏图的蓝色区域。</p>
<p><img src="assets/CgqCHl-X_cKACVmDAADBcVHtKCE265.png" alt="图片8.png" /></p>
<p>A^B 文氏图</p>
<p>你会发现,<strong>“A^B”的蓝色区域就是上面“A or B”区域减去“A and B”区域即A^B = (A or B) - (A and B)</strong></p>
<p>讲完命题的逻辑运算后,我们进入工作实践场景,向你讲解工作中的命题逻辑处理问题。</p>
<h3>逻辑处理MECE 原则与代码</h3>
<p>在工作中需要处理命题的逻辑关系时,一定要在满足上文提及的<strong>MECE 原则</strong>的基础上进行代码开发。</p>
<h4>1.不遗漏原则</h4>
<p>当你在处理逻辑关系时,不管有多少个可能的 if 语句,哪怕你觉得你已经在 if 中穷举了所有的可能性,也尽可能用<strong>else</strong>进行一个兜底,<strong>这是对代码潜在风险的规避</strong></p>
<p>例如,下面一段代码从结构来看,它虽然没有错误,但不利于解读、维护。</p>
<pre><code>def fun(x):
if x == 1: #命题A
return 1
if x == 2: #命题B
return 2
</code></pre>
<p>不管命题 A 和命题 B 是否包含了全部的可能性,你都需要用个<strong>else</strong>进行兜底,因此更好的方式是:</p>
<pre><code>def fun(x):
if x == 1: #命题A
return 1
if x == 2: #命题B
return 2
else: #兜底
return 0
</code></pre>
<h4>2.不重复原则</h4>
<p>就说明<strong>每个可能的输入,只能进入唯一 一个策略分支</strong>,否则就有可能造成结果不受控制。这就说明,在代码开发中,尽可能少用多个 if 语句,而改用 elif 语句。</p>
<blockquote>
<p>elif 是 else if 的合体功能上他们二者完全可以互相替代从逻辑的表达来看elif 更像是对 if 的兜底。</p>
</blockquote>
<p>例如下面一段代码,风格就有些不好,容易引起不必要的代码风险。</p>
<pre><code>def fun(x,y):
a = 0
if x &lt; y: #命题A
a = 1
if x &gt;= y: #命题B
a = 2
else: #兜底
a = 0
return a
</code></pre>
<p>不管你的命题 A 和命题 B 是否有交集,你都需要尽可能少地使用多个并列无关的 if 语句,而改用 elif例如</p>
<pre><code>def fun(x,y):
a = 0
if x &lt; y: #命题A
a = 1
elif x &gt;= y: #命题B
a = 2
else: #兜底
a = 0
return a
</code></pre>
<p>从数学思维和代码角度,深入了解“逻辑”后,我们重新回到日常沟通中。</p>
<h3>从逻辑回归到沟通</h3>
<p>我们最开始提到了很多日常沟通的词语,例如 “而且” “或者” “但是” “如果...那么...” “因为...所以...”等关联词。</p>
<p>那么,这些关联词跟我们这个课时讲到的 “与” “或” “非” 有什么关系呢?我们结合逻辑运算和文氏图进行分析。</p>
<h4>1.“而且”与“或者”</h4>
<p>“而且”,顾名思义,就是 A and B。例如小琳很漂亮A同时小琳很聪明B。经过逻辑运算后得到小琳漂亮且聪明A and B</p>
<p>“或者”,顾名思义,就是 A or B。例如这个暑期小琳打算去海南否则小琳就打算去辽宁。经过逻辑运算后得到这个暑假小琳打算去海南或者辽宁A or B</p>
<p>你可以发现“漂亮”和“聪明”,“海南”和“辽宁”都是相互独立的。所以你在使用“而且”和“或者”沟通时,要注意命题 A 和命题 B 也最好是相互独立的,<strong>也就是 A 与 B 应符合上文讲的 MECE 中的不重复原则。</strong></p>
<p>下面我将通过三个反例说明问题:</p>
<ul>
<li>例1小琳很聪明漂亮A<strong>而且</strong>小琳很聪明B</li>
</ul>
<blockquote>
<p>虽然语义上无误,读者也能理解,但从沟通的角度来看,这句话非常不妥帖。</p>
</blockquote>
<ul>
<li>例2为了保证系统的稳定过渡A并且即而且保证在过渡期内各个使用方的需求正常迭代B</li>
</ul>
<blockquote>
<p>此时,命题 A 显然包括了命题 B与例1 如出一辙。</p>
</blockquote>
<ul>
<li>例3小琳是东北人A<strong>或者</strong>小琳是北方人B</li>
</ul>
<blockquote>
<p>“北方”包含了“东北”,相互重复,在表达上绕了一个大弯,仅表达小琳是北方人。</p>
</blockquote>
<p>通过这三个反例我们可看出,缺乏逻辑性的关联词,虽然不会影响语义表达的正误,但却会让沟通变得冗杂,不够直接明了,从而降低了沟通效率。</p>
<p>所以,沟通表达与逻辑思维有着直接关系。接下来,我将讲解“因为…所以…”和“虽然…但是…”这对更体现逻辑思维的关联词,也请你好好揣摩一下这对关联词之间的相互逻辑关系。</p>
<h4>2.因为……所以……</h4>
<p>“因为...所以...”,是一种逻辑推理,即由 A 推导出 B。</p>
<p>“因为...所以...”的文氏图表达如下图所示A 包含于 BB 包含了 A在 A 区域内,也一定会在 B 区域内,因为存在于 A所以存在于 B这是个<strong>由“小”推导出“大”</strong> 的过程。</p>
<p><img src="assets/CgqCHl-X_dWAEtdhAACZZBpouKw150.png" alt="png" /></p>
<p>“因为...所以...”文氏图</p>
<p>在使用“因为...所以...”沟通时,一定要注意命题之间是否具备了<strong>充足的因果关系</strong>。否则,就会出现让人反感的逻辑错误。</p>
<p>先举一个恰当的例子:</p>
<blockquote>
<p>因为小琳聪明漂亮(命题 A所以小琳很漂亮命题 B</p>
</blockquote>
<p>可以看出命题 A 和 命题 B 两者有充足的包含和被包含的因果关系。</p>
<p>下面再举一个反例:</p>
<blockquote>
<p><strong>因为</strong>要保证系统的稳定过渡,并且保证在过渡期内,各个使用方的需求正常迭代,所以系统拟定共分为三期:过渡期、实验期、切换期。</p>
<p>长话短说,即“因为要保证稳定过渡,所以拆分为三期”。</p>
</blockquote>
<p>那么要保证稳定过渡,就必须拆分为三期吗?显然并不是,拆分为四期、五期,全凭开发者自己的设计方案,都是可以的,显然这两者不具备强烈的因果关系。</p>
<h4>3.虽然……但是……</h4>
<p>再来看看“但是”,一般也用作“虽然...但是...”,它表示的是一种转折关系,比如:</p>
<blockquote>
<p>虽然小琳学习成绩不好,但她一直很努力。</p>
</blockquote>
<p>在人们的潜意识中,成绩好的人一定是努力的人,这就是“<strong>因为</strong>她成绩好A<strong>所以</strong>她是个努力的人B”的默认关系反之努力的人B学习成绩不一定很好非 A这就构成了转折于是得到“<strong>虽然</strong>小琳成绩不好(非 A<strong>但是</strong>她很努力B”。</p>
<p>在这一例子的逻辑过程中,你会发现 <strong>“虽然非A…但是B…”</strong> 这个关联词与 <strong>“因为A...所以B...”</strong> 刚好相反。</p>
<p>正如下图所示“因为A所以B”也可以用作描述“虽然非A但是B”。</p>
<p><img src="assets/CgqCHl-X_eCAAfmVAAA8ZXM95Kc406.png" alt="png" /></p>
<p>“虽然...但是...”文氏图</p>
<p>所以我们在验证“虽然…但是…”这个关联词是否使用妥帖时,可以先将其转为因果关系,我会通过以下几个例子向你演示这一过程。</p>
<ul>
<li>虽然小琳不是单身非A但是她是个东北人B</li>
</ul>
<blockquote>
<p>将这句话转为因果关系则有“因为小琳是单身A所以她是东北人B”。显然这里就构不成任何的因果关系了。</p>
</blockquote>
<ul>
<li>虽然小琳成绩不太好非A但是她并没有自暴自弃B</li>
</ul>
<blockquote>
<p>将这句话转为因果关系则有“因为小琳成绩好A所以她没有自暴自弃B”。显然这里的因果性很强。这里的“但是”使用得非常恰当。</p>
</blockquote>
<ul>
<li>虽然小琳不是单身非A但是她的成绩依旧很好B</li>
</ul>
<blockquote>
<p>将这句话转为因果关系则有“因为小琳是单身A所以她的成绩好B”。这里的因果性就很弱了也因此“但是”使用得并不完全恰当。</p>
</blockquote>
<p>在日常生活中,很多时候的“但是”是被误用的,虽然日常沟通中,不必过度关注这些瑕疵,但在书面语的环境下,就会不太妥帖。</p>
<h3>小结</h3>
<p>“怎样才能讲出有逻辑的话?”学完这一课时的你,对这个问题肯定有了自己的答案,并对“逻辑”与“沟通”之间的关系有了更深的理解。</p>
<p>其实,在日常沟通中的很多场景下,逻辑词的使用并没有那么高的要求,人们往往会根据自己的用词偏好去说话,也不必过度吹毛求疵。</p>
<p><strong>但是,当你掌握了很好的逻辑思维方式后,你与人沟通表达时,便会更有说服力,沟通效率也会大大提升;分析事物问题时,也会更加周密完善,一针见血。</strong></p>
<p><strong>比如,当你站在逻辑的视角来重看上文的这些例子时,你就会发现很多逻辑并不规范,尤其是使用了文氏图这一工具之后,你便能一针见血地看到本质,清晰地分析出这些逻辑关系背后的漏洞。</strong></p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/程序员的数学课/01 从计数开始,程序员必知必会的数制转换法.md.html">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/程序员的数学课/03 用数学决策,如何规划好投入、转化和产出?.md.html">下一页</a>
</div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"70997bbfff623cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>