题目
真假美猴王讲述了唐僧师徒四人在取经路上,师徒二人生二心,从而引发一段真假孙悟的故事。
请通过 Python 代码实现哪个是真美猴王,哪个是假美猴王。
代码
import random
MonkeyKingTrue = True
MonkeyKingFalse = False
ListBoolen = [MonkeyKingTrue, MonkeyKingFalse]
def str_to_bool(s):
if s.lower() == 'true':
return True
elif s.lower() == 'false':
return False
else:
raise ValueError(f"字符串 '{s}' 无法转换为有效的布尔值。")
while True:
r = random.choice(ListBoolen)
judge = input("你猜猜我是真的美猴王吗?(真:True,假:False)")
if str_to_bool(judge) == r:
print("恭喜你猜对了!")
break
else:
print("对不起猜错了,请继续!")
知识点
布尔值
在 Python 中,布尔值(Boolean)是一种基本的数据类型,用于表示真(True)或假(False)。以下是关于 Python 布尔值的详细知识点:
布尔值的表示
Python 中的布尔值只有两个:True 和 False,注意首字母必须大写。
a = True
b = False
print(type(a)) # 输出:
print(type(b)) # 输出:
布尔运算
逻辑与(and)
- 当两个操作数都为 True 时,结果才为 True,否则为 False。
print(True and True) # 输出: True
print(True and False) # 输出: False
print(False and True) # 输出: False
print(False and False) # 输出: False
逻辑或(or)
- 只要两个操作数中有一个为 True,结果就为 True,只有当两个操作数都为 False 时,结果才为 False。
print(True or True) # 输出: True
print(True or False) # 输出: True
print(False or True) # 输出: True
print(False or False) # 输出: False
逻辑非(not)
- 对操作数取反,如果操作数为 True,则结果为 False;如果操作数为 False,则结果为 True。
print(not True) # 输出: False
print(not False) # 输出: True
布尔值的比较运算
比较运算符用于比较两个值,返回的结果是布尔值。
相等比较(==)
print(5 == 5) # 输出: True
print(5 == 6) # 输出: False
不相等比较(!=)
print(5 != 5) # 输出: False
print(5 != 6) # 输出: True
大于(>)、小于(<)、大于等于(>=)、小于等于(<=)
print(5 > 3) # 输出: True
print(5 < 3 : false print5>= 5) # 输出: True
print(5 <= 3) # 输出: False
布尔值在条件语句中的应用
布尔值常用于 if、while 等条件语句中。
x = 10
if x > 5:
print("x 大于 5") # 输出: x 大于 5
while True:
print("这是一个无限循环,因为条件始终为 True")
break # 为了避免无限循环,这里使用 break 语句跳出循环
5. 布尔值的类型转换
可以使用 bool() 函数将其他数据类型转换为布尔值。
数字类型
- 整数 0、浮点数 0.0 转换为布尔值为 False,其他非零数字转换为布尔值为 True。
print(bool(0)) # 输出: False
print(bool(1)) # 输出: True
print(bool(-1)) # 输出: True
print(bool(0.0)) # 输出: False
print(bool(0.1)) # 输出: True
字符串类型
- 空字符串 '' 转换为布尔值为 False,非空字符串转换为布尔值为 True。
print(bool('')) # 输出: False
print(bool('hello')) # 输出: True
列表、元组、集合、字典等容器类型
- 空容器转换为布尔值为 False,非空容器转换为布尔值为 True。
print(bool([])) # 输出: False
print(bool([1, 2])) # 输出: True
print(bool(())) # 输出: False
print(bool((1, 2))) # 输出: True
print(bool({})) # 输出: False
print(bool({'a': 1})) # 输出: True
短路求值
在逻辑与(and)和逻辑或(or)运算中,Python 采用短路求值的策略。
逻辑与(and)
- 如果第一个操作数为 False,则不会计算第二个操作数,因为无论第二个操作数是什么,结果都为 False。
def func():
print("函数被调用")
return True
result = False and func() # 函数不会被调用
print(result) # 输出: False
逻辑或(or)
- 如果第一个操作数为 True,则不会计算第二个操作数,因为无论第二个操作数是什么,结果都为 True。
result = True or func() # 函数不会被调用
print(result) # 输出: True
Random
在 Python 中,random 模块是一个用于生成随机数的标准库,它提供了多种生成随机数的函数,适用于不同的场景。以下是关于 random 模块的详细知识点:
导入 random模块
在使用 random 模块的函数之前,需要先导入该模块:
import random
生成随机浮点数
random.random()
- 该函数返回一个位于 [0.0, 1.0) 区间内的随机浮点数。
import random
num = random.random()
print(num)
random.uniform(a, b)
- 返回一个位于 [a, b] 区间内的随机浮点数,其中 a 和 b 可以是任意实数,且 a 不一定小于 b。
import random
num = random.uniform(2.5, 5.5)
print(num)
生成随机整数
random.randint(a, b)
- 返回一个位于 [a, b] 区间内的随机整数,其中 a 和 b 必须是整数,且 a 要小于等于 b。
import random
num = random.randint(1, 10)
print(num)
random.randrange(start, stop[, step])
- 从 range(start, stop, step) 所产生的序列中随机选择一个整数。
start 是起始值(默认为 0),stop 是结束值(不包含在序列中),step 是步长(默认为 1)。
import random
# 从 0 到 9 中随机选一个偶数
num = random.randrange(0, 10, 2)
print(num)
4. 从序列中随机选择元素
random.choice(seq)
- 从非空序列 seq(如列表、元组、字符串等)中随机选择一个元素。如果序列为空,会抛出 IndexError 异常。
import random
my_list = [1, 2, 3, 4, 5]
element = random.choice(my_list)
print(element)
random.choices(population, weights=None, *, cum_weights=None, k=1)
- 从 population 序列中随机选择 k 个元素(可以重复选择),返回一个列表。
- weights 是一个可选的权重序列,用于指定每个元素被选中的概率;cum_weights 是累积权重序列。两者不能同时使用。
import random
my_list = ['apple', 'banana', 'cherry']
# 随机选择 2 个元素,每个元素被选中的概率不同
choices = random.choices(my_list, weights=[1, 2, 3], k=2)
print(choices)
random.sample(population, k)
- 从 population 序列中随机选择 k 个不重复的元素,返回一个列表。如果 k 大于序列的长度,会抛出 ValueError 异常。
import random
my_list = [1, 2, 3, 4, 5]
sample = random.sample(my_list, 3)
print(sample)
5. 打乱序列的顺序
random.shuffle(x)
- 对可变序列 x(如列表)进行原地随机打乱顺序。如果 x 是不可变序列(如元组),会抛出 TypeError 异常。
import random
my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(my_list)
6. 设置随机数种子
random.seed(a=None, version=2)
- 用于初始化随机数生成器的种子。如果传入相同的种子值,每次运行程序时生成的随机数序列将是相同的,这在调试和重现随机结果时非常有用。
import random
random.seed(42)
print(random.random()) # 每次运行程序,这里输出的结果都会相同
7. 生成随机字节
random.getrandbits(k)
- 返回一个具有 k 个随机比特位的整数。
import random
bits = random.getrandbits(16)
print(bits)
说明:
需要注意的是random模块生成的是伪随机数,在某些对随机性要求极高的安全场景下,建议使用 secrets 模块。