# 约瑟夫环问题
def main():
"""
约瑟夫环问题,
:return: 基督徒和非基督徒站的顺序。
"""
persons = [True] * 30 # 30个人活着,用True表示。
counter = 0 # 死的人。
index = 0 # 下标
number = 0 # 报数
while counter < 15: # 死的人小于15继续进行
if persons[index]: # 活着的人报数
number += 1
if number == 9: # 报数为9的人被杀死
persons[index] = False
counter += 1 # 死的人加一
number = 0 # 重新报数
index += 1 # 下标一直增加,
index %= 30 # 超过30开始循环,又回到0开始,
for person in persons: # 在这些人中,死了的标记为非,没死的标记为基
print('基' if person else '非', end='')
if __name__ == '__main__':
main()
# list 的多重使用, 矩阵,棋盘。*****
def main():
names = ['关羽', '张飞', '赵云', '马超', '貂蝉']
subjects = ['语文', '数学', 'Python']
table = [[0] * len(subjects) for _ in range(len(names))] # 创建一个5行3列的矩阵。
for row, name in enumerate(names):
print('请输入%s的成绩:' % name)
for col, subject in enumerate(subjects):
score = int(input('%s:' % subject)) # 输入每个位置的值
table[row][col] = score # 将每个位置的值,填进去
print(table)
if __name__ == '__main__':
main()
# 说年月日,判断是这一年的第几天
def is_leap_year(y):
"""
判断是不是闰年,
:param y: 输入年份
:return: 闰年返回True, 否则返回False
"""
if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
return True
return False
def which_day(year, month, date):
"""计算传入的日期是这一年的第几天"""
days_of_month = [
[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
][is_leap_year(year)] # 调用上面的判断,True返回1, False返回0,以此来选择使用哪个列表。
total = 0
for index in range(month - 1): # 对于输入月之前的每个月,计算天数
total += days_of_month[index]
return total + date # 加上当月的天数,就是这一年的第几天了。
if __name__ == '__main__':
print(which_day(2018,3,8))
# 杨辉三角
def triangles():
a = [1]
while True:
yield a
a = [sum(i) for i in zip([0]+a, a+[0])]
if __name__ == '__main__':
n = 0
for t in triangles():
print(t)
n = n+1
if n == 10:
break
# 双色球选注
from random import randrange, randint
def display(balls):
"""
美化输出球的页面
:param balls: 输入的列表
:return: 优化过的列表
"""
for index, ball in enumerate(balls):
if index == len(balls) - 1:
print('|', end=' ')
print('%02d' % ball, end=' ')
print()
def random_select():
"""
6个红球的随机数(1-33)和1个蓝球的随机数(1-16)
:return: 6个红球和一个蓝球的随机组合
"""
red_balls = list(range(1, 34))
select_balls = []
for _ in range(6):
index = randrange(len(red_balls))
select_balls.append(red_balls[index])
del red_balls[index]
select_balls.sort()
select_balls.append(randint(1, 16))
return select_balls
def main():
"""
注数,及返回值
:return: 多少注的双色球随机数
"""
n = int(input('机选几注:'))
for _ in range(n):
display(random_select())
if __name__ == '__main__':
main()
# 时钟
from time import sleep
import time
from text import timerLocal
class Timer(object):
def __init__(self, hour=0, minute=0, second=0):
self.hour = hour
self.minute = minute
self.second = second
def run(self):
self.second += 1
if self.second == 60:
self.second = 0
self.minute +=1
if self.minute == 60:
self.minute = 0
self.hour += 1
if self.hour == 24:
self.hour = 0
def appear(self):
return '%02d:%02d:%02d' % (self.hour, self.minute, self.second)
def clock():
time1 = Timer()
time1.hour = int(time.strftime('%H', time.localtime()))
time1.minute = int(time.strftime('%M', time.localtime()))
time1.second = int(time.strftime('%S', time.localtime()))
while True:
print(time1.appear())
sleep(1)
time1.run()
if __name__ == '__main__':
clock()
# 分钟倒计时器
from time import sleep
from time import time
class Clock(object):
def __init__(self, hour, minute, second):
self.hour = hour
self.minute = minute
self.second = second
def run(self):
self.second -= 1
if self.second == 0:
if self.minute > 0:
self.minute -= 1
self.second = 60
elif self.minute == 0:
print('时间到!')
return False
return True
def appear(self):
print('%02d:%02d:%02d' % (self.hour, self.minute, self.second))
def main():
clock = Clock(0, 0, 10)
is_go_on = True
while is_go_on:
clock.appear()
sleep(1)
is_go_on = clock.run()
if __name__ == '__main__':
main()
# 猜拳
from random import randint, randrange
class Guess_number(object):
def __init__(self, answer):
self.answer = answer
def compare(self, my_number):
if my_number > self.answer:
print('小一点!')
return True
if my_number < self.answer:
print('大一点!')
return True
if my_number == self.answer:
print('恭喜你猜对了!')
return False
def main():
answer = randrange(int(input('请输入你要猜的范围:')))
is_go_on = True
while is_go_on:
me = Guess_number(answer)
my_number = int(input('请输入你要猜的数:'))
is_go_on = me.compare(my_number)
if __name__ == '__main__':
main()
# # 描述平面上的一个点,方法:移动这个点,1.移动到某个地方,2.移动多少 3. 移动了多少距离。
from math import sqrt
class Point(object):
def __init__(self, x=0, y=0):
self._x = x
self._y = y
def move_by(self, dx, dy):
self._x += dx
self._y += dy
return self._x, self._y
def move_to(self, x, y):
self._x = x
self._y = y
return self._x, self._y
def distance_to(self, other):
dx = self._x - other._x
dy = self._x - other._y
return sqrt(dx**2 + dy**2)
def main():
point = Point()
P1 = Point(5, 6)
print(point.move_by(1, 1))
print(point.move_to(2, 4))
print(point.distance_to(P1))
if __name__ == '__main__':
main()
# 取本地时间
import time
from time import sleep
def timerLocal():
while True:
sleep(1)
minute = time.strftime('%M', time.localtime())
second = time.strftime('%S', time.localtime())
hour = time.strftime('%H', time.localtime())
print('%s:%s:%s' %(hour, minute, second))
if __name__ == '__main__':
timerLocal()