Python可以将变量存储在函数中供以后使用吗?
这是下面的统计计算器(未完成):
#Statistics Calculator
import random
def main(mod):
print ''
if (mod == '1'):
print 'Mode 1 activated'
dat_entry = dat()
elif (mod == '2'):
print 'Mode 2 activated'
array = rndom(dat_entry)
elif (mod == '3'):
print 'Mode 3 activated'
array = user_input(dat_entry)
elif (mod == '4'):
disp(array)
elif (mod == '5'):
mean = mean(array)
elif (mod == '6'):
var = var(array)
elif (mod == '7'):
sd = sd(array, var)
elif (mod == '8'):
rang(array)
elif (mod == '9'):
median(array)
elif (mod == '10'):
mode(array)
elif (mod == '11'):
trim(array)
print ''
def dat():
dat = input('Please enter the number of data entries. ')
return dat
def rndom(dat_entry):
print 'This mode allows the computer to generate the data entries.'
print 'It ranges from 1 to 100.'
cntr = 0
for cntr in range(cntr):
array[cntr] = random.randint(1,100)
print 'Generating Data Entry', cntr + 1
def rndom(dat_entry):
print 'This mode allows you to enter the data.'
cntr = 0
for cntr in range(cntr):
array[cntr] = input('Please input the value of Data Entry ',
cntr + 1, ': ')
run = 0 #Number of runs
mod = '' #Mode
cont = 'T'
while (cont == 'T'):
print 'Statistics Calculator'
print 'This app can:'
print '1. Set the number of data entries.'
print '2. Randomly generate numbers from 1 to 100.'
print '3. Ask input from you, the user.'
print '4. Display array.'
print '5. Compute mean.'
print '6. Compute variance.'
print '7. Compute standard deviation.'
print '8. Compute range.'
print '9. Compute median.'
print '10. Compute mode.'
print '11. Compute trimmed mean.'
print ''
if (run == 0):
print 'You need to use Mode 1 first.'
mod = '1'
elif (run == 1):
while (mod != '2' or mod != '3'):
print 'Please enter Mode 2 or 3 only.'
mod = raw_input('Please enter the mode to use (2 or 3): ')
if (mod == '2' or mod == '3'):
break
elif (run > 1):
mod = raw_input('Please enter the mode to use (1-11): ')
# Error line
main(mod)
cont = raw_input("Please enter 'T' if and only if you want to continue"
" using this app. ")
run += 1
print ''
这一行是输出(修剪): 模式2已激活
Traceback (most recent call last):
File "F:\Com SciActivities\Statistics.py", line 81, in <module>
main(mod)
File "F:\Com Sci Activities\Statistics.py", line 10, in main
array = rndom(dat_entry)
UnboundLocalError: local variable 'dat_entry' referenced before assignment
请告诉我原因......
答案 0 :(得分:0)
逻辑存在问题。如果直接进入模式2,这将导致此错误,因为&#34; dat_entry&#34;将是未定义的。
您已选择模式2,此时它不知道dat_entry是什么:
elif (mod == '2'):
print 'Mode 2 activated'
array = rndom(dat_entry)
一旦用户选择了选项2,您应该在主循环或某处某处声明dat_entry:
if (mod == '2' or mod == '3'):
break
答案 1 :(得分:0)
这部分代码存在问题。
def rndom(dat_entry):
Python不知道&#39; dat_entry&#39;在rndom(dat_entry)中,因为它之前尚未在函数中分配,这就是它抛出错误的原因。
我检查了你的rndom(dat_entry)函数,但是我看到了&#39; dat_entry&#39;不在任何地方使用。所以这就是我的建议。你可以替换
def rndom():
有:
BufferedWaveProvider
也许这会解决这部分代码。
答案 2 :(得分:0)
如果不满足第一个if
条件,它将不会执行与之关联的代码块。由于不满足第一个if
条件,因此不会执行赋值dat_entry = dat()
。
因此,在您的情况下,您可以执行以下操作:
elif (mod == '2'):
print 'Mode 2 activated'
array = rndom(dat())
elif (mod == '3'):
print 'Mode 3 activated'
array = user_input(dat())
如果您需要任何其他说明,请告诉我。