Python没有启动循环

时间:2016-09-08 21:26:25

标签: python python-3.x for-loop

old = [[0 for x in range(3)] for y in range(10)]
count =0
# check if the number has non-repeating digits
def different(number):
    digit_list = [0] * 4
    i = 0
    while i:
        digit_list[i] = number%10
        number /= 10
        i += 1

    for x in range(0,3):
        for y in range(x+1,3):
            if digit_list[x] == digit_list[y]:
                return False
    return True
# save the tried numbers, plus and minus values
# for prediction of the next number
def save(number,plus,minus):
    global count
    old[count][0] = number
    old[count][1] = plus
    old[count][2] = minus
    count += 1
    return
# compare for plus values
def get_plus(number1,number2):
    ret_value = 0
    for x in range(0, 3):
        if number1 % 10 == number2 % 10:
            ret_value += 1
        number1 /= 10
        number2 /= 10
    return ret_value
# compare for minus values
def get_minus(number1,number2):
    temp = [[0]*4 for i in range(2)]
    ret_value = 0
    for x in range(0,3):
        temp[0][x] = number1 % 10
        temp[0][x] = number2 % 10
        number1 /= 10
        number2 /= 10
    for x in range(0,3):
        for y in range(0,3):
            if x != y:
                if temp[0][x] == temp[1][y]:
                    ret_value += 1
    return ret_value
# compare the number to be asked with the numbers in the array
def control(number):
    for x in range(0,count-1):
        if get_plus(old[x][0],number) != old[x][1]:
            return False
        if get_minus(old[x][0],number) != old[x][2]:
            return False
    return True

def main():
    flag = False
    print('1023 ??')
    plus = input('plus ?')
    minus = input('minus ?')
    save(1023, plus, minus)
    print('4567 ??')
    plus = input('plus ?')
    minus = input('minus ?')
    save(4567, plus, minus)

    for i in range(1024, 9876):
        if different(i):
            if control(i):
                print(i + ' ??')
                plus = input('plus ?')
                minus = input('minus ?')
                save(i, plus, minus)
                if plus == 4 and minus == 0:
                    print('I WON !!!')
                    flag = True
                    break
    if not flag:
        print('False')
    return
main()

我想在python中为mindgame做一个AI。但是在这个函数中它甚至没有启动for循环。谁能知道为什么?

1 个答案:

答案 0 :(得分:0)

不同()函数中的while循环不执行任何操作,而while(0)将阻止循环运行。即使它会运行,你的different()函数也总是返回false。至少在最后一个循环中,它会将digit_list [3] == digit_list [3]作为两个循环范围进行比较,直到3.这始终为true,函数将返回false。因此,永远不会输入主循环中的代码。

def different(number):
    digit_list = [0] * 4
    i = 0
    while i:
        digit_list[i] = number%10
        number /= 10
        i += 1

    for x in range(0,3):
        for y in range(x+1,3):
            if digit_list[x] == digit_list[y]:
                return False
    return True

试试这个:

import random

def different(num):
    digits = []
    while num >= 1:
        cur = num%10
        if cur in digits:
            return False
        digits.append(cur)
        num = (num - cur) / 10
    return True

for i in range(0, 10000):
    rand = random.randrange(1000, 10000)

    if not different(rand):
        print(rand)