当前位置:   article > 正文

python_case_2_30个人在一条穿上,超载,需要15人下船

30个人在一条穿上,超载,需要15人下船
  • 约瑟夫生者死者小游戏。30人在一条船上,现在由于超载需要15人下船。给30人编号,从1开始报数,数到9的人下船,如此反复,直到15人全部下船。问有哪些编号的人下船了。
  1. people = {} # 集合
  2. i=1 # 每人的编号
  3. j=0 # 计数下船的人
  4. check=0 # 当前1-9人的计数
  5. for i in range(1,31):
  6. people[i] = 1
  7. while i<=31:
  8. if i == 31:
  9. i = 1
  10. elif j ==15:
  11. break
  12. else:
  13. if people[i] == 0: # 过滤掉前面已经下船的人
  14. i += 1
  15. else:
  16. check += 1
  17. if check == 9:
  18. print("{}号下船了".format(i))
  19. j += 1
  20. people[i] == 0 # 标记此人已下船
  21. check = 0 # 重新计数1-9
  22. else:
  23. i += 1
  •  五人分鱼。第一个人把鱼扔掉一条并且五等分,拿走自己的部分;第二个人把第一个人剩下的鱼扔掉一条并且五等分,拿走自己的部分...五个人都同样的操作,问至少有多少条鱼。
  1. def main():
  2. fish = 1 # 当前fish的数量
  3. while True:
  4. total = fish # for loop中会改变fish的数量,需要total变量记录同一loop中的fish的数量
  5. enough = True
  6. for i in range(5):
  7. if((total-1)%5 == 0):
  8. total = (total-1)//5*4 # 当前剩余fish的数量
  9. else:
  10. enough = False
  11. break # 善用break以避免不必要的loop
  12. if enough:
  13. print("至少捕到了{}条鱼".format(fish))
  14. break # 第一次满足条件
  15. fish += 1
  16. if __name__ == "__main__": # 只有当前文件单独执行时,执行此函数。作为模块被其他文件引用时,不执行。
  17. main()
  • 秒表 
  1. import time
  2. print('按下回车开始计时,按下 Ctrl + C 停止计时。')
  3. input("")
  4. starttime=time.time() # 当前时间戳
  5. try:
  6. while True:
  7. print("计时",round(time.time()-starttime, 0),"秒",end="\r") # round() 方法返回浮点数 x 的四舍五入值 # \r表示将光标的位置回退到本行的开头位置
  8. time.sleep(1) # 表示进程挂起的时间
  9. except KeyboardInterrupt: # Ctrl + C
  10. print("\n结束")
  11. print("共计",round(time.time()-starttime,2),"秒")
  • 计算数组元素之和
  1. def sumof_array(array): # 封装成一个函数 # 内置函数sum()
  2. return sum(array)
  3. array = {} # 初始化数组
  4. array = {1,2,3}
  5. n=len(array) # 计算数组的长度 len()
  6. print(sumof_array(array),n)
  • 数组翻转指定个数的元素
  1. def reverse_one(array,n): # list的元素向前推一格
  2. temp=array[0]
  3. for k in range(n-1):
  4. array[k]=array[k+1]
  5. array[n-1]=temp
  6. def reverse_d(array,d,n):
  7. for j in range(d): # 重复d次,list的元素向前推d格
  8. reverse_one(array,n)
  9. def print_array(array,n):
  10. for i in range(n):
  11. print(array[i],end=" ")
  12. array=[1,2,3,4,5,6,7]
  13. reverse_d(array,2,7)
  14. print_array(array,7)
  1. def reverse_array(array,start,end):
  2. while(start<end):
  3. temp=array[start]
  4. array[start]=array[end]
  5. array[end]=temp
  6. start+=1
  7. end-=1
  8. def reverse_d(array,d):
  9. n=len(array)
  10. reverse_array(array,0,d-1)
  11. reverse_array(array,d,n-1)
  12. reverse_array(array,0,n-1)
  13. def print_array(array):
  14. for i in range(len(array)): # 节省变量n的使用
  15. print(array[i],end=" ")
  16. array=[1,2,3,4,5,6,7]
  17. reverse_d(array,2)
  18. print(array)
  • 将列表中指定位置的元素对调
  1. def reverse(array,i,j):
  2. array[i-1],array[j-1]=array[j-1],array[i-1] # 对调两元素
  3. return array
  4. array=[1,2,3,4,5,6,7]
  5. print(reverse(array,1,3) )
  1. def reverse(array,i,j):
  2. first=array.pop(i) # 删除指定位置的元素
  3. second=array.pop=(j-1)
  4. array.insert(i,second) # 在指定位置插入指定元素
  5. array.insert(j,first)
  6. return array
  7. array=[1,2,3,4,5,6,7]
  8. print(reverse(array,1,3) )
  •  判断元素是否在列表中存在
  1. list=[1,2,3,4,5,6,7]
  2. print("判断4是否在list中.")
  3. for i in len(list): # 循环
  4. if i==4:
  5. print("存在")
  6. if 4 in list: # in关键字
  7. print("存在")
  8. if list.count(4)>0: # count(). 返回子字符串在字符串中出现的次数
  9. print("存在")
  10. list_new=set(list) # set()和in关键字. set()用于创建一个无序不重复元素集.
  11. if 4 in list_new:
  12. print("存在")
  • 清空列表
  1. list=[1,2,3,4,5]
  2. print(list)
  3. list.clear() # 清空列表
  4. print(list)
  • 复制列表
  1. list=[1,2,3,4,5]
  2. list_2=[]
  3. list_2=list.copy()
  4. list_2.extend(list)
  5. print(list_2)
  • 计算列表元素之积
  1. from functools import reduce
  2. # lamda函数,一个简单的函数,x y为输入参数,x*y为执行函数体并作为返回值
  3. # reduce(function,literable list) 可对一整个数组进行同一种操作,例如相加、相减、相乘、相除
  4. list=[1,2,3,4,5]
  5. print(reduce(lambda x,y:x*y, list))
  •   移除字符串中的指定字符
  1. str="python3"
  2. # 1st method
  3. str_new=""
  4. for i in range(len(str)):
  5. if i!=2:
  6. str_new=str_new+str[i]
  7. print(str_new)
  8. # 2nd method
  9. # replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
  10. str_new=str.replace(str[2],"",1)
  11. print(str_new)
  •  判断字符串中是否包含子字符串
  1. str="hello world"
  2. substr="world"
  3. # 1st method
  4. def sub_exist(str,substr):
  5. if substr in str: # in关键字
  6. print("存在")
  7. else:
  8. print("不存在")
  9. sub_exist(str,substr)
  10. # 2nd method
  11. # find() 方法检测字符串中是否包含子字符串。如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1。
  12. if str.find(substr)==-1:
  13. print("不存在")
  14. else:
  15. print("存在")
  • 将字符串作为代码执行
  1. def exec_code():
  2. LOC="""
  3. def factorial(num):
  4. fact=1
  5. for i in range(1, num+1):
  6. fact=fact*i
  7. return fact
  8. print(factorial(5))
  9. """
  10. exec(LOC) # exec 执行储存在字符串或文件中的 Python 语句.
  11. exec_code()
  • 字符串翻转
  1. str="python3"
  2. print(str[::-1])
  3. # 内置函数,reversed 函数返回一个反转的迭代器。
  4. # join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串
  5. print("".join(reversed(str)))
  1. from functools import reduce
  2. str="python3"
  3. print(reduce(lambda x,y:y+x,str))
  • 对字符串进行切片和翻转
  1. def rotate(str,d):
  2. Lfirst=str[0:d]
  3. Lsecond=str[d:len(str)]
  4. Rfirst=str[0:len(str)-d]
  5. Rsecond=str[len(str)-d:len(str)]
  6. print("前2的翻转结果是:"+ Lsecond + Lfirst)
  7. print("后2的翻转结果是:"+ Rsecond + Rfirst)
  8. str="python3"
  9. d=2
  10. # 取前2和后2翻转
  11. rotate(str,d)
  • 按key或者value对字典进行排序
  1. def dictionary():
  2. dic={}
  3. dic[1]=9
  4. dic[2]=77
  5. dic[3]=56
  6. dic[4]=38
  7. dic[5]=67
  8. dic[6]=5
  9. # 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。
  10. # sorted() 函数对所有可迭代的对象进行排序操作。sorted(iterable, cmp=None, key=None, reverse=False). key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  11. print(sorted(dic.items(),key=lambda x:x[0])) # 以key升序排列
  12. print(sorted(dic.items(),key=lambda x:x[1])) # 以value升序排列
  13. print(sorted(dic.items(),key=lambda x:(x[0],x[1]))) # 先以key升序排列,再以value升序排列
  14. def main():
  15. dictionary()
  16. if __name__=="__main__":
  17. main()
  • 字典中的值之和
  1. def dictionary(dic):
  2. sum=0
  3. for i in dic:
  4. sum+=dic[i]
  5. print(sum)
  6. dic={"a":9,"b":7,"c":5,"d":3,"e":6,"f":5}
  7. dictionary(dic)
  •  移除字典中的键值对
  1. dic={"a":9,"b":7,"c":5,"d":3,"e":6,"f":5}
  2. print("原始字典:"+str(dic))
  3. removed_1=dic.pop("a")
  4. print(removed_1)
  5. removed_2=dic.pop("g","该键值不存在.") # 字典 pop() 方法删除字典给定键 key 及对应的值,返回值为被删除的值。key 值必须给出。 否则,返回 default 值。
  6. print(removed_2)
  7. del dic["b"] # 删除
  8. # del dic["g"] # 不能移除一个不存在的key
  9. print("变化后的字典:" +str(dic))
  • 合并两个字典
  1. dic_1={"a":1,"b":2}
  2. dic_2={"c":3,"d":4}
  3. dic_2.update(dic_1) # 字典 update() 函数把字典参数 dict1 的 key/value(键/值) 对更新到字典 dict2 里。
  4. print(dic_2)
  5. print({**dic_1,**dic_2}) # *args 和 **kwargs 都代表 1个 或 多个 参数的意思。*args 传入tuple 类型的无名参数,而 **kwargs 传入的参数是 dict 类型。
  •  

 

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/434897
推荐阅读
相关标签
  

闽ICP备14008679号