Python函数 - 返回值未定义'

时间:2017-03-15 06:33:59

标签: function python-3.x encryption return-value

对于我的加密代码,我试图从一个函数返回一个值,因为它在下一个函数中使用。我一直收到错误,告诉我名字' 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);
    }

2 个答案:

答案 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'),或者如果您之前定义了默认值,则只需为空。