while循环在Python中有局部变量吗?
我试着使用这样的while语句: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时,它会
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),我只做了其中一个,所以它不起作用。谢谢,这样做了。好的,用休息代替。谢谢