2015-10-14 31 views
0

我正在使用Python 3.5。我使用的是while循環,並改變用戶輸入的它裏面的變量(即已經由用戶定義):如何在while循環結束時定義內部定義的變量

variable = eval(input("[...]")) 
while [input isn't what the user is expected to enter]: 
    variable = eval(input("[Asking to enter a correct input]")) 

因此,當用戶輸入正確的值循環結束。然而,由於「變量」是在while循環內部定義的,所以當用戶爲「變量」賦予一個正確的值時,循環結束並且程序的其餘部分考慮「變量」的第一個(和不正確的)值。

我該如何做到這一點,記住的價值是在while循環內定義的值?

+4

它已經按你想要的方式工作了。如果變量是在while循環外部定義的,它將保留while循環的最後一次迭代的值。 –

+1

已經發生,while和for for循環不會在Python中創建新的作用域。 – jonrsharpe

+0

你知道將用戶輸入傳遞給'eval()'是一個_huge_安全問題,對嗎? –

回答

0

似乎您正在重新定義while循環內的全局變量。要引用外部「變量」,您需要將其聲明爲全局變量。看一看:

Using global variables in a function other than the one that created them

您聲明的方式,內部「變量」被創建爲從不同的變量外「變量」(即使它們具有相同的名稱),並在while循環結束時被丟棄,所以你最終引用原始的(全局)'變量'。

+0

如果您可以提供代碼示例,那將是非常好的 – bashaus

+0

在之前鏈接的問題中,此答案顯示了一種情況的代碼示例:http://stackoverflow.com/questions/423379/using-global-variables-in-a功能全,其它超的一 - 即創建的,他們/ 423668#423668 –

0

實際上,您的代碼已經是這種情況。如果while循環開始,將保留在循環內設置的值variable