Python - 有人可以向我解释这是做什么以及它是如何工作的?

时间:2013-09-01 21:34:17

标签: python

我正在按照教程来创建文本冒险,我现在正在创建这些部分,但仍未完成,但有一些我不明白的事情。所以,我正在为这些部分创建一个数组。该数组包括描述和名称。现在该部分的名称有一个代码可以降低它,用-'s替换空格。它会删除句点和撇号。然后将它放在一个名为sec的数组中。 这是我不明白的一部分:

sec = {}
for indexed in enumerate(sections):
    index = indexed[0]
    long_name = indexed[1][1]
    short_name = ''
    for C in long_name:
        if C == ' /':
            short_name += '-'
        elif not C == ".'":
            short_name += C.lower()
    sec[short_name] = index

这是我的全部代码:

    import time
import random
sections = [
    (
        """You are in front of your friend's house. Your friend's house is
(n)orth and the driveway is south. There is a mailbox next to you.""",
        "Front Of Friend's House"), #0
    (
        """You are in your friend's house. Northwest is the stairs, the
kitchen is up north, the door is south. Your friend is upstairs.""",
        "Friend's house"), #1
    (
        """You are upstairs, the bathroom is up north, your friend's bedroom
is west. The stair down is south.""",
        "Friend's house upstairs"), #2
    ]

sec = {}
for indexed in enumerate(sections):
    index = indexed[0]
    long_name = indexed[1][1]
    short_name = ''
    for C in long_name:
        if C == ' /':
            short_name += '-'
        elif not C == ".'":
            short_name += C.lower()
    sec[short_name] = index

有人可以向我解释我不明白的部分,我不喜欢在不知道自己在做什么的情况下写点什么。我也不知道 for 的意思。如何在没有定义C的情况下使用C或其他东西。如果你能向我解释这将是伟大的!

3 个答案:

答案 0 :(得分:1)

我在枚举部分中使代码更加清晰。 enumerate允许对iteration number, iteration item对进行迭代,因此您也可以单独分配变量。我建议尝试直接迭代(for directionpair in sections:)和枚举(for index,directionpair in enumerate(sections))以查看差异。

通过阅读您的描述,您应该使用关键字in来检查C是否在字符串“'中。”或“\”,因为任何字符都不能等于两个字符的字符串。

sec = {} #construct a dictionary
for index, directionpair in enumerate(sections):
    long_name = directionpair[1] #take the second element of the pair
    short_name = ''
    for C in long_name: #for each character in long_name
        if C in ' /': #every time you find a forward slash in long_name, write '-' in short-name instead
            short_name += '-'
        elif C not in "'." : #in short-string, add all lower-case versions of the character if it's not a '.'
            short_name += C.lower()
    sec[short_name] = index

请注意,使用正确的函数可以更轻松地完成此操作,实际上甚至可以使用re.sub改进下面的表达式:

sec = {} #construct a dictionary
for index, directionpair in enumerate(sections):
    long_name = directionpair[1] #take the second element of the pair
    short_name = long_name.replace('/','-').replace(' ','-').replace("'",'').replace('.','').lower()
    sec[short_name] = index

答案 1 :(得分:1)

在您阅读Python中for语句的文档后,这个简短的答案将会变得清晰。

  1. indexed遍历编号为0的sections元素。例如,在第一次迭代中,indexed(0, ("""You are in front...""", "Front..."))

    < / LI>
  2. long_name是该部分的第二个元素,即"Front..."

  3. C遍历转换为小写的长名称字符。在C对比字符长的字符串的两个比较中,肯定存在问题。

答案 2 :(得分:0)

迭代一个字符串会将其分解为Python中的字符。所以

for C in 'foo':
    print C

将打印

f
o
o