python小题
请问下这个题怎么解请描述 x 的哪些值使这个布尔值成为真
(x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x)
x是什么 本帖最后由 3236654291 于 2021-8-20 13:56 编辑
from random import *
x = ['p','o','n']
lst = []
num = 10000
while num > 0:
if (x.count('p') == 2 and 'o' in x and x[-1] == 'n') or \
(len(x) == 5 and x == x):
lst.append(x)
x = ['p','o','n']
else:
x.insert(randint(0,len(x)),choice(x))
num -= 1
if len(lst):
for el in range(len(lst)-1, -1, -1):
if lst.count(lst) > 1:
lst.pop(el)
for i in lst:
print(i,'\n')
print('over')
随机生产结果,行不?{:10_254:} 本帖最后由 阿奇_o 于 2021-8-20 15:55 编辑
>>> x = 'ppon'
>>> (x.count('p') == 2 and 'o' in x and x[-1] == 'n')
True
>>> x2 = 'abc22'
>>> (len(x2) == 5 and x2 == x2)
True
由以上试验,再根据or的特性,可以推出 x 可以是 'ppon', 'popn', 'oppn'
或者是 五个字符长度的 结尾是任意两个相同的字符,即可,如 'abcxx', 'xyz..', '123**', .... 本帖最后由 白two 于 2021-8-20 17:56 编辑
俩括号中间用的 or 连接,所以 or 左右两边有一个为真即可
先看左边:
x.count('p') == 2 and 'o' in x and x[-1] == 'n'
三者间用的 and 连接,所以必须同时满足三个条件,即:
x 里面要有两个 p 字符,至少得有一个 o 字符,且最后一个字符为 n ;
再看右边:
len(x) == 5 and x == x
两者用 and 连接,也必须同时满足两个条件,即:
x 的长度等于 5 , x 第 4 个值等于第 5 个值;
例如:
>>> x = ["p","p","o",1,2,3,4,"n"]#满足右边
>>> print((x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x))
True
>>> x = ('p','p','1','o','2','n')#满足右边
>>> print((x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x))
True
>>> x = "oppn" #满足右边
>>> print((x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x))
True
>>> x = "xyyyy"#满足左边
>>> print((x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x))
True
>>> x = #满足左边
>>> print((x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x))
True
先看最外层 是or 那只要两边有一边为真结果就是真了
左边为真的情况 : x满足'p'字符有且仅有两个'o'字符个数大于等于一个 以字符'n'结尾
右边为真的情况 : x长度为五 最后两个字符一样
贴几个例子
>>> x='ppon'
>>> (x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x)
True
>>> x='asdwqdpasdpozn'
>>> (x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x)
True
>>> x='asdxx'
>>> (x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x)
True or两边有一边为真结果就是真了
左边为真 : x满足p字符有且仅有两个o字符个数大于等于一个并以字符n结尾
右边为真 : x长度为五,最后两个字符一样 #三种情况
#1、字符串形式:
#1.1、最后一个字符是n,含有o,两个p的任意字符串:
>>> x = 'ppon'
>>> (x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x)
True
#1.2、字符长度为5,最后两个字符相同
>>> x = 'abcdd'
>>> (x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x)
True
#2、列表形式
#2.1、最后一个元素为‘n’,含有‘o’和两个‘p’
>>> x = ['p','p','o','n']
>>> (x.count('p') == 2 and 'o' in x and x[-1] == 'n') or (len(x) == 5 and x == x)
True
页:
[1]