我正在按照教程来创建文本冒险,我现在正在创建这些部分,但仍未完成,但有一些我不明白的事情。所以,我正在为这些部分创建一个数组。该数组包括描述和名称。现在该部分的名称有一个代码可以降低它,用-'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或其他东西。如果你能向我解释这将是伟大的!
答案 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
语句的文档后,这个简短的答案将会变得清晰。
indexed
遍历编号为0的sections
元素。例如,在第一次迭代中,indexed
为(0, ("""You are in front...""", "Front..."))
long_name
是该部分的第二个元素,即"Front..."
。
C
遍历转换为小写的长名称字符。在C
对比字符长的字符串的两个比较中,肯定存在问题。
答案 2 :(得分:0)
迭代一个字符串会将其分解为Python中的字符。所以
for C in 'foo':
print C
将打印
f
o
o