我正在编写一个代码,用户输入6'彩票' 1到59之间的数字 - 这个位工作正常。 然后计算机从1到59之间选择6个随机数 - 该位也很有效。 然而,程序必须比较两个阵列中的哪些数字匹配,并且必须输出“(数字)匹配”,此时它匹配某些数字,但存在逻辑错误某处。
为了弄清楚发生了什么,我尝试更改程序,以便计算机选择1到6之间的6个数字,因此它所提供的每个数组都具有完全相同的数字。我输入用户的号码为1到6,所以从技术上来说,程序应该输出“你有6场比赛”,而是输出“你们有4场比赛' 39;对于其中一些人来说,有些人有3场比赛,有些则有2场比赛。
SELECT
Store,
Item,
Count(Price) as CT,
Price
FROM @table2
GROUP BY Store,Item,Price
答案 0 :(得分:1)
我认为问题出在这些方面:
if usernumbers[counter] in lotterynumbers:
matches = matches + 1 #check computer numbers against the user numbers
由于这是在生成计算机编号的循环中,因此仅针对早期计算机编号检查早期用户编号。尝试替换为:
if compnum in usernumbers:
matches = matches + 1
即,“是计算机在用户号码列表中的任何位置选择的号码”。
答案 1 :(得分:1)
问题是您在计算机选择了所有六个号码之前检查用户的号码。例如,当您检查用户数[2]时,计算机到目前为止只选择了3个数字;如果用户的选择匹配后一个数字之一,你会错过它。
使用两个单独的循环:
for count in range(6):
compnum = random.randint(1,59) # choose a number between 1 and 59
while compnum in lotterynumbers:
compnum = random.randint(1,59)
lotterynumbers.append(compnum)
matches = 0
for count in range(6):
if usernumbers[count] in lotterynumbers:
matches += 1
当您学习更多Python时,有很多事情可以做得更好,但这可以帮助您解决当前的问题。
PYTHONIC METHOD
结果:
computer_numbers = random.sample(range(1,60), 6)
matches = sum([user_numbers[i] in computer_numbers for i in range(6)])
输入所有六个用户号码后,您可以进行抽奖抽奖并进行检查。请注意,如果您愿意,可以将其折叠为一行。