Python 约瑟夫圈问题

  • 需求:有n个人围成一圈,顺序排号, 从第1个人开始报数(从1到3),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
  • 代码逻辑
    • n个人,通过输入参数n,生成一个长度为n的列表
    • 通过报数逻辑函数,只要数到3的就把那个位置相对应的列表值设置为0,同时留下的人数也要减1,直到剩下的人数为1,才退出循环
    • 通过报数逻辑函数,最后得到新的列表(只有一个值是1,其余都是0),进行循环即可
  • 代码如下:

     1 #coding:utf-8
     2 #__author__ = ‘Diva‘
     3 # 用户输入n,n代表人数,围成一圈,顺序排号
     4 # 从第一个开始报数,1,2,3,数到3的人,退出圈子
     5
     6 # 报数逻辑,数到3的把对应的位置置为0,直到剩下最后一个人
     7 def num_report(list_create):
     8     n = 0
     9     list_size = len(list_create)
    10     number_stay = list_size     # 剩下的人数(值为1的个数)
    11     while not number_stay == 1:
    12         for i in range(list_size):
    13             if list_create[i] == 1:
    14                 n = n + 1
    15                 if n == 3:
    16                     list_create[i] = 0
    17                     n = 0
    18                     number_stay = number_stay - 1
    19             if i == list_size:
    20                 i = 0
    21
    22 # 通过报数函数最后生成的新的列表,遍历,找到唯一一个值不是0的人
    23 def remove_num_3(list_create):
    24     num_report(list_create)
    25     print(‘经过报数逻辑最后得到的列表是:‘ + str(list_create))
    26     i = 0
    27     while i < len(list_create):
    28         if list_create[i] == 1:
    29             print(‘最后剩下的编号是:‘ + str(i + 1))
    30             return True
    31         i = i + 1
    32
    33 # 根据用户输入的人数n,生成列表,同时执行移除动作
    34 def list_create_rm(n):
    35     try:
    36         if not n.isdigit():
    37             return False
    38     except ValueError as e:
    39         pass
    40
    41     nn = int(n)
    42     i = 0
    43     list_create = []
    44     while i < nn:
    45         list_create.append(1)
    46         i = i + 1
    47     print(‘生成的列表是:‘ + str(list_create))
    48     remove_num_3(list_create)
    49
    50 if __name__ == ‘__main__‘:
    51     n = raw_input(‘请输入人数:‘)
    52     list_create_rm(n)
  • 测试结果
时间: 2024-10-14 06:13:40

Python 约瑟夫圈问题的相关文章

写python用到的一些大杀器

http://iyuan.iteye.com/blog/855933 Python 恩,仅是罗列一些自己用到的,感觉很靠谱的第三方模块. pep8 http://pypi.python.org/pypi/pep8/0.6.1 这个是静态校验代码格式的,特别对从其他语言转过来的新人,很是有些用处 pygenie http://www.traceback.org/2008/03/31/measuring-cyclomatic-complexity-of-python-code/ 这个是测试pytho

Python工程师具备了这些技能,高薪offer不是问题!

对于新人而言,无论学习什么技术,都要以鼓励的姿态出现.如果只是一味地用薪水和个人所看到的局限性现状去衡量一门技术,那绝对是欠缺眼光的.作为一名Python工程师,究竟具备哪些技能才能提升求职机率?今天我就和大家简单来说说: Python编程语言基础 Python语言基础是入门Python的第一步,Python对于新手来说十分友好,入门相对容易同时又可以干很多事,例如网站开发.运维.数据.爬虫等,在诸多方面,Python都是一门非常方便顺手的工具语言.目前国内很多比较知名的网站,例如豆瓣.知乎.果

Python在人工智能(AI)中的优势,年薪百万不是盖的

