Python 练习9-15 彩票分析

题目为:

可以使用一个循环来明白前述彩票大奖有多难中奖。为此,创建一个名为 my_ticket 的列表或元组,再编写一个循环,不断地随机选择数或者字母,直到中大奖为止。请打印一条消息,报告执行循环多少次才中了大奖。

个人的思路为:两个列表A和B,A装着所有可以中奖的字符,B装着自己选的若干字符,然后从A中选出同B内元素个数一致的字符出来(比如自己先选6个字符放进B里,然后也在A里随机选6个字符出来),装进C里,将B与C排序后进行比较,不相同则计数变量+1,继续循环;若相同则中奖,最后输出循环的次数。

自己的”奖券”里可以含有相同的字符,也不考虑字符的顺序排列。

先导入两个模块:

from random import choice
import operator

choice负责随机选择列表中的元素,operator中的方法eq负责比较两个列表是否完全一致。

然后创建中奖字符列表和自选字符列表:

elements = ['1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f']
# 彩票中所有中奖字符
my_ticket = ['7','3','9','1','9','b']
# 我选择的字符

进而开始创建循环:

length = len(my_ticket)
# 选好的中奖字符个数
range_len = length + 1
active = True
times = 1
# 计数变量
bingo_string = ''
while active:
	bingo = []
	for i in range(1,range_len):
		bingo.append(choice(elements))
# 将随机选出的中奖字符存入一个新的列表里
	ifequal = operator.eq(sorted(bingo),sorted(my_ticket))
# 排序后,比较两个列表是否相同
	if ifequal:
# 相同之后 ifequal 为 True
		active = False
		print(f"第{times}次,中奖了.")
		for i in bingo:
			bingo_string += f"{i} "
		print(f"中奖字符为: {bingo_string.rstrip()}")

	else:
		print(f"第{times}次,没中奖.")

# 这里选择输出每一次没中奖时已经循环的次数,也可以不这样做。
		times += 1

最后就会得到结果:

--snip--
第37980次,没中奖.
第37981次,没中奖.
第37982次,没中奖.
第37983次,中奖了.
中奖字符为: 1 9 7 9 b 3
[Finished in 724ms]

每次的结果都不一样。

这样可以得到单次博彩的结果。

也可以通过 input 手动输入自己想买的彩券上的字符,再套一层 while 并在中奖之后执行的代码下增加询问是否继续博彩。

如果 my_tickets 中含有相同的字符,则循环的次数会多很多…

比如只选了四个1:

循环次数都是相当多的…

由于 choice() 会有几率选择同一个元素,如果想要不重复的取出元素需要使用 numpy.random.choice() 。

多多少少还是增加了一些正经的知识…

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