Python彩票号码和检查器

Python Lottery number and checker

我试图为一行中的任意数字创建一个随机数生成器,然后重复这些随机数,直到达到"目标"数字。用户将在序列中输入数字的数量,并输入他们要拍摄的序列。程序将反复运行随机数,直到目标序列被击中,然后程序将吐出所需的重复次数。我的问题是,它一直持续下去,似乎从来没有达到中断函数,因为num不等于目标或什么。到目前为止,我有这个,我觉得我很接近

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#Module to get amount of numbers in the sequence
def getRange():
    Range =int(input("How many digits in your number?"))
    return Range
#Target Sequence input
def getTarget():
    Target= []
    Target =input("What is your target sequence?")

    return Target

def lotteryNo(Range):
    import random
    integer = []

    for number in range(0 , Range):
        integer.append(random.randint(0, 9))  
    return integer

def printDigits(Range,Target):

    print("Your target list is",Target)
    for rep in range(10000000):
        num=(lotteryNo(Range))
        print(num)
        if num == Target:
            rep=rep + 1
            print("The number of repetitions is",rep)
            break


        else:
            rep=rep+1



def main():
    Range=getRange()
    Target=getTarget()
    printDigits(Range,Target)
main()
#End


比较的问题是,您测试的是Target,它是一个字符串,而num是一个整数列表。它永远不会匹配,不管你处理的是什么整数和什么字符串。您需要比较两个相似的类型以获得有意义的结果。

看起来您希望getTarget函数返回一个列表,因为您正在将Target初始化为空字符串。但是,当您用Target = input(...)覆盖它时,该列表将被丢弃。

您可能需要类似于Target = list(map(int, input()))的东西,它将输入字符串的每个字符转换为整数,然后将它们全部打包到一个列表中。另一种写作方式是Target = [int(digit) for digit in input()]

还有一个与当前问题无关的建议:python的通用命名约定是将lower_case_names_with_underscores用于变量和函数名,保留UpperCaseNames用于类。您不必遵循这个约定,但是如果您要与任何人共享您的代码,这可能是一个好主意。您可以阅读PEP8了解更多的风格建议。


您的问题是,其中一个数字是列表,另一个是输入的字符串。

更改目标以获得int

1
2
3
def getTarget():
    Target =int(input("What is your target sequence?"))
    return Target

把lotteryno换成int

1
2
3
4
5
6
def lotteryNo(Range):
    import random
    integer = 0
    for number in range(0 , Range):
        integer += random.randint(0, 9) * (10**number)
    return integer

现在,您的if num == Target:比较应该可以工作,因为它正在比较同一类型的两个变量。