对于我的加密代码,我试图从一个函数返回一个值,因为它在下一个函数中使用。我一直收到错误,告诉我名字' cipher_text'没有定义。请帮忙!
错误:
(第7行)
解密(cipher_text,shift)
NameError:name' cipher_text'未定义
private void data() {
final String LIGHTSENS, LIGHTDATA, TEMPSENSOR, TEMPDATA, AMBTEMPSENSOR, AMBTEMDATA, PRESSURESENS, PRESSUREDATA, LATTITUDE, LONGITUDE, DATE, TIME;
LIGHTSENS = String.valueOf(lr1);
LIGHTDATA = String.valueOf(ld1);
TEMPSENSOR = String.valueOf(tr1);
TEMPDATA = String.valueOf(td1);
AMBTEMPSENSOR = String.valueOf(atr1);
AMBTEMDATA = String.valueOf(atd1);
PRESSURESENS = String.valueOf(pr1);
PRESSUREDATA = String.valueOf(pd1);
LATTITUDE = String.valueOf(la);
LONGITUDE = String.valueOf(lg);
StringRequest stringRequest = new StringRequest(Request.Method.POST, Server_url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(sens.this, response.toString(), Toast.LENGTH_SHORT).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(sens.this, error.toString(), Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
params.put("LIGHTSENS", LIGHTSENS);
params.put("LIGHTDATA", LIGHTDATA);
params.put("TEMPSENSOR", TEMPSENSOR);
params.put("TEMPDATA", TEMPDATA);
params.put("AMBTEMPSENSOR", AMBTEMPSENSOR);
params.put("AMBTEMDATA", AMBTEMDATA);
params.put("PRESSURESENS", PRESSURESENS);
params.put("PRESSUREDATA", PRESSUREDATA);
params.put("LATTITUDE", LATTITUDE);
params.put("LONGITUDE", LONGITUDE);
Log.d(TAG, "@@@ params:" + params + " URL:" + Server_url);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(sens.this);
requestQueue.add(stringRequest);
}
答案 0 :(得分:1)
你的问题在
行 encryption (user_input, shift)
decryption (cipher_text, shift)
正如例外告诉你的那样。如果你在你的问题中包含了回溯,那将非常清楚。
在一个函数中声明的变量是该函数的本地变量。这是件好事!它可以让你编写像
这样的函数def foo():
x = 1
return x * x
def bar():
for x in xrange(10):
print "Count: %s" % x
没有他们互相吹嘘。
如果你调用一个返回某个东西而你想要使用它的函数,你需要直接使用它,或者将它分配给某个东西:
# assign
x = foo()
print x
# use directly
print "x is %s" % foo()
在您的情况下,您可以进行最小程度的更改,将encryption
的结果分配给新变量cipher_text
def main():
...
cipher_text = encryption(user_input, shift)
decryption(cipher_text, shift)
将其他任何东西称为等同(虽然不太清楚)
foobar = encryption(user_input, shift)
decryption(foobar, shift)
甚至完全避免使用变量
decryption(encryption(user_input, shift), shift)
答案 1 :(得分:0)
def main()
应为def main(cipher_text)
您还可以为cipeher_text
设置默认值:
def main(cipher_text=""):
user_input = input ("Enter string: ")
shift = int(input ("Enter a shift that is between 1 and 26: "))
while shift<1 or shift>26:
shift = input ("ERROR: Shift must be between 1 and 26: ")
encryption (user_input, shift)
decryption (cipher_text, shift)
frequency (user_input)
然后只需使用值示例main()
来调用main('some value')
,或者如果您之前定义了默认值,则只需为空。