import random
def foo():
list_of_odd_num = []
for i in range (1, 10000, 2):
list_of_odd_num.append(i)
return list_of_odd_num
def bar():
list_of_uppercase_letters = []
for k in range(1, 100):
rand_num = random.randint(65, 90)
letter = chr(rand_num)
k = list_of_uppercase_letters.append(letter)
return list_of_uppercase_letters
def qux(any_list: list):
i = 0
while i < 20:
for j in range (len(any_list)):
rand_01 = random.randint(0,1)
if rand_01 == 1:
i = i 1
any_list.insert(j, '?')
return any_list
print(qux(bar()))
輸出:['?', 'D', 'I', '?', 'Y', '?', 'X', 'Q', 'L', 'E', '?', '?' , 'I', '?', 'H', '?', '?', '?', '?', 'E', '?', '?', 'B', '?', ' ?', '?', 'G', '?', '?', '?', '?', 'S', '?', 'U', 'W', 'I', 'G' , '?', '?', 'L', '?', 'J', 'M', '?', '?', 'A', 'K', '?', 'X', ' ?', 'Y', 'J', 'L', 'S', '?', '?', '?', 'I', '?', 'Q', '?', 'S' , 'L', 'R', '?', '?', 'L', '?', '?', '?', 'M', 'K', 'E', '?', 'B', '?', 'V', '?' , 'I', 'L', '?', 'S', '?', '?', 'O', 'F', '?', 'O', 'S', 'J', ' ?', 'P', '?', 'X', '?', 'T', 'B', '?', 'Q', 'N', 'T', 'H', 'F' , 'A', 'D', 'E', 'P', 'Y', 'Z', 'Q', 'M', 'X', 'I', 'H', 'Z', ' F', 'Q', 'G', 'Q', 'B', 'A', 'G', 'B', 'R', 'N', 'J', 'K', 'C' , 'P', 'P', 'E', 'E', 'A', 'R', 'P', 'S', 'A', 'O', 'A', 'I', 'R', 'B', 'W', 'V' , 'M', 'I', 'P']
我試圖在一個串列中的隨機索引中插入 20 個“?”s,該串列作為函式 qux() 的引數給出,而不通過 writng 條件 i < 20 的 while 回圈覆寫串列中的原始專案,然后在for 回圈 io 一直將 i 加起來,直到它應該達到 20,然后完成 while 回圈,但最終發生的是程式繼續列印“?”s 超出任何串列中的數字 20,除非它是空的
uj5u.com熱心網友回復:
您的問題是 i 變數是在 for 回圈中本地定義的,而 while 回圈不會立即識別 i=20 的范圍。因此,要解決此問題,您可以將所有內容放入一個大的 while 回圈中:
while i == len(any_list) 20
uj5u.com熱心網友回復:
您在 while 回圈內有一個 for 回圈,只有當 for 回圈終止時,您的外回圈才會驗證 i<20。
你應該做這樣的事情:
def qux(any_list: list):
i = 0
for j in range (len(any_list)):
rand_01 = random.randint(0,1)
if rand_01 == 1:
i = i 1
any_list.insert(j, '?')
if i = 20:
break
return any_list
uj5u.com熱心網友回復:
添加值時內回圈不會中斷,因此,它可能會?在檢查外回圈條件(導致 too many ?)之前將多個添加到串列中。您可以像這樣修復代碼:
import random
def foo():
list_of_odd_num = []
for i in range (1, 10000, 2):
list_of_odd_num.append(i)
return list_of_odd_num
def bar():
list_of_uppercase_letters = []
for k in range(1, 100):
rand_num = random.randint(65, 90)
letter = chr(rand_num)
k = list_of_uppercase_letters.append(letter)
return list_of_uppercase_letters
def qux(any_list: list):
i = 0
while i < 20:
for j in range (len(any_list)):
rand_01 = random.randint(0,1)
if rand_01 == 1:
i = i 1
any_list.insert(j, '?')
if i == 20:
break
return any_list
print(qux(bar()))
但是,您的代碼不會導致隨機的均勻分布,?并且不必要地復雜化。你可以這樣做:
import random
def foo():
list_of_odd_num = []
for i in range (1, 10000, 2):
list_of_odd_num.append(i)
return list_of_odd_num
def bar():
list_of_uppercase_letters = []
for k in range(1, 100):
rand_num = random.randint(65, 90)
letter = chr(rand_num)
k = list_of_uppercase_letters.append(letter)
return list_of_uppercase_letters
def qux(any_list: list):
i = 0
for i in range(20):
any_list.insert(random.randint(0, len(any_list) - 1), '?')
return any_list
print(qux(bar()))
此外,foo可以bar簡化:
import random
import string
def foo():
# why do you need this though?
return list(range(1, 1000, 2))
def bar():
return random.choice(string.ascii_uppercase)
def qux(any_list: list):
for i in range(20):
any_list.insert(random.randrange(len(any_list)), '?')
return any_list
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534624.html
上一篇:使用一個拆分回歸而不是回圈從100個回歸中提取系數?
下一篇:為什么在這個C回圈中乘法加倍?
