- 学习测试开发的Day92,真棒!
- 学习时间为1H30M
- 第五章习题 19、20
19、报数问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
代码:
"""
用一个变量 count_num 记录总报数次数,每次从头遍历整个列表(位置遍历),当列表元素不
为 0 的时候(用 0 标记删除的人)
count_num += 1,每次判断 count_num ,如果能被 3 除尽就把对应位置赋值 0
重复以上过程,直到列表包含 0 的个数等于列表长度-1
最后找出不是 0 的那个位置就是留下的位置
"""
mylist=[1,2,3,4,5,6,7,8]
count_num=0
while mylist.count(0)
输出:
PS D:\0grory\chapter5> python .\19mybs.py
[0, 0, 0, 0, 0, 0, 7, 0]
最后留下的是原来第7号的人
PS D:\0grory\chapter5>
理解答案代码:
## 19、报数问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
lst = [1,2,3,4,5,6,7]
count_num = 0
while lst.count(0) < len(lst)-1:
print("=====:",lst.count(0))
for i in range(len(lst)):
print("%%%%%%%%%: ",lst)
#print("len(lst) : ",len(lst))
if lst[i] != 0:
count_num += 1
print("count_num : ",count_num)
print("lst[i] : ",i,lst[i])
if count_num%3 == 0:
print("i : ",i)
print("lst[i] : ",lst[i])
lst[i] = 0
print("***********",lst)
for v in lst:
if v != 0:
print("最后留下的是原来第 %d 号的人" %v)
输出:
PS D:\0grory\chapter5> python .\19bs.py
=====: 0
%%%%%%%%%: [1, 2, 3, 4, 5, 6, 7]
count_num : 1
lst[i] : 0 1
%%%%%%%%%: [1, 2, 3, 4, 5, 6, 7]
count_num : 2
lst[i] : 1 2
%%%%%%%%%: [1, 2, 3, 4, 5, 6, 7]
count_num : 3
lst[i] : 2 3
i : 2
lst[i] : 3
%%%%%%%%%: [1, 2, 0, 4, 5, 6, 7]
count_num : 4
lst[i] : 3 4
%%%%%%%%%: [1, 2, 0, 4, 5, 6, 7]
count_num : 5
lst[i] : 4 5
%%%%%%%%%: [1, 2, 0, 4, 5, 6, 7]
count_num : 6
lst[i] : 5 6
i : 5
lst[i] : 6
%%%%%%%%%: [1, 2, 0, 4, 5, 0, 7]
count_num : 7
lst[i] : 6 7
=====: 2
%%%%%%%%%: [1, 2, 0, 4, 5, 0, 7]
count_num : 8
lst[i] : 0 1
%%%%%%%%%: [1, 2, 0, 4, 5, 0, 7]
count_num : 9
lst[i] : 1 2
i : 1
lst[i] : 2
%%%%%%%%%: [1, 0, 0, 4, 5, 0, 7]
i : 2
lst[i] : 0
%%%%%%%%%: [1, 0, 0, 4, 5, 0, 7]
count_num : 10
lst[i] : 3 4
%%%%%%%%%: [1, 0, 0, 4, 5, 0, 7]
count_num : 11
lst[i] : 4 5
%%%%%%%%%: [1, 0, 0, 4, 5, 0, 7]
%%%%%%%%%: [1, 0, 0, 4, 5, 0, 7]
count_num : 12
lst[i] : 6 7
i : 6
lst[i] : 7
=====: 4
%%%%%%%%%: [1, 0, 0, 4, 5, 0, 0]
count_num : 13
lst[i] : 0 1
%%%%%%%%%: [1, 0, 0, 4, 5, 0, 0]
%%%%%%%%%: [1, 0, 0, 4, 5, 0, 0]
%%%%%%%%%: [1, 0, 0, 4, 5, 0, 0]
count_num : 14
lst[i] : 3 4
%%%%%%%%%: [1, 0, 0, 4, 5, 0, 0]
count_num : 15
lst[i] : 4 5
i : 4
lst[i] : 5
%%%%%%%%%: [1, 0, 0, 4, 0, 0, 0]
i : 5
lst[i] : 0
%%%%%%%%%: [1, 0, 0, 4, 0, 0, 0]
i : 6
lst[i] : 0
=====: 5
%%%%%%%%%: [1, 0, 0, 4, 0, 0, 0]
count_num : 16
lst[i] : 0 1
%%%%%%%%%: [1, 0, 0, 4, 0, 0, 0]
%%%%%%%%%: [1, 0, 0, 4, 0, 0, 0]
%%%%%%%%%: [1, 0, 0, 4, 0, 0, 0]
count_num : 17
lst[i] : 3 4
%%%%%%%%%: [1, 0, 0, 4, 0, 0, 0]
%%%%%%%%%: [1, 0, 0, 4, 0, 0, 0]
%%%%%%%%%: [1, 0, 0, 4, 0, 0, 0]
=====: 5
%%%%%%%%%: [1, 0, 0, 4, 0, 0, 0]
count_num : 18
lst[i] : 0 1
i : 0
lst[i] : 1
%%%%%%%%%: [0, 0, 0, 4, 0, 0, 0]
i : 1
lst[i] : 0
%%%%%%%%%: [0, 0, 0, 4, 0, 0, 0]
i : 2
lst[i] : 0
%%%%%%%%%: [0, 0, 0, 4, 0, 0, 0]
count_num : 19
lst[i] : 3 4
%%%%%%%%%: [0, 0, 0, 4, 0, 0, 0]
%%%%%%%%%: [0, 0, 0, 4, 0, 0, 0]
%%%%%%%%%: [0, 0, 0, 4, 0, 0, 0]
*********** [0, 0, 0, 4, 0, 0, 0]
最后留下的是原来第 4 号的人
PS D:\0grory\chapter5>
20、由单个字母组成的list,从键盘读入两个整数m、n(n>m),打印出list[m,n]之间的字母能组成的所有n-m+1位不同的字符串
需要了解的函数
math.factorial()
random.sample()
代码:
## 20、由单个字母组成的list,从键盘读入两个整数m、n(n>m),打印出list[m,n]之间的字母能组成的所有n-m+1位不同的字符串
'''
能组成的子字符串的个数是字符串长度的阶乘
定义一个列表存在子字符串,每次打乱list[m:],如果其对应的字符串不在结果列表中加入
重复上述过程,直到列表长度等于阶乘值
'''
import random
import string
import math
result=[]
lst=random.sample(string.ascii_letters,15)
print(lst)
while 1:
try:
m=int(input(">>m : "))
n=int(input(">>n : "))
except:
print("请重新输入:")
else:
break
if m>n:
m,n=n,m
print(m,n)
lst_sub=lst[m:n]
print(lst_sub)
max_num=math.factorial(len(lst_sub))
while len(result)
输出:
PS D:\0grory\chapter5> python .\20mn.py
['G', 't', 'C', 'D', 'F', 'Y', 'E', 's', 'z', 'l', 'J', 'k', 'j', 'e', 'P']
>>m : h
请重新输入:
>>m : r
请重新输入:
>>m : 5
>>n : 2
2 5
['C', 'D', 'F']
['DFC', 'CFD', 'CDF', 'FDC', 'DCF', 'FCD']
PS D:\0grory\chapter5>
理解答案代码:
import random
import string
import math
result = []
lst = random.sample(string.ascii_letters,15)
print(lst)
while 1:
try:
m = int(input(">>m: "))
n = int(input(">>n: "))
except:
print("请重新输入:")
else:
break
if m > n:
m,n = n,m
print(m,n)
lst_sub = lst[m:n]
print(lst_sub)
max_num = math.factorial(len(lst_sub))
print(max_num)
while len(result) < max_num:
print(lst_sub)
random.shuffle(lst_sub)
print(lst_sub)
if "".join(lst_sub) not in result:
result.append("".join(lst_sub))
print (result)
输出:
PS D:\0grory\chapter5> python 20.py
['X', 'H', 'y', 'T', 'u', 'a', 'g', 'k', 'o', 'f', 'm', 'Q', 'W', 'n', 'S']
>>m: 4
>>n: 7
4 7
['u', 'a', 'g']
6
['u', 'a', 'g']
['u', 'a', 'g']
['u', 'a', 'g']
['g', 'a', 'u']
['g', 'a', 'u']
['u', 'a', 'g']
['u', 'a', 'g']
['g', 'a', 'u']
['g', 'a', 'u']
['a', 'u', 'g']
['a', 'u', 'g']
['u', 'a', 'g']
['u', 'a', 'g']
['a', 'u', 'g']
['a', 'u', 'g']
['g', 'u', 'a']
['g', 'u', 'a']
['g', 'a', 'u']
['g', 'a', 'u']
['u', 'g', 'a']
['u', 'g', 'a']
['u', 'a', 'g']
['u', 'a', 'g']
['a', 'g', 'u']
['uag', 'gau', 'aug', 'gua', 'uga', 'agu']
这两道题基本是重在理解了,都没有做出来TT