【python练习题】开关电灯

来源:互联网 发布:菲茨杰拉德知乎 编辑:程序博客网 时间:2024/04/29 19:02

有N个灯放在一起,从1到N依次顺序编号,有N个人也从1到N依次编号。1号将灯全部熄灭,2号将,凡是2的倍数的灯打开;3号将凡是3的倍数的灯作相反处理(该灯如为打开,则将他关闭;如果关闭,则将它打开)。以后的人都和3号一样,将凡是自己编号倍数的灯作相反处理。

编程实现:第N个人操作后,按顺序输出等的状态(1表示灯打开,0表示灯熄灭)。
输入
输入:N(1<= N <= 2000000),灯的个数
输出
输出:灯的状态,用01序列表示,中间无空格。
输入示例:
2
输出示例:
01

代码实现:

__author__ = 'c08762'# -*- coding:utf-8 -*-def is_valid(numb):    """输入合法性检查,必须输入正数,不支持科学计数法"""    try:        int(numb)    except:        return False    else:        if int(numb) < 1 or int(numb) > 2000000:            return False        else:            return True# 接收一个数,并进行合法性检查,范围检查非必须,n可为任意正整数num_t = input("Pls enter a number between 1 and 2000000:\n")while not is_valid(num_t):    num_t = input("That's not a valid number. Try again:\n")num = int(num_t)# 使用正负号表示灯的状态lights = list(range(1, num+1))for i in range(1, num+1):    for j in range(i-1, num, i):        lights[j] = - lights[j]# 按题意转化为0,1表示状态for k in range(len(lights)):    if lights[k] > 0:        print(1, end='')    else:        print(0, end='')# 灯的状态存储在列表中# print(lights)# for k in range(len(lights)):#     if lights[k] > 0:#         lights[k] = 1#     else:#         lights[k] = 0# print(lights)# for i in lights:#     print(i, end='')# print('\nThere are(is) %d light(s) off.' % lights.count(0))

效果:

Pls enter a number between 1 and 2000000:
10
0110111101

效果2:

Pls enter a number between 1 and 2000000:
10
[-1, 2, 3, -4, 5, 6, 7, 8, -9, 10]
[0, 1, 1, 0, 1, 1, 1, 1, 0, 1]
0110111101
There are(is) 3 light(s) off.

0 0
原创粉丝点击