3 回答

TA貢獻1827條經驗 獲得超4個贊
這實際上是一個非常有趣的問題。讓我們逐步了解這里發生的事情。
i = input()
假設您的用戶輸入3
. 現在,正如預期的那樣i
。3
for i in range (int(i)):
首先,range(int(i))
被稱為。當使用一個參數調用Pythonrange
時,會創建一個從0
(包括)到該參數(不包括)的范圍。由于i
是3
,這將創建一個包含值0
、1
和的范圍2
。
現在,您開始迭代,使用迭代變量i
。i
首先設置為0
,然后運行代碼塊,1
,運行代碼塊,然后2
,最后運行代碼塊。
但是,有一個竅門。由于 Python 的作用域規則,您的迭代變量i
實際上是與全局變量相同i
的變量。因此,在迭代期間,您將全局 i
值更新為0
, then 1
, then 2
。所以當我們開始下一個循環時:
for i in range (int(i)):
range(int(i))
is range(2)
,它創建了一個包含元素的范圍,0
而1
不是你想要的。
要解決此問題,請將迭代變量更改為其他變量——也許j
,正如另一個答案所暗示的那樣。

TA貢獻1846條經驗 獲得超7個贊
該變量i是全局的,該模塊中定義的任何 python 函數或類都可以訪問該變量:
你的鍵值和你的輸入變量是一樣的scope。
因此,您輸入3并且循環開始計數,0在循環i計數到2第一個循環之后,因此循環將從以下開始2:
i = input()
AliceShapeSequence = []
BobShapeSequence = []
for x in range (int(i)):
AliceShape = input()
AliceShapeSequence.append(AliceShape)
for x in range (int(i)):
BobShape = input()
BobShapeSequence.append(BobShape)
print(AliceShapeSequence)
print(BobShapeSequence)
只需將向上計數鍵更改為其他變量名就可以了。
為了便于理解,只需運行:
i = 3
AliceShapeSequence = []
BobShapeSequence = []
for i in range (int(i)):
AliceShape = i
AliceShapeSequence.append(AliceShape)
print("first loop: i = {0} after {1} loop cycle".format(i, i+1))
for i in range (int(i)):
BobShape = i
BobShapeSequence.append(BobShape)
print("second loop: i = {0} after {1} loop cycle".format(i, i+1))
print(AliceShapeSequence)
print(BobShapeSequence)
- 3 回答
- 0 關注
- 203 瀏覽
添加回答
舉報