Python Can';我搞不懂循环

Python Can';我搞不懂循环,python,for-loop,python-3.x,Python,For Loop,Python 3.x,我试图创建一个秘密编码程序,但在for循环方面遇到了麻烦(我从来没有真正理解过它们)。这是我目前要做的,我正在尝试获取用户输入,将用户文本中的每个单词转换为编码文本,因此如果有人键入“hello”,它将变成“vpyyl”。有人能帮忙吗?这可能吗 这就是我到目前为止所做的,它给出了一个错误“列表索引必须是整数,而不是str”。我很确定for循环也设置错误 import random list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',

我试图创建一个秘密编码程序,但在for循环方面遇到了麻烦(我从来没有真正理解过它们)。这是我目前要做的,我正在尝试获取用户输入,将用户文本中的每个单词转换为编码文本,因此如果有人键入“hello”,它将变成“vpyyl”。有人能帮忙吗?这可能吗

这就是我到目前为止所做的,它给出了一个错误“列表索引必须是整数,而不是str”。我很确定for循环也设置错误

import random

list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
codedList = ['s', 'q', 'n', 'z', 'p', 'o', 'k', 'v', 'm', 'c', 'i', 'y', 'w', 'a', 'l', 't', 'd', 'r', 'j', 'b', 'f', 'e', 'h', 'u', 'x', 'g']

text = input("Enter your text: ")

for i in [text]:
    i = codedList[i]
    print[i]
应该是

for i in text:
在您的例子中,
i
是用户输入的字符串

它应该是一个整数才能用作索引

您想要的代码应该是

注意:我使用了原始输入而不是输入, 由于输入将尝试
eval
用户输入,因此最终会出现和
namererror
错误

In [214]: import random

In [215]: mylist = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

In [216]: codedList = ['s', 'q', 'n', 'z', 'p', 'o', 'k', 'v', 'm', 'c', 'i', 'y', 'w', 'a', 'l', 't', 'd', 'r', 'j', 'b', 'f', 'e', 'h', 'u', 'x', 'g']

In [217]: text = raw_input("Enter your text: ")
Enter your text: hello

In [218]: str = []

In [219]: for i in text:
   .....:     j = mylist.index(i)
   .....:     str.append(codedList[j])
   .....:

In [220]: ''.join(str)
Out[220]: 'vpyyl'
对于循环,文本包含单词“hello”, 这里的for循环将迭代文本中的每个字符,即第一次迭代将在“h”上,然后是“e”,依此类推

列表的名称永远不应该是
list
,因为这个名称在python中是关键字

应该是

for i in text:
在您的例子中,
i
是用户输入的字符串

它应该是一个整数才能用作索引

您想要的代码应该是

注意:我使用了原始输入而不是输入, 由于输入将尝试
eval
用户输入,因此最终会出现和
namererror
错误

In [214]: import random

In [215]: mylist = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

In [216]: codedList = ['s', 'q', 'n', 'z', 'p', 'o', 'k', 'v', 'm', 'c', 'i', 'y', 'w', 'a', 'l', 't', 'd', 'r', 'j', 'b', 'f', 'e', 'h', 'u', 'x', 'g']

In [217]: text = raw_input("Enter your text: ")
Enter your text: hello

In [218]: str = []

In [219]: for i in text:
   .....:     j = mylist.index(i)
   .....:     str.append(codedList[j])
   .....:

In [220]: ''.join(str)
Out[220]: 'vpyyl'
对于循环,文本包含单词“hello”, 这里的for循环将迭代文本中的每个字符,即第一次迭代将在“h”上,然后是“e”,依此类推

列表的名称永远不能是
list
,因为这个名称在python中是关键字

