我有以下程式,用戶在其中輸入一個數字,并將 X 放置在矩陣上的位置。
出于教學目的,我正在嘗試僅使用選擇來解決它(目前)。
您會注意到它適用于除 0 之外的所有數字。最后一個 elif 用于小于 1 的數字 - 例如 0。代碼告訴它把 X 放在位置 0,0,但它把它放在 7 中。
這是怎么回事? https://trinket.io/python/987e8c46d7
注意,我只添加了最后一個 elif,因為第一個也應該處理小于 7 的數字的 elif 不起作用。我如何使用相同的結構來處理這個問題。
然后我想在教學的基礎上查看 if 陳述句并查看重復或不需要的復雜性的區域,以表明它可以進一步簡化以獲得更優雅的代碼。
def matrix():
print("---The Matrix---")
#create a 1d array of 7 stars
matrix1=[
["*","*","*","*","*","*","*"],
["*","*","*","*","*","*","*"],
["*","*","*","*","*","*","*"],
["*","*","*","*","*","*","*"],
["*","*","*","*","*","*","*"],
["*","*","*","*","*","*","*"],
["*","*","*","*","*","*","*"]
]
#user enters a number
number=int(input("Enter number:"))
#you are always finding the remainder on each row to place the X
remainder=number%7
#an 'X' is placed in the position of the number
#remainder-1 because we start at index 0
if number<=7:
matrix1[0][remainder-1]="X"
elif number>7 and number<15:
matrix1[1][remainder-1]="X"
elif number>14 and number<22:
matrix1[2][remainder-1]="X"
elif number>21 and number<29:
matrix1[3][remainder-1]="X"
elif number>28 and number<36:
matrix1[4][remainder-1]="X"
elif number>35 and number<43:
matrix1[5][remainder-1]="X"
elif number>42 and number<50:
matrix1[6][remainder-1]="X"
elif number<1:
matrix[0][0]=="X"
#the updated matrix is printed.
print(matrix1)
matrix()
uj5u.com熱心網友回復:
您的 el-if 陳述句應如下所示。在您的實作中,if number <=7當用戶輸入 0 作為輸入數字時,代碼會執行陳述句。所以,if number<1:宣告應該放在第一位。
...
if number<1:
matrix1[0][0]="X"
elif number<=7:
matrix1[0][remainder-1]="X"
elif number>7 and number<15:
matrix1[1][remainder-1]="X"
elif number>14 and number<22:
matrix1[2][remainder-1]="X"
elif number>21 and number<29:
matrix1[3][remainder-1]="X"
elif number>28 and number<36:
matrix1[4][remainder-1]="X"
elif number>35 and number<43:
matrix1[5][remainder-1]="X"
elif number>42 and number<50:
matrix1[6][remainder-1]="X"
...
uj5u.com熱心網友回復:
If number < 1, then number <= 7, 所以你的if陳述句中的第一個條件將在它到達number < 1檢查之前應用。在這種情況下的余數是0,因此它將索引matrix1[0][-1],這是該行中的最后一項。您應該將number < 1檢查移到if陳述句的開頭以解決此問題。另外,我認為您在該代碼中有一個錯字,因為您正在訪問matrix而不是matrix1,并且您使用的是==運算子而不是賦值。
if number < 1:
matrix1[0][0] = "X"
elif number<=7:
matrix1[0][remainder-1]="X"
elif number>7 and number<15:
matrix1[1][remainder-1]="X"
elif number>14 and number<22:
matrix1[2][remainder-1]="X"
elif number>21 and number<29:
matrix1[3][remainder-1]="X"
elif number>28 and number<36:
matrix1[4][remainder-1]="X"
elif number>35 and number<43:
matrix1[5][remainder-1]="X"
elif number>42 and number<50:
matrix1[6][remainder-1]="X"
uj5u.com熱心網友回復:
您可以通過對第一個索引使用 int 除法來更簡單地做到這一點,而不是使用一堆if陳述句將每個范圍單獨映射到相同的結果:
def matrix():
print("---The Matrix---")
# create a 2d array of 7x7 stars
matrix1 = [["*" for _ in range(7)] for _ in range(7)]
number = int(input("Enter number: "))
matrix1[number // 7][number % 7] = "X"
# print the matrix
print('\n'.join(''.join(row) for row in matrix1))
matrix()
---The Matrix---
Enter number: 0
X******
*******
*******
*******
*******
*******
*******
---The Matrix---
Enter number: 48
*******
*******
*******
*******
*******
*******
******X
如果您希望用戶輸入的數字從 1-49 而不是 0-48,只需number在用戶輸入后減去 1 。您可以使用min和來“剪輯”低于 1 和高于 49 的輸入max:
number = int(input("Enter number: ")) - 1
number = max(number, 0)
number = min(number, 48)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383212.html
上一篇:ReactTypescript:陣列不會映射所有專案
下一篇:創建檔案夾和移動檔案
