while循环在Python中有局部变量吗?

while循环在Python中有局部变量吗?,python,Python,我试着使用这样的while语句: o = 0 while o == 0: try: n = int(raw_input("Which number do you want to begin with?")) o = 1 except: o = 0 print "Please use a valid number." 但是,当我稍后尝试使用变量n时,它会

我试着使用这样的while语句:

    o = 0
    while o == 0:
        try:
            n = int(raw_input("Which number do you want to begin with?"))
            o = 1
        except:
            o = 0
            print "Please use a valid number."
但是,当我稍后尝试使用变量n时,它会给出赋值“UnboundLocalError”之前引用的“局部变量'n”。这意味着在我使用的def中无法将n识别为变量,因为它仅存在于while语句中?这可能吗? 整个代码:

import time
from sys import argv
import os
os.system("cls")

print "Welcome to Number counter 2.0!"
a = True
def program():
    global a
    if a == False:
        os.system("cls")
        o = 0
        while o == 0:
            try:
                n = int(raw_input("Which number do you want to begin with?"))
                o = 1
            except:
                o = 0
                print "Please use a valid number."
if n == "/historyKeep false":
    if a == False:
        print "Command historyKeep is already set to false."
    else:
        a = False
        print "Command set successfully."
elif n == "/historyKeep true":
    if a == True:
        print "Command historyKeep is already set to true."
    else:
        a = True
        print "Command set successfully."
if n == "/historyKeep false":
    n = raw_input("Which number do you want to begin with?")    
elif n == "/historyKeep true":
    n = raw_input("Which number do you want to begin with?")    

d = raw_input("How many seconds between each number?")
d = int(d)
total_s = n * d
while n > 0:
    print n
    time.sleep(d)
    n = n - 1
print "Done in", total_s, "seconds in total!"
end_q = raw_input("Exit or retry? (e/r)")
if end_q == "e":
    os.system("cls")
    print "Exiting."
    time.sleep(0.5)
    os.system("cls")
    print "Exiting.."
    time.sleep(0.5)
    os.system("cls")
    print "Exiting..."
    time.sleep(0.5)
    os.system("cls")
    exit(0)
elif end_q == "r":
    program()

program()

n未在您试图使用它来修复此问题的范围内定义。请在while循环和while循环所在的if语句之外定义它:

global a
n = 0

然后,当您询问用户以什么数字开始时,该值将替换为0,您应该可以这样做。另外,与其声明
全局a
,为什么不为
程序()创建一个输入参数呢
function?

您在开始时设置了
a=True
。然后测试
a==False
,如果是,则只设置
n
。但是,然后测试
n==“/history…”
<此时未设置代码>n


在使用之前,您需要确保n已分配。仅在未执行的分支中提及它是不够的。

为了确保,首先在循环之外声明
n

n = None
while True:
    try:
        n = int(raw_input("Text..."))
        break
    except:
        print("Please enter a valid number!")

注意:通常,您会使用
break
退出循环。这是因为你的方法需要一个额外的变量,它会占用更多的内存(不多,但如果你继续这样做,它会堆积起来)。

如果
a==False
,那么第一个输入循环运行,
n
将永远不会等于那些
“/historyKeep…”
值,所以那些
if
语句都不能完成任何任务…为什么这个程序坚持要为
n
获取一个整数,然后反复检查它是否是字符串(更不用说它也重复了这些检查)?这不是一个解决方案,因为它在
循环之外,这是一个修复,因为它在
if
分支之外。如何准确地生成输入参数?
def program(a):
并称之为
program(a)
。无论你在哪里调用函数
program()
你都必须用
program(a)
噢,好的。我试着这么做,但忘了将所有的program()替换为program(a),我只做了其中一个,所以它不起作用。谢谢,这样做了。好的,用休息代替。谢谢