学习python的第五节(集合and尼姆游戏)

2021-05-29 04:01

阅读:437

标签:l命令   用法   比较   dom   其他   并且   情况   重要   pop   

集合是无序可变的容量对象,与字典一样使用大括号{}为界定符,同一个集合的元素不允许重复,集合元素具有唯一性。
集合创建:1,直接集合赋值给变量2,使用set()函数将列表、元组等其他可迭代对象转换为集合“若有其他重复元素则保留一个元素”
集合对象的增删查改:1,增加:add()函数2,删除:pop()方法;remove()方法删除指定元素;clear()清空集合删除所有元素;del命令删除整个集合;discard()函数删除指定元素;update()函数合并两集合。

集合运算:并集(a|b)、交集(a&b)、差集(a-b)、对称差集(a^b)以及集合关系(比较集合大小(包含关系))。

集合最重要特点是元素唯一性,根据这一点集合在python中具有高效执行效率。

在学习过python的几个对象之后,留有一个十分简单的题目:聪明的尼姆游戏
实验目的:
(1)理解尼姆游戏规则
(2)了解并熟练使用while循环
(3)理解带else子句的循环结构执行流程
(4)理解循环语句的break语句的作用
(5)了解使用循环和异常处理结构对用户输入进行约束的用法
实验内容:
尼姆游戏是一个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。
在聪明模式中,计算机每次拿走足够多的物品使得堆的大小是2的幂次方减1——也就是3,7,15,31或63.除了堆的大小已经是2的幂次方减1,在其他情况下这样走都是符合游戏规则。在那种情况下,计算机就按游戏规则随机拿走一些。
编写程序,模拟聪明版的尼姆游戏。
`from math import log2
from random import randint

def ever_step(n):
num = n - (2 ** int(log2(n)) - 1)
half = n // 2
if num return num
return randint(1,half)
def smart(n):
while n > 1:
print("你的回合,还剩下{}物品".format(n))
while True:
try:
num = int(input("你要拿走的数量:"))
assret 1 break
except:
pass
n -= num
if n == 1:
return "我输了"
n -= every_step(n)
else:
return "你输了"
print(smart(randint(1,100)))
`
在这之后,我们将学习python中的循环选择。

学习python的第五节(集合and尼姆游戏)

标签:l命令   用法   比较   dom   其他   并且   情况   重要   pop   

原文地址:https://www.cnblogs.com/Rongboke/p/14774199.html


评论


亲,登录后才可以留言!