有两个问题:

  • 您正在使用
    i
    作为迭代变量并保存编码值。这是无害的,但不好的做法
  • 您正在迭代包含文本作为其一个元素的单个元素数组。删除
    文本周围的
    []

    for i in text:
        print codedList[i]
    
  • 两个问题:

  • 您正在使用
    i
    作为迭代变量并保存编码值。这是无害的,但不好的做法
  • 您正在迭代包含文本作为其一个元素的单个元素数组。删除
    文本周围的
    []

    for i in text:
        print codedList[i]
    

  • [text]
    中只有一项:用户输入的整个字符串。您可能希望在text:
    中为i设置
    ,这将为字符串的每个字符设置
    i

    此外,您还命名了一个列表
    list
    (这意味着您无法访问内置名称
    列表
    )。当您试图使用字符串访问元素时,列表由整数索引。您可能需要使用字典,将每个字母映射到对应的编码字母

    另外两个问题是,您没有任何代码来处理输入字母以外的内容(空格、标点符号)并且字母都是小写的情况。最后,在
    print
    调用中使用方括号而不是括号,并且不禁止换行

    因此:


    正如其他人所指出的,Python中内置的一些东西可以使这变得微不足道,但是如果您在
    for
    循环方面遇到问题,这将无助于您学习。:-)

    [text]
    中只有一项:用户输入的整个字符串。您可能希望在text:
    中为i设置
    ,这将为字符串的每个字符设置
    i

    此外,您还命名了一个列表
    list
    (这意味着您无法访问内置名称
    列表
    )。当您试图使用字符串访问元素时,列表由整数索引。您可能需要使用字典,将每个字母映射到对应的编码字母

    另外两个问题是,您没有任何代码来处理输入字母以外的内容(空格、标点符号)并且字母都是小写的情况。最后,在
    print
    调用中使用方括号而不是括号,并且不禁止换行

    因此:


    正如其他人所指出的,Python中内置的一些东西可以使这变得微不足道,但是如果您在
    for
    循环方面遇到问题,这将无助于您学习。:-)

    有很多不同的方法来完成你想做的事情。但重点关注您已经开始的内容和您当前的代码(为了可读性/清晰性更改了一些标识符),然后给出:

    clearList = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    codedList = ['s', 'q', 'n', 'z', 'p', 'o', 'k', 'v', 'm', 'c', 'i', 'y', 'w', 'a', 'l', 't', 'd', 'r', 'j', 'b', 'f', 'e', 'h', 'u', 'x', 'g']
    
    text = input("Enter your text: ")
    
    您的
    for
    -循环应如下所示:

    for letter in text:            # iterate over the text not [text]
       idx = clearList.index(letter)  # find the index for the given letter in clearList
       print(codedList[idx], end="")  # get the corresponding coded letter with the index
    
    并导致
    vpyyl

    注意,将列表作为标识符不是一个好主意,Python已经使用它作为数据结构的名称。我还为您输入的
    字母
    使用了更具描述性的标识符

    --

    由于您提到了
    -循环的
    存在问题,这里有两个教程供您参考:
    
    从Python和这个表单中可以看出。

    有许多不同的方法来完成您想要做的事情。但重点关注您已经开始的内容和您当前的代码(为了可读性/清晰性更改了一些标识符),然后给出:

    clearList = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    codedList = ['s', 'q', 'n', 'z', 'p', 'o', 'k', 'v', 'm', 'c', 'i', 'y', 'w', 'a', 'l', 't', 'd', 'r', 'j', 'b', 'f', 'e', 'h', 'u', 'x', 'g']
    
    text = input("Enter your text: ")
    
    您的
    for
    -循环应如下所示:

    for letter in text:            # iterate over the text not [text]
       idx = clearList.index(letter)  # find the index for the given letter in clearList
       print(codedList[idx], end="")  # get the corresponding coded letter with the index
    
    并导致
    vpyyl

    注意,将列表作为标识符不是一个好主意,Python已经使用它作为数据结构的名称。我还为您输入的
    字母
    使用了更具描述性的标识符

    --

    由于您提到了
    -循环的
    存在问题,这里有两个教程供您参考:
    
    来自Python和这个表单。

    我认为您正在尝试使用