问题是这样的:四个人里有一个隐形股东,对A、B、C、D询问,表述如下:
A:“隐形股东在B、C、D三人之中。”
B:“我不是隐形股东,C是。”
C: “在A和D中间有一个是。"
D: “B说的是事实”
四人中两人说了真话,隐形股东只有一个。
statements = [
"隐形股东在B、C、D三人之中。",
"我不是隐形股东,C是。",
"在A和D中间有一个是。",
"B说的是事实"
]
for i in range(4):
for j in range(4):
if i == j:
continue
true_count = 0
for k in range(4):
if (k == i) or (k == j and k != 1) or (k == 1 and i != 1 and j != 1) or ("隐形股东" in statements[k] and k != j):
true_count += 1
if true_count == 2:
print("隐形股东是股东" + chr(ord('A')+i))
break
根据逻辑推理,将四个人分别是隐形股东的情况代入,可以发展d是隐形股东,代码运行出来bcd都是,请问是哪里错了?
把ABCD描述写成函数,代码比较简洁
def funa(n):
if n==1 or n==2 or n==3:
return 1
return 0
def funb(n):
if n==2:
return 1
return 0
def func(n):
if n==0 or n==3:
return 1
return 0
for i in range(4):
count = funa(i)+funb(i)+func(i)+funb(i)
if count == 2:
print(chr(ord('A')+i))
chatgpt:
根据给出的逻辑,我们可以进行以下推理:
假设A说的是真话,那么隐形股东只能是B、C、D中的一个。
假设B说的是真话,那么隐形股东只能是C。
假设C说的是真话,那么隐形股东只能是A或者D。
假设D说的是真话,那么B说的话是真的,因此隐形股东只能是C。
因此,我们可以得出以下结论:
如果隐形股东是B、C、D中的一个,那么只有A说的是真话,因为B、C、D中只有一个是隐形股东,如果B或者C说的是真话,那么隐形股东就不止一个了。
如果隐形股东是A或者D,那么只有C说的是真话,因为在A和D中间只有一个人是隐形股东。
因此,我们可以修改代码如下,考虑这些情况:
statements = [
"隐形股东在B、C、D三人之中。",
"我不是隐形股东,C是。",
"在A和D中间有一个是。",
"B说的是事实"
]
for i in range(4):
for j in range(4):
if i == j:
continue
true_count = 0
for k in range(4):
if (k == i and "隐形股东" in statements[k] and j != 1 and j != i) or \
(k == j and "隐形股东" in statements[k] and i != 1 and i != j) or \
(k != i and k != j and "隐形股东" not in statements[k]) or \
(k == 1 and "C" in statements[k]) or \
(k == 0 and ("B" in statements[k] or "C" in statements[k] or "D" in statements[k])) or \
(k == 2 and (("A" in statements[k] and i == 1 and j == 3) or \
("D" in statements[k] and i == 3 and j == 1))):
true_count += 1
if true_count == 2:
print("隐形股东是股东" + chr(ord('A')+i))
break
这里我们用了比较长的if语句来表示各种情况,可以仔细阅读一下并理解其中的逻辑关系。在测试代码的时候,我们可以将所有可能的情况都列出来,然后检查输出结果是否正确。
import copy
a = [1, 2, 3, 4, ['a', 'b']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('c')
a == [1,2, 3, 4, [‘a’, ‘b’, ‘c’], 5]
b == [1,2, 3, 4, [‘a’, ‘b’, ‘c’], 5]
c == [1,2, 3, 4, [‘a’, ‘b’, ‘c’]]
d == [1,2, 3, 4, [‘a’, ‘b’, ‘c’]]
答案:D
解析(1)
解析(2)
浅拷贝只拷贝父对象,拷贝后就完全独立,但不会拷贝父对象中的子对象,如果父对象中的子对象改变,则跟着改变
链接:https://www.nowcoder.com/test/question/done?tid=41941198&qid=305099#summary
来源:牛客网