我目前正在做一個項目,需要我創建一些在模塊中構建的Pythons,而無需藉助任何內置模塊。我的程序創建了一個長度爲500的元素,其隨機數字範圍爲1,999。我的問題出現在我的find_max(數字)函數中。在列表中的第三個元素的循環停止
def find_max(numbers):
i = 0
stop = 0
a = i+1
count = 0
if numbers[1] > numbers[2]:
greatest = numbers[1]
elif numbers[2] > numbers[1]:
greatest = numbers[2]
while count != 500:
if greatest > numbers[i]:
i += 1
count += 1
elif numbers[i] > greatest:
greatest = numbers[i]
i += 1
count += 1
else:
count+=1
print("The greatest: "+str(greatest))
mainmenu(numbers)
當我在排序我的列表之前或之後使用它時,它總是會停在第三個元素上。我find_min(數字)功能是最大的鏡像副本與< intstead的>,總是設法找到之前或排序名單後的最低值。我已經嘗試在範圍(len(list))中使用for count:作爲我的條件爲具有相同結果的循環。
OUTPUT:
請輸入您的菜單選項:最大
最大:10
LIST(後排序):
請輸入您的菜單選項:排序
[1,7,10,11,12,13,13,14,20,29,34,38,38,39,41,44,45,51,55,56,57,57,57,62,63 ,69,72,73,77,78,82,83,83,95,96,98,100,102 ,103,104,105,106,106,111,114,114,115,116,117,123,123,125,126,127,132,134,134,135,136,138,139,140,140 ,142,142,142,146,148,149,151,154,156,158,158,161,163,166,166,168,170,173,173,175,175,176,182,183,184 ,190,197,197,204,204,205,207,207,207,213,216,217,217,219,219,221,221,221,221,222,225,227,230,233,236 ,243,244,249,250,250,250,253,254,256,260,261,262,265,267,268,275,276,277,278,286,290,293,294,297,299,249,244,249,255,268,270,274,268,274,274,274,274,274,274,274,274,274 ,301,302,304,305,307,308,308,309,315,318,319,322,325,332,333,334,337,338,338,341,342,342,343,344,345 ,347,348,352,354,355,355,355,357,357,359,362,363,367,368,370,373,374,374,378,385,387,387,391,391,392號公報,393,399,401,403,409,417,418,419,419,421,421,424,424,428,428,430,431, ,441,446,447,449,450,450,452,454,456,457,457,457,457,459,463,464,467,470,470,471,475,475,476,478,479,以及其中之一或以上。 ,484,489,490,501,503,504,504,507,511,513,513,513,516,516,522,532,533,534,534,537,538,538,540,548,552,以及其中的一個或多個, ,557,557,562,563,563,564,572,573,574,576,577,579,583,583,584,587,588,589,592,592,592,594,595,596,598號公報中所公開的那些, ,601,602,604,605,605,606,606,607,617,617,619,622,622,625,626,627,629,631,634,636,637,642,642,643,643,以及632。 ,653,654,656,658,658,663,669,672,672,673,674,674,679,680,681,682,683,685,692,695,696,696,698,699,709中的任何一個或多個, ,709,710,710,711,717,727,727,735,740,741,743,746,754,754,755,757,764,765,765,768,769,773,773,783,786,及其組合,788,791,792,792,793,798,800,803,803,809,809,809,813,813,813,814,815,815,816,817,817,819,821,822,823,822,823,813,813,813,813,813,813,814,815,815,816,817,817,819,821,822,823, ,824,824,826,827,829,829,830,830,831,831,834,835,839,840,841,841,842,842,842,843,843,843,844,850,853和834。 ,854,863,863,864,868,869,870,875,877,879,880,880,882,884,884,886,887,887,889,893,894,896,896,897,897,以及其它的一些實施例中, ,899,901,903,903,903,905,906,909,910,913,916,916,917,917,919,920,920,921,922,922,923,926,926,926,927,以及其中,所述第一和第二分支,928,931,932,932,935,935,936,937,938,943,949,951,951,953,954,956,958,958,959,960,966,974,974,975,976,973,931,932,932,935, ,978,979,983,984,987,991,993,993,994,995,998,999]
UPDATE:
下面是適用於問題的代碼:
def initial():
numbers = []
i = 0
while i <= 499:
temp = random.randint(1,999)
numbers.append(temp)
i += 1
return numbers
def find_min(numbers):
i = 0
if numbers[1] < numbers[2]:
least = numbers[1]
elif numbers[2] < numbers[1]:
least = numbers[2]
for element in range(len(numbers)):
if least < numbers[i]:
i += 1
elif numbers[i] < least:
least = numbers[i]
i += 1
print("The lowest: "+str(least))
mainmenu(numbers)
對於你的學習,這是完全可以用調試器解決的(https://docs.python.org/2/library/pdb.html)如果你自己找出原因,它會延長。 – Mai
你並不需要索引來解決這個問題。 '數字中的數字:'將迭代每個數字。 –
有幾個問題。使用筆和紙以及測試裝置瀏覽代碼。如果數字[1] ==數字[2],哪個初始值最大呢?如果數字[i] ==最大,你的while循環會發生什麼?我想你會發現你的測試數據對於第一批數字可能具有相同的值。 – Kif