谁会成为AI 和大数据时代的第一开发语言? 这本已是一个不需要争论的问题.如果说三年前,Matlab.Scala.R.Java 和 Python还各有机会,局面尚且不清楚,那么三年之后,趋势已经非常明确了,特别是前两天 Facebook 开源了 PyTorch 之后,Python 作为 AI 时代头牌语言的位置基本确立,未来的悬念仅仅是谁能坐稳第二把交椅. 不过声音市场上还有一些杂音.最近一个有意学习数据科学的姑娘跟我说,她的一个朋友建议她从 Java 入手,因为 Hadoop 等大数据基础设施

大牛带你打牢Python基础,看看这10语法

都说Python简单,易懂,但是有时候却又很深奥,许多人都觉的自己学会了,却老是写不出项目来,对很多常用包的使用也并不熟悉.学海无涯,我们先来了解一些Python中最基本的内容. 1.数值 数值包括整型和浮点型,分别对应整数和浮点数,后者精度更高. 2.字符串 字符串也就是我们经常接触到的文本,可以往里面放任意长度的内容,用单引号或双引号括起来.应当注意,中文以及中文符号只能出现在字符串內,如果在下面第三行中使用了中文输入法的逗号? ,Python将报错. 3.列表 列表好比一条队伍,里面依次存

零基础学Python,越早明白这些,越快找到好工作!

如何学习python,就能仅靠python得到好工作? 读者A:自学python一年,用于写网络爬虫,但一直觉得自己对python理解还很低层.现在大三,打算再用一年时间学习python,让自己对这们语言有真正的理解,并且还能依靠它得到大公司的offer,请前辈们指点. 关于Python: (1)python是一门语言,语言只是工具. 比语言更重要的是编程思想.同样的功能,老手可能需要10行python代码,新手可能需要50行.想要练习编程思想,唯有多读多写多练. (2)一定要掌握计算机基本知识

三行代码把女朋友照片变成了素描图片!人生苦短,爱python多一些

我们知道图片除了最普通的彩×××,还有很多类型,比如素描,卡通,黑白等等,今天就介绍如何使用python和opencv来实现图片变素描图. 首先将彩×××转换成灰度图: 对灰度图进行求其反色的操作: 对第2步得到的结果采用一个高斯模糊的操作: 采用颜色亮化(color dodge)的技术将第一步的灰度图和第三步操作后的图片进行混合. 事先准备,首先是安装好 opencv,可以直接通过 pip 进行安装: pip install opencv-python 接着准备一张图片,最好是颜色鲜明一点的图

面试题:Python大小写转换

小文:今天面试又搞砸了? 小 k:怎么了? 小文:又一个大小写转换的题目感觉答错了. 小 k:说来听听. 小文:将"hello world"转换为首字母大写"Hello World" 小 k:你的答案是什么? 小文:用 capitalize 方法啊. 小 k:capitalize 方法只能将第一个单词的首字母大写,你这题目要求是两个单词的首字母都要大写. 小文:刚运行了下代码,还真是这样,有什么办法吗? 小 k:有两个方法可解,一种简单,一种复杂,你听那种? 小文:

总结了Python中的22个基本语法

"人生苦短,我用Python".Python编程语言是最容易学习.并且功能强大的语言.只需会微信聊天.懂一点英文单词即可学会Python编程语言.但是很多人声称自己精通Python,然后自己却写不出Pythonic的代码,对很多常用的包不是很了解.万丈高楼平地起,咱们先从Python中最最基础的开始. 01 Python的优点 Python是一种类似人类讲话的语言 极其简单易学的语言 也是开源的语言之一 可移植性良好,在各大平台都可以运行,比如Windows.Mac.Linux上都可运

最全面的Pandas的教程!没有之一!

Pandas?是基于?NumPy?的一个开源 Python 库,它被广泛用于快速分析数据,以及数据清洗和准备等工作.它的名字来源是由" Panel data"(面板数据,一个计量经济学名词)两个单词拼成的.简单地说,你可以把 Pandas 看作是 Python 版的 Excel. 我喜欢 Pandas 的原因之一,是因为它很酷,它能很好地处理来自一大堆各种不同来源的数据,比如 Excel 表格.CSV 文件.SQL 数据库,甚至还能处理存储在网页上的数据. 话不多说,让我们开始吧! 安