这是一个带回家的测试问题(如果Gruhn教授无情地搜索堆栈溢出,我会在20分钟前邮寄)。第一个计算机科学课程,使用Python的Intro。使用“从Python第二版开始”这本书。测试基本上是创建我们自己的模块库,读取和写入文件,以及尝试/除逻辑。
第一部分要求创建一个彩票模拟器。生成非唯一数字的数字,其他唯一的非重复数字。我在这里看到的每个答案都使用了列表,遗憾的是下一章,我们明确禁止使用它们。
本节的代码:
import random
def ballPickerOne():
a = random.randint(1, 59)
b = random.randint(1, 59)
c = random.randint(1, 59)
d = random.randint(1, 59)
e = random.randint(1, 59)
f = random.randint(1, 35)
showNumbers(a,b,c,d,e,f)
def ballPickerTwo():
a = random.randrange(1,59,2)
b = random.randrange(1,59,3)
c = random.randrange(1,59,5)
d = random.randrange(1,59,7)
e = random.randrange(1,59,11)
f = random.randint(1,35)
showNumbers(a,b,c,d,e,f)
def showNumbers(a,b,c,d,e,f):
print("Your Numbers ...")
print()
print("Ball 1: ", a)
print("Ball 2: ", b)
print("Ball 3: ", c)
print("Ball 4: ", d)
print("Ball 5: ", e)
print("Red Ball: ", f)
print()
print("Good Luck")
我们需要使用showNumbers函数来显示结果,以及由此产生的格式。 ballPickerTwo是“唯一的”,我在尝试唯一性时使用了素数区间。我玩弄了一个循环,但无法弄清楚如何显示使用showNumbers生成的数字。
答案 0 :(得分:1)
这是一种非常繁琐的方式,但它不使用列表。它将选择随机和唯一的值。
def ballPickerTwo():
a = random.randint(1, 59)
b = a
while b == a:
b = random.randint(1, 59)
c = b
while c == b or c == a:
c = random.randint(1, 59)
d = c
while d == c or d == b or d == a:
d = random.randint(1, 59)
...
答案 1 :(得分:0)
只需返回您生成的值 - 在函数中使用return。 E.g:
def ballPickerOne():
a = random.randint(1, 59)
b = random.randint(1, 59)
c = random.randint(1, 59)
d = random.randint(1, 59)
e = random.randint(1, 59)
f = random.randint(1, 35)
return a,b,c,d,e,f
showNumbers(a,b,c,d,e,f)
如果:
from random import sample, randint
def ballPickerOne():
a,b,c,d,e = sample(range(1,59), 5)
f = randint(1,35)
while f!=a and f!=b and f!=c and f!=d and f!=e:
f = randint(1,35)
return a,b,c,d,e,f
答案 2 :(得分:0)
如何使用整数作为位图来检查唯一?
import random
def showNumbers(a,b,c,d,e,f):
print("Your Numbers ...")
print()
print("Ball 1: ", a)
print("Ball 2: ", b)
print("Ball 3: ", c)
print("Ball 4: ", d)
print("Ball 5: ", e)
print("Red Ball: ", f)
print()
print("Good Luck")
def ballPickerTwo():
while True:
a = random.randint(1, 59)
b = random.randint(1, 59)
c = random.randint(1, 59)
d = random.randint(1, 59)
e = random.randint(1, 59)
f = random.randint(1, 35)
m = 2**a + 2**b + 2**c + 2**d + 2**e + 2**f
if bin(m).count("1") == 6:
break
showNumbers(a,b,c,d,e,f)
答案 3 :(得分:0)
这类似于HYRY的答案,因为它使用数字中的位来记住已经选择了哪些数字。这是有效的,因为Python可以处理任意大数。
import random
def showNumbers(a, b, c, d, e, f):
print("Your Numbers ...")
print()
print("Ball 1: ", a)
print("Ball 2: ", b)
print("Ball 3: ", c)
print("Ball 4: ", d)
print("Ball 5: ", e)
print("Red Ball: ", f)
print()
print("Good Luck")
def pick(cur_val):
while True:
v = random.randint(1, 59)
m = 2**v
if (cur_val & m) == 0: # bit not set, v never picked before
return (cur_val | m), v # return updated cur_val and bit number now set in it
def ballPickerTwo():
cur_val = 0
cur_val, a = pick(cur_val)
cur_val, b = pick(cur_val)
cur_val, c = pick(cur_val)
cur_val, d = pick(cur_val)
cur_val, e = pick(cur_val)
cur_val, f = pick(cur_val)
showNumbers(a, b, c, d, e, f)