Python第二周习题集(二)

时间:2021-04-15 21:49:36

# 约瑟夫环问题

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()