我正在尝试为一行中的任意数量的数字创建一个随机数生成器,然后重复这些随机数,直到" target"号码已到达。 用户将同时输入序列中的数字数和它们拍摄的序列。程序将一遍又一遍地运行随机数,直到命中目标序列,然后程序将吐出重复的次数。 我的问题是它一直在继续,似乎永远不会打破休息功能,因为数字不等于目标或其他东西。 到目前为止,我有这个,我认为我非常接近
#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
答案 0 :(得分:1)
您的比较问题是您正在测试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
。您不必遵循此惯例,但如果您要与任何人分享您的代码,那么这可能是一个好主意。您可以阅读PEP 8了解更多样式建议。
答案 1 :(得分:0)
您的问题是因为您的某个号码是一个列表而另一个是来自输入的字符串。
更改目标以获得int
def getTarget():
Target =int(input("What is your target sequence?"))
return Target
更改lotteryNo以获得int
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:
比较应该可以正常工作,因为它正在比较两个相同类型的变量。