通过line_profiler分析可知,第20行和第21行与randLen有关,但两者耗时接近 。因此randLen应小于listLen的一半,以抵消sorted开销 。除内部限制外,用户可以调节随机序列个数和长度,如定制单个但较长的序列 。
注意,_rand()不适用于存在微量异常数据的长列表 。因为这些数据很可能被随机采样遗漏,从而影响判断结果的准确性 。
python的lambda形式的理解lambda 创建一个匿名函数 。冒号前面是传入参数,后面是一个处理传入参数的单行表达式 。
调用lambda函数返回表达式的结果 。
list的sort 同于内建函数sorted 。它有三个参数cmp,key,reverse,均有默认值 。
cmp是一个比较器,自定义比较器的话传入两个参数x,y,返回值限制为1(xy), 0(x=y),-1(xy) 。默认是常规比较,数字比较,字符串比较等等 。
key是对序列元素处理(比如问题中序列元素仍是序列,就可以再对序列取索引值) , 也就是sort的比较器实际接收到值是key处理后的结果(问题中实际参与比较的是1,2,3,4) 。
reverse默认是False , 意思是从小到大排序,传入True,就从大到小排 。
python问题,我是按照书中所说的打出来的,为什么会报错呢?应该是你运行这个python脚本时,没有带必要参数 。
假设你的脚本文件名为search.py,你应该这样运行:
search.py name='apple'
这样sys.argv[1]的值就会是 name='apple'
怎样python 写一个扑克和骰子的程序,模拟的5骰子的滚动 , 至多三次 , 具体要求如下:参考下面的代码.
play 可能有问题,主要是没说清楚在保留牌的时候,输入Ace 或者 "Ace Ace" 有什么区别,到底是输入一次 Ace 保留手上所有的 Ace 还是只保留一个 , 这个没说清楚 。看例子,这两种用法都有,我按照输入了几个就保留几个来做的 。
simulate 没问题,和图片中的结果完全一样
必须用 python 3
import random
import collections
_dice_type = ['Ace', 'King', 'Queen', 'Jack', '10', '9']
_hand_mapping = collections.OrderedDict([
('5kind','Five of a kind'),
('4kind','Four of a kind'),
('full','Full house'),
('straight', 'Straight'),
('3kind','Three of a kind'),
('2pair','Two pair'),
('1pair','One pair'),
('bust','Bust'),
])
def _check_hand(dices):
counter = collections.Counter(dices)
if len(counter) == 1:
return '5kind'
sorted5 = counter.most_common(5)
if sorted5[0][1] == 4:
return '4kind'
if sorted5[0][1] == 3:
if sorted5[1][1] == 2:
return 'full'
else:
return '3kind'
if sorted5[0][1] == 2:
if sorted5[1][1] == 2:
return '2pair'
else:
return '1pair'
if len(counter) == 5:
dtype = sorted5[0][0]
for x in sorted5:
if dtype != x[0]:
break
dtype += 1
else:
return 'straight'
return 'bust'
def play():
dices = []
retry = 0
while True:
remain = 5 - len(dices)
if remain = 0:
break
dices.extend([random.randint(0,5) for x in range(remain)])
print("The roll is: {}".format(
" ".join([_dice_type[d] for d in sorted(dices)])
))
print("It is a {}".format(_hand_mapping[_check_hand(dices)]))
if retry1:
break
prompt = "Which dice do you want to keep for the {} roll? ".format(
"second" if retry == 0 else "third"
)
while True:
answer = input(prompt).lower()
if answer == 'all':
break
answer = [x.capitalize() for x in answer.split()]
if set(answer).issubset(set(_dice_type)):
break
print("That is not possible, try again!")
retry += 1
if answer == 'all':
推荐阅读
- 路由器有网怎么连接电视机,路由器无线连接电视机
- 做社交电商如何推广,做社交电商如何推广自己
- 荣耀鸿蒙固件下载安装不了,荣耀安装鸿蒙系统
- 在家健身直播录屏,在家健身直播录屏违法吗
- vb.net按行读取 vb读取excel指定行指定列
- qq服务器,服务器在哪
- 电脑矩形帧是什么意思,电脑矩形截屏的快捷键
- php将输出数据库中的值 php将输出数据库中的值变为0
- 有什么是快手上的直播,有什么是快手上的直播间