python是谁_Python逻辑推理:三对情侣到底谁和谁结婚

今天分享并实现一下 @潘石屹 (微博地址:http://blog.sina.com.cn/panshiyi)微博中的题目(#潘石屹用Python解决100个问题#)。

一、题目描述

有3对情侣结婚,假设3个新郎为A、B、C,3个新娘为X、Y、Z。有参加婚礼的人搞不清谁和谁结婚,所以去询问了这6位新人中的3位,得到的回答如下:新郎A说他要和新娘X结婚;新娘X说她的未婚夫是新郎C;而新郎C说他要和新娘Z结婚。听到这样的回答后,提问者以为他们都是在开玩笑,说的都是假话,并且他仍搞不清谁和谁结婚。现在请试着用Python语言编程,推导出到底哪位新郎和哪位新娘结婚?#潘石屹用Python解决100个问题#

二、问题分析

这里需要把题目中的信息转换为程序设计中的问题。

我们把三位新娘(X,Y,Z)分别用1、2、3来表示,三位新郎仍用A、B和C来表示。

则,如果新郎A和新娘X结婚就可以表示为:A ==1,否则就表示为:A != 1;其它与之相同。

则由题目可知,三人开玩笑说了假话,可以写出如下的表达式:

A != 1 即新郎A不和新娘X结婚;

C != 3 即新郎C不和新娘Z结婚;

C != 1 即新郎C不和新娘X结婚;

同时,考虑到新郎之间不能结婚,则还有以下约束条件:

A != B

A != C

B != C

在这些条件约束下,新郎(A、B、C)和新娘(1、2、3)之间的组合还有哪些可能呢?

我们可以使用穷举法来列出可能的情况。

三、Python中的实现

编写Python程序如下:

for

A

in

range(1, 4):

for

B

in

range(1, 4):

for

C

in

range(1, 4):

if

A != 1

and

C != 1

and

C != 3

and

A != B

and

A != C

and

B != C:

print(A, B, C)

运行结果如下:

3 1 2

也就是说:

新郎A和编号为3的新娘Z结婚;

新郎B和编号为1的信箱X结婚;

新郎C和编号为2的新娘Y结婚。

为了更直观一点,对上面的程序改造一下,能输出 新郎谁和新娘谁结婚 。

brides = ('X', 'Y', 'Z') # 用元组存储三位新娘

for

A

in

range(1, 4):

for

B

in

range(1, 4):

for

C

in

range(1, 4):

if

A != 1

and

C != 1

and

C != 3

and

A != B

and

A != C

and

B != C:

# print(A, B, C)

print(f"新郎A要和新娘{brides[A - 1]}结婚")

print(f"新郎B要和新娘{brides[B - 1]}结婚")

print(f"新郎C要和新娘{brides[C - 1]}结婚")

输出结果如下:

新郎A要和新娘Z结婚

新郎B要和新娘X结婚

新郎C要和新娘Y结婚

2020762184838465.png

本文(完)

如有错误之处,请留言评论。

如需转载请注明出处:翔宇亭IT乐园(http://www.biye5u.com)

本文链接地址:http://www.biye5u.com/article/python/2020/6473.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值