Python彩票计划中的逻辑错误

时间:2017-01-10 20:46:56

标签: python arrays python-2.7 debugging string-matching

我正在编写一个代码,用户输入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

2 个答案:

答案 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

  1. 使用 random.sample 从您提供的人口中抓取六个号码。
  2. 范围(1,60)为您提供1到59的整数。
  3. 要计算匹配数,请立即进行所有六项检查,然后将 True 结果相加。
  4. 结果:

    computer_numbers = random.sample(range(1,60), 6)
    matches = sum([user_numbers[i] in computer_numbers for i in range(6)])
    

    输入所有六个用户号码后,您可以进行抽奖抽奖并进行检查。请注意,如果您愿意,可以将其折叠为一行。