mobilenumber datekey amount code
------------ ----------- ----------- ----
1 1 10 cre
1 1 10 cre
1 2 10 cre
1 2 10 deb
1 3 10 deb
1 3 10 cre
(6 row(s) affected)
id date
----------- -----------------------
1 2017-01-01 00:00:00
2 2017-01-02 00:00:00
3 2017-01-03 00:00:00
(3 row(s) affected)
select t.mobilenumber,
sum(case when code = 'cre' then amount else 0 end) sumcre,
sum(case when code = 'deb' then amount else 0 end) sumdeb,
min(date) mindate,
max(date) maxdate
from
(
select t.*,d.date from t join dimtime d on d.id = t.datekey and t.code = 'cre'
union
select t.*,null from t join dimtime d on d.id = t.datekey and t.code = 'deb'
) t
group by t.mobilenumber
mobilenumber sumcre sumdeb mindate maxdate
------------ ----------- ----------- ----------------------- -----------------------
1 30 20 2017-01-01 00:00:00 2017-01-03 00:00:00
Warning: Null value is eliminated by an aggregate or other SET operation.
(1 row(s) affected)
运行此代码时,我总是以“ []”的形式返回答案。我不知道发生了什么,并认为变量“ lengthList”是一个列表,会附加字母。在将各个字母组合在一起以形成加密的消息时,我也需要帮助。 谢谢,埃里克
答案 0 :(得分:1)
之所以这样,是因为您没有在外部分配pd.crosstab(test.cluster,test.type,normalize='index',margins=True).plot(kind='bar')
变量。在answer1
方法中,您已将值分配给其作用域本地的变量,而不是您想要的外部作用域中的message()
变量。
您必须将其作为参数传递,并返回它的值,以便保留它的值。
类似地,getMessage()无法访问超出其范围的变量。因此,您也必须将它们作为参数传递!
此代码的正确形式如下:
answer1
以上这段代码将创建一个列表def message():
answer1 = input('Welcome to the Ceaser Cipher! What do you want to encrypt?')
key = int(input('Enter the key number that you want to encrypt with. (1 - 26)'))
return answer1, key
def getMessage(lengthOfInput1, lengthList, answer1, key, leng):
while leng <= lengthOfInput1-1:
lengthList.append(chr(ord(answer1[leng]) + key))
leng += 1
print(lengthList)
key = 0
answer1 = ''
answer1, key = message()
# Here I am returning both of the values from
# message method.
# LOCAL VARIABLES
maxKeySize = 26
lengthOfInput1 = len(answer1)
leng = 0
lengthList = []
getMessage(lengthOfInput1, lengthList, answer1, key, leng)
# Inorder to access the local variables, you will
# have to pass them to getMessage() method.
,其中包含密码字母。但是,它在lengthList
中是本地的。您必须将其返回到它的父范围,才能在那里访问它。
此外,要使列表转换为字符串,您必须在列表中进行迭代,并保持追加到空字符串中。像这样:
getMessage()
请确保您保持正确的范围,并且您会做得很好。 This文章以很好的方式进行了解释。
答案 1 :(得分:1)
只需对原始代码进行最少的更改,即可使用工作代码
def message():
answer = input('Welcome to the Ceaser Cipher! \nWhat do you want to encrypt? ')
key = input('Enter the key number that you want to encrypt with (1 - 26): ')
return answer, int(key)
def getMessage(answer, key):
lengthList = []
leng = 0
while leng < len(answer):
lengthList.append(chr(ord(answer[leng]) + key))
leng += 1
print("".join(lengthList))
answer, key = message()
getMessage(answer, key)
说明:
您的message()
函数用用户输入填充answer1
和key
变量,然后将其丢弃,因为它们只是本地变量-此功能的定义之外的answer1
和key
是 others 变量。
因此,我加入了return
命令来保存它们(并将answer1
重命名为简单的answer
)。
message()函数中键变量的类型为str(字符串),但您需要int。因此,return语句中的int(key)
。
在主代码中,我保存了那些返回的值-answer, key = message()
命令。
您的函数getMessage()
需要这些值,因此我将它们添加为参数-def getMessage(answer, key):
我移动了命令
lengthList = []
leng = 0
进入函数getMessage()
的定义。
我将您的while leng <= lengthOfInput1-1:
命令更改为while leng < len(answer):
-注意<
而不是<=
。
您希望将结果打印为 string ,而不是单个字符的list
-因此,我使用"".join(lengthList)
命令将该列表更改为字符串。 (空字符串""
用作单个连接字母之间的分隔符,因此它们将被连接而没有空格或其他符号。)
然后我删除了所有多余的(无用的)语句。