我有python生成随机代码,在本例中为“Lucy”,它打印如下:
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在循环外初始化?为什么它以它的方式打印字符?
答案 0 :(得分:1)
charCount在循环之外初始化的原因是因为范围。
在主体的主要部分中定义的变量属于“全局”范围。这意味着整个文件中的任何其他内容都可以访问它。
但是在函数/循环内定义的变量对于该函数是“本地的”。这意味着它只存在,并且可以从定义它的位置访问,直到函数结束。
当我们在函数中使用赋值运算符(=)时,它的默认行为是创建一个新的局部变量 - 除非已在本地范围中定义了具有相同名称的变量。
基本上,当我们在循环内部声明它时,如下所示。每次循环时,它都会将变量重新设置为=“”,这就是为什么它一次只打印出一个字符的原因。
即。
"" + "L"
reintialize charCount = ""
"" + "U"
etc
外部循环变量声明:
在循环内声明的变量:
答案 1 :(得分:0)
charCount = ""
for mysteryChar in mysteryString:
charCount = charCount + mysteryChar
print(charCount)
这样做是初始化变量charCount
,这是你的字符串。
然后我们有一个for循环。这样做是迭代你的字符串的每个字母。
然后它将获得原始字符串(从空白开始)并一次添加一个字母。
然后打印显示它。
在循环外声明的原因是你可以将每个字母连接到它。
当charCount = charCount + mysteryChar
不存在时,尝试执行charCount
会抛出错误。因此,您在外部创建一个空白字符串,以便您可以执行此操作:
"" + "L"
"L" + "U"
"LU" + "C"
"LUC" + "Y"
答案 2 :(得分:0)
来自Python's Official Documentation - 8.3 The for Statement
“for语句用于迭代序列的元素(例如字符串,元组或列表)......”
在您的代码示例中,"Lucy"
是字符串。字符串是序列。组成它的字符(即"L", "u", "c", "y"
)是“序列的元素”。
我将逐行浏览您的代码以查看它是否有帮助。
1.您将sys.argv[1]
分配给变量mysteryString
。您的sys.argv[1]
是字符串"Lucy"
。
mysteryString = sys.argv[1]
2.程序接受变量mysteryString
,用它格式化字符串,然后打印输出。
print("~ testing with mysteryString = {} ~".format(mysteryString))
Output: ~ testing with mysterString = Lucy ~
3.此行初始化变量charCount
。请注意它是空的。
charCount = ""
4.这一行标志着for语句的开头(又名for-loop)。 for语句迭代(或“循环”)提供的序列中的每个元素。为了遍历序列,必须将其中的每个元素分配给变量。这里,该变量是mysteryChar
。序列的第一个元素(即字符"L"
)被赋值给变量mysteryChar
。
for mysteryChar in mysteryString:
如果有帮助,您可以将此时的情况视为:
mysteryChar = "L"
5.这条线做了几件很酷的事情。首先,它取charCount
的值并将其添加到mysteryChar
的值。其次,它将charCount
和mysteryChar
的值分配给charCount
。
charCount = charCount + mysteryChar
还记得在第3步中,我们将变量charCount
分配给空字符串吗?
charCount = ""
执行第5步后:
charCount = "L"
6.此行打印charCount
。
代码:
print(charCount)
输出:
L
7.现在,请尝试遵循代码。
代码:
charCount = ""
for mysteryChar in mysteryString:
charCount = charCount + mysteryChar
print(charCount)
输出:
L
8.继续循环的下一次迭代。
代码:
mysterString = "Lucy"
# Note: Before the second iteration of the loop, charCount = "L"
# This is because in the first iteration of the loop,
# "L" was added & assigned to the variable charCount
charCount = ""
for mysteryChar in mysteryString:
charCount = charCount + mysteryChar
print(charCount)
输出:
Lu
9.继续循环的下一次迭代
代码:
mysterString = "Lucy"
# Note: Before the third iteration of the loop, charCount = "Lu"
# This is because in the second iteration of the loop,
# "u" was added & assigned to the variable charCount
# At that point, charCount = "Lu"
charCount = ""
for mysteryChar in mysteryString:
charCount = charCount + mysteryChar
print(charCount)
输出:
Luc
10.这是for-loop的所有输出。
输出:
L
Lu
Luc
Lucy
问题:
“为什么它按照它的方式打印字符”
for循环以它的方式打印字符,因为它循环遍历序列中的每个元素。
第一次迭代输出:
L
第二次迭代输出:
Lu
第三次迭代输出:
Luc
第四次迭代输出:
Lucy
大约一年前我开始学习python,所以这些东西对我来说也是比较新的。如果我的解释被误导,欢迎批评/更正。