我正在用python创建一个bingo/housie票据创建者。票有9行3列。这意味着9*3网格上有27个空间。垂直方向为9行,水平方向为3列。每行只能容纳3个随机数。第一行可以容纳1,9中的随机数。第二行可以容纳10,19之间的随机数。第三行可以容纳20,29之间的随机数。第四行可以容纳30,39之间的随机数。第五行可以容纳40,49之间的随机数。第六行可以容纳50,59之间的随机数。第七行可以容纳60,69之间的随机数。第八行可以容纳70,79之间的随机数。第九行可以容纳80,90之间的随机数。这是车票的参考图片 我计划用python创建一个随机票证。这是我为它创建的脚本。为了更好地理解,它有所有的评论
import random
# print("Script is ready")
# Variables
global numOfNums # This tells that only 15 numbers can be added to the ticket
numOfNums = 15
global allNum # this is the list containing all 90 numbers
global numToBedone # this is just for adding nums to the list
allNum = []
numToBedone = 1
global row1, row2, row3, row4, row5, row6, row7, row8, row9 # all the rows
row1, row2, row3, row4, row5, row6, row7, row8, row9 = [], [], [], [], [], [], [], [], []
global row1Num, row2Num, row3Num, row4Num, row5Num, row6Num, row7Num, row8Num, row9Num # all the nums row can have
# Filling the List
while numToBedone<91:
allNum.append(numToBedone)
numToBedone = numToBedone+1
# Generating number for row 1
def ranRow1NumGen():
global numOfNums
row1Num = random.randint(1,9)
try:
allNum.remove(row1Num)
except:
ranRow1NumGen()
row1.append(row1Num)
numOfNums = numOfNums - 1
# Generating number for row 2
def ranRow2NumGen():
global numOfNums
row2Num = random.randint(10,19)
try:
allNum.remove(row2Num)
except:
ranRow2NumGen()
row2.append(row2Num)
numOfNums = numOfNums - 1
# Generating number for row 3
def ranRow3NumGen():
global numOfNums
row3Num = random.randint(20,29)
try:
allNum.remove(row3Num)
except:
ranRow3NumGen()
row3.append(row3Num)
numOfNums = numOfNums - 1
# Generating number for row 4
def ranRow4NumGen():
global numOfNums
row4Num = random.randint(30,39)
try:
allNum.remove(row4Num)
except:
ranRow4NumGen()
row4.append(row4Num)
numOfNums = numOfNums - 1
# Generating number for row 5
def ranRow5NumGen():
global numOfNums
row5Num = random.randint(40,49)
try:
allNum.remove(row5Num)
except:
ranRow5NumGen()
row5.append(row5Num)
numOfNums = numOfNums - 1
# Generating number for row 6
def ranRow6NumGen():
global numOfNums
row6Num = random.randint(50,59)
try:
allNum.remove(row6Num)
except:
ranRow6NumGen()
row6.append(row6Num)
numOfNums = numOfNums - 1
# Generating number for row 7
def ranRow7NumGen():
global numOfNums
row7Num = random.randint(60,69)
try:
allNum.remove(row7Num)
except:
ranRow7NumGen()
row7.append(row7Num)
numOfNums = numOfNums - 1
# Generating number for row 8
def ranRow8NumGen():
global numOfNums
row8Num = random.randint(70,79)
try:
allNum.remove(row8Num)
except:
ranRow8NumGen()
row8.append(row8Num)
numOfNums = numOfNums - 1
# Generating number for row 9
def ranRow9NumGen():
global numOfNums
row9Num = random.randint(80,90)
try:
allNum.remove(row9Num)
except:
ranRow9NumGen()
row9.append(row9Num)
numOfNums = numOfNums - 1
# Main function for creating a ticket
def ticketGen():
global row1, row2, row3, row4, row5, row6, row7, row8, row9
global numOfNums
#Adding 1 number to all the rows
ranRow1NumGen()
ranRow2NumGen()
ranRow3NumGen()
ranRow4NumGen()
ranRow5NumGen()
ranRow6NumGen()
ranRow7NumGen()
ranRow8NumGen()
ranRow9NumGen()
# After we put 1 number in each row we have to put the rest in the random rows
# I cant understand how to do that
# I used this way but it has some issues
# sometimes a row can get more than 3 num which isnt possible in the ticket
# also some numbers repeat but I cant understand how as I have a try except statement
u = 0
while u < 6:
randomNumGiver = random.randint(1,9)
if numOfNums > 0:
if randomNumGiver == 1 and len(row1) < 3:
ranRow1NumGen()
elif randomNumGiver == 2 and len(row2) < 3:
ranRow2NumGen()
elif randomNumGiver == 3 and len(row3) < 3:
ranRow3NumGen()
elif randomNumGiver == 4 and len(row4) < 3:
ranRow4NumGen()
elif randomNumGiver == 5 and len(row5) < 3:
ranRow5NumGen()
elif randomNumGiver == 6 and len(row6) < 3:
ranRow6NumGen()
elif randomNumGiver == 7 and len(row7) < 3:
ranRow7NumGen()
elif randomNumGiver == 8 and len(row8) < 3:
ranRow8NumGen()
elif randomNumGiver == 9 and len(row9) < 3:
ranRow9NumGen()
else:
pass
u = u+1
# printing all the rows and the remaining numbers in the list
print(row1, row2, row3, row4, row5, row6, row7, row8, row9)
pass
ticketGen()
我得到了一些混合输出: 代码给出的输出不正确:
[8] [14] [21, 25, 21] [32] [42, 47, 42] [55] [60, 66, 60] [76] [82]
正确的方式和代码给出的输出:
[7, 2] [16, 14] [28] [34] [40] [59, 56, 52] [68, 61, 64] [77] [83]
正如您所看到的,它的输出是混合的。第一个输出的问题是数字不能重复,并且一行不能超过3个数字。我无法找到这个bug是如何发生的,因为我为重复设置了一个try-except语句,为少于3个数字设置了一个if语句。如果您能发现任何问题并知道解决方法,请这样做。这对我来说意义重大。多谢各位
编辑-代码现在已经根据第一个答案进行了更改,但我得到了这些结果。还有一点很明显,它一行有3个以上的数字,它们是重复的数字。想不出办法请帮忙
在while循环中,更改以下内容-
至-
将
numOfNums
行设为公共行,然后改用len()
,因为最好不要使用.__len__()
结果:(没有重复,当我多次尝试任何错误结果时超过3次)
相关问题 更多 >
编程相关推荐