免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 17351 | 回复: 46

Python 练习题 [复制链接]

论坛徽章:
0
发表于 2013-05-14 19:36 |显示全部楼层
练习题:有一百个人,分别从1一直到100。现在有人拿枪从第一个开始枪毙,每枪毙一个跳过一个,一直到一轮完成。接着在活着的人里面再次枪毙第一个,间隔一个再枪毙一个,请问最后活着的是这一百个人里的第几个人?看谁写的简单。

论坛徽章:
0
发表于 2013-05-14 23:22 |显示全部楼层
自己抛个转:

#!/usr/bin/python

people_list = []
dead_man = 0
shoot = 'no'

for i in range(0,100):
    people_list.append("alive")

while dead_man < 100:
    for point in range(0,100):
        if people_list[point] == 'alive' and shoot == 'yes':
            people_list[point] = 'dead'
            dead_man += 1
            shoot = 'no'
            if dead_man == 100:
                print point+1
        elif people_list[point] == 'alive' and shoot == 'no':
            shoot = 'yes'

论坛徽章:
323
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2013-05-15 09:14 |显示全部楼层
我初学,写个看起来短的:
  1. #!/usr/bin/python

  2. people_list = []
  3. for i in range(0,100):
  4.     people_list.append(i)

  5. while len(people_list) > 1:
  6.         for i in range(0, 100):
  7.                 if i >= len(people_list):
  8.                         break
  9.                 people_list.pop(i)

  10. print people_list
复制代码

论坛徽章:
0
发表于 2013-05-15 10:54 |显示全部楼层
回复 3# hellioncu


问个问题 请问people_list 赋值的时候为什么不直接用
people_list=range(100)

论坛徽章:
323
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2013-05-15 10:57 |显示全部楼层
V_客 发表于 2013-05-15 10:54
回复 3# hellioncu


我初学,只懂点皮毛,不知道可以这么写,照着LZ的代码改的

论坛徽章:
0
发表于 2013-05-15 11:03 |显示全部楼层
回复 3# hellioncu

你的答案和我的答案不一样~ 你的结果是 63, 我的是 73.

   

论坛徽章:
323
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2013-05-15 11:10 |显示全部楼层
yingweixu 发表于 2013-05-15 11:03
回复 3# hellioncu

你的答案和我的答案不一样~ 你的结果是 63, 我的是 73.
  1. #!/usr/bin/python

  2. people_list = range(100)

  3. while len(people_list) > 1:
  4.         for i in range(100):
  5.                 if i >= len(people_list):
  6.                         break
  7.                 people_list.pop(i)

  8.         print people_list
  9. print people_list
复制代码
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
[3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63, 67, 71, 75, 79, 83, 87, 91, 95, 99]
[7, 15, 23, 31, 39, 47, 55, 63, 71, 79, 87, 95]
[15, 31, 47, 63, 79, 95]
[31, 63, 95]
[63]
[63]

貌似没错吧,是从0开始的63个

论坛徽章:
0
发表于 2013-05-15 11:16 |显示全部楼层
回复 5# hellioncu


    我比你还菜 我以为那样赋值不好呢

论坛徽章:
0
发表于 2013-05-15 11:33 |显示全部楼层
回复 7# hellioncu


    没错我刚才写也是63 LZ 那个执行完后是从第二个才开始开枪的

论坛徽章:
0
发表于 2013-05-15 11:54 |显示全部楼层
person_list = []
n = 0
while True:
    if len(person_list) == 1:
        break
    else:
        person_list = [x for x in range(2**n,101,2**n)]
        n += 1
print person_list

我的是64,求标准答案
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP