打算是一个有限的循环,但似乎是无限的
Intended to be a limited loop, but seems to be infinite
我想完成以下任务:
Given a number N, let's say it's 5. I want to generate a list with all numbers in the range from 1 to N (5) with no duplicates in a random order.
所以我写了这段代码。使用这些调试输出我意识到循环几乎是无限的,即使它不应该是。
import random
def generate(n):
amount = n
print('Line 1 success') #TODO:DEBUG
randnum = 0
print('Line 2 success') #TODO:DEBUG
finished = False
print('Line 3 success') #TODO:DEBUG
nums = []
print('Line 4 success') #TODO:DEBUG
while amount != 0:
while finished != True:
print('Line 5 success', amount) #TODO:DEBUG
randnum = random.randint(1,n)
print('Line 6 success') #TODO:DEBUG
if not randnum in nums:
finished = True
nums.append(randnum)
print('Generation', amount, 'success') #TODO:DEBUG
print(nums, ' ; ', randnum) #TODO:DEBUG
print('Line 7 success') #TODO:DEBUG
amount = amount - 1
print('Line 8 success') #TODO:DEBUG
finished = False
print('Line 9 success') #TODO:DEBUG
print(nums)
generate(5)
它给了我一个无限循环,我不知道为什么以及如何解决它。
为什么是死循环?
这个呢?
import random
def generate(n):
l = []
for i in range(0,n,1):
l.append(i)
random.shuffle(l)
根据您的评论,这应该有效:
import random
def generate(n):
l = []
z = 0
while z < n:
x = random.randint(0,n)
if x not in l:
z +=1
l.append(x)
return l
您需要做一个小改动 @ amount = amount -1
这样,每次生成唯一的 randnum 时,您的列表都会被附加。
我还更新了循环中断条件以降低时间复杂度。
import random
def generate(n):
amount = n
randnum = 0
finished = False
nums = []
while amount > 0 and finished != True:
randnum = random.randint(1,n)
if not randnum in nums:
finished = True
nums.append(randnum)
amount = amount - 1
finished = False
print(nums)
generate(5)
OUTPUT : [4, 1, 3, 5, 2]
我想完成以下任务:
Given a number N, let's say it's 5. I want to generate a list with all numbers in the range from 1 to N (5) with no duplicates in a random order.
所以我写了这段代码。使用这些调试输出我意识到循环几乎是无限的,即使它不应该是。
import random
def generate(n):
amount = n
print('Line 1 success') #TODO:DEBUG
randnum = 0
print('Line 2 success') #TODO:DEBUG
finished = False
print('Line 3 success') #TODO:DEBUG
nums = []
print('Line 4 success') #TODO:DEBUG
while amount != 0:
while finished != True:
print('Line 5 success', amount) #TODO:DEBUG
randnum = random.randint(1,n)
print('Line 6 success') #TODO:DEBUG
if not randnum in nums:
finished = True
nums.append(randnum)
print('Generation', amount, 'success') #TODO:DEBUG
print(nums, ' ; ', randnum) #TODO:DEBUG
print('Line 7 success') #TODO:DEBUG
amount = amount - 1
print('Line 8 success') #TODO:DEBUG
finished = False
print('Line 9 success') #TODO:DEBUG
print(nums)
generate(5)
它给了我一个无限循环,我不知道为什么以及如何解决它。
为什么是死循环?
这个呢?
import random
def generate(n):
l = []
for i in range(0,n,1):
l.append(i)
random.shuffle(l)
根据您的评论,这应该有效:
import random
def generate(n):
l = []
z = 0
while z < n:
x = random.randint(0,n)
if x not in l:
z +=1
l.append(x)
return l
您需要做一个小改动 @ amount = amount -1
这样,每次生成唯一的 randnum 时,您的列表都会被附加。
我还更新了循环中断条件以降低时间复杂度。
import random
def generate(n):
amount = n
randnum = 0
finished = False
nums = []
while amount > 0 and finished != True:
randnum = random.randint(1,n)
if not randnum in nums:
finished = True
nums.append(randnum)
amount = amount - 1
finished = False
print(nums)
generate(5)
OUTPUT : [4, 1, 3, 5, 2]