我有python生成一个随机代码,在这种情况下,“露西”,它打印如下:
L
Lu
Luc
Lucy
我不明白它是如何工作的,有人可以解释一下吗?
import sys
mysteryString = sys.argv[1]
print("~ testing with mysteryString = {} ~".format(mysteryString))
#Above code was provided for me
charCount = ""
for mysteryChar in mysteryString:
charCount = charCount + mysteryChar
print(charCount)
为什么charCount在循环外初始化?为什么它以它的方式打印字符?
3 回答
从Python's Official Documentation - 8.3 The for Statement
在您的代码示例中,
"Lucy"
是字符串 . 字符串是序列 . 组成它的字符(即"L", "u", "c", "y"
)是"elements of a sequence."我将逐行浏览您的代码以查看它是否有帮助 .
1.将
sys.argv[1]
分配给变量mysteryString
. 你的sys.argv[1]
是字符串"Lucy"
.2.程序采用变量
mysteryString
,用它格式化字符串,并打印输出 .3.此行初始化变量
charCount
. 请注意它是空的 .这条线标志着for语句的开始(又名for-loop) . for语句迭代(或"loops over")提供的序列中的每个元素 . 为了遍历序列,必须将其中的每个元素分配给变量 . 这里,该变量是
mysteryChar
. 序列的第一个元素(即字符"L"
)被赋值给变量mysteryChar
.如果它有帮助,你可以考虑到目前发生的事情:
这条线做了几件很酷的事情 . 首先,它采用
charCount
的值并将其添加到mysteryChar
的值 . 其次,它将charCount
和mysteryChar
的值分配给charCount
.还记得在步骤3中,我们将变量
charCount
分配给空字符串吗?在第5步执行之后:
这条线打印
charCount
.码:
输出:
7.现在,尝试遵循代码 .
码:
输出:
8.继续循环的下一次迭代 .
码:
输出:
9.继续循环的下一次迭代
码:
输出:
10.这是for-loop的所有输出 .
输出:
题:
for循环以它的方式打印字符,因为它循环遍历序列中的每个元素 .
第一次迭代输出:
第二次迭代输出:
第三次迭代输出:
第四次迭代输出:
大约一年前我开始学习python,所以这个东西对我来说也是比较新的 . 如果我的解释被误导,欢迎批评/更正 .
charCount在循环之外初始化的原因是由于范围 .
在主体的主要部分中定义的变量属于“全局”范围 . 这意味着整个文件中的任何其他内容都可以访问它 .
但是在函数/循环内定义的变量对于该函数是“本地的” . 这意味着它只存在并且可以从定义它的位置访问,直到函数结束 .
当我们在函数内使用赋值运算符(=)时,它的默认行为是创建一个新的局部变量 - 除非已在本地范围中定义了具有相同名称的变量 .
所以基本上,当我们在循环内部声明它时,如下所示 . 每次循环时,它都会将变量重新设置为=“”,这就是为什么它一次只打印出一个字符的原因 .
即
Variable declared outside loop:
Variable declared inside loop:
这样做是初始化变量
charCount
,这是你的字符串 .然后我们有一个for循环 . 这样做是迭代你的字符串的每个字母 .
然后它将获得原始字符串(从空白处开始)并一次添加一个字母 .
然后打印显示它 .
在循环外声明的原因是您可以将每个字母连接到它 .
当
charCount
不存在时,尝试执行charCount = charCount + mysteryChar
会抛出错误 . 所以你在外面创建一个空字符串,这样你就可以这样做: