首页 文章

Python循环 - 帮助我理解

提问于
浏览
2

我有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 回答

  • 0

    Python's Official Documentation - 8.3 The for Statement

    “for语句用于迭代序列的元素(例如字符串,元组或列表)......”

    在您的代码示例中, "Lucy" 是字符串 . 字符串是序列 . 组成它的字符(即 "L", "u", "c", "y" )是"elements of a sequence."

    我将逐行浏览您的代码以查看它是否有帮助 .

    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 = ""
    

    这条线标志着for语句的开始(又名for-loop) . for语句迭代(或"loops over")提供的序列中的每个元素 . 为了遍历序列,必须将其中的每个元素分配给变量 . 这里,该变量是 mysteryChar . 序列的第一个元素(即字符 "L" )被赋值给变量 mysteryChar .

    for mysteryChar in mysteryString:
    

    如果它有帮助,你可以考虑到目前发生的事情:

    mysteryChar = "L"
    

    这条线做了几件很酷的事情 . 首先,它采用 charCount 的值并将其添加到 mysteryChar 的值 . 其次,它将 charCountmysteryChar 的值分配给 charCount .

    charCount = charCount + mysteryChar
    

    还记得在步骤3中,我们将变量 charCount 分配给空字符串吗?

    charCount = ""
    

    在第5步执行之后:

    charCount = "L"
    

    这条线打印 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,所以这个东西对我来说也是比较新的 . 如果我的解释被误导,欢迎批评/更正 .

  • 1

    charCount在循环之外初始化的原因是由于范围 .

    在主体的主要部分中定义的变量属于“全局”范围 . 这意味着整个文件中的任何其他内容都可以访问它 .

    但是在函数/循环内定义的变量对于该函数是“本地的” . 这意味着它只存在并且可以从定义它的位置访问,直到函数结束 .

    当我们在函数内使用赋值运算符(=)时,它的默认行为是创建一个新的局部变量 - 除非已在本地范围中定义了具有相同名称的变量 .

    所以基本上,当我们在循环内部声明它时,如下所示 . 每次循环时,它都会将变量重新设置为=“”,这就是为什么它一次只打印出一个字符的原因 .

    "" + "L"
    reintialize charCount = ""
    "" + "U"
    etc
    

    Variable declared outside loop:

    enter image description here

    Variable declared inside loop:

    enter image description here

  • 0
    charCount = ""
    for mysteryChar in mysteryString:
        charCount = charCount + mysteryChar
        print(charCount)
    

    这样做是初始化变量 charCount ,这是你的字符串 .

    然后我们有一个for循环 . 这样做是迭代你的字符串的每个字母 .

    然后它将获得原始字符串(从空白处开始)并一次添加一个字母 .

    然后打印显示它 .

    在循环外声明的原因是您可以将每个字母连接到它 .

    charCount 不存在时,尝试执行 charCount = charCount + mysteryChar 会抛出错误 . 所以你在外面创建一个空字符串,这样你就可以这样做:

    "" + "L"  
    "L" + "U"  
    "LU" + "C"  
    "LUC" + "Y"
    

相关问题