所以我正在制作一个基于小型刽子手文本的游戏。
我目前正在处理的问题是从我的文本文件中调用随机单词。每个单词都有一个新行( \ n )的附加字符。
例如,通过我的函数将字符串的字母分隔成单个元素,我得到的结果是:
from text file: guess
answer = arrange_word(guess)
>>>>> ['g', 'u', 'e', 's', 's', '\n']
但是,当将阵列重新连接在一起时,会显示以下内容:
print ''.join(arrange_word)
>>>>> guess
正如您所看到的,猜测一个没有显示的元素有点困难。
为清楚起见,我的功能是 arrange_word :
def arrange_word(word):
##########
# This collects the mystery word and breaks it into an array of
# individual letters.
##########
word_length = len(word)
break_up = ["" for x in range(word_length)]
for i in range(0, word_length):
break_up[i] = word[i]
return break_up
我坚持认为,在尝试猜字母时, \ n 是无法猜测的。我的游戏的胜利条件是基于猜测与答案词相同。但是 \ n 会使其无法正常工作,因为它们的长度不同。
这些答案数组也有不同的长度,因为我只是从~1000字的文本文件中提取随机行。经过几个小时的搜索,我似乎无法找到如何删除数组的最后一个元素。
答案 0 :(得分:3)
这一行:
word_length = len(word)
在你取长度之前,你能做的就是第一个:
word = word.strip()
说明:
strip删除了前导和尾随空格。
>>> s = "bob\n"
>>> s
'bob\n'
>>> s.strip()
'bob'
考虑到这一切,您不再 其余代码
了 word_length = len(word)
break_up = ["" for x in range(word_length)]
for i in range(0, word_length):
break_up[i] = word[i]
应用strip
会给你一个没有空白字符的单词,然后你想要做的就是拥有一个字符列表,只需:
>>> s = "bob"
>>> list(s)
['b', 'o', 'b']
所以你的方法现在可以简单地:
def arrange_word(word):
return list(word.strip())
演示:
arrange_word("guess")
输出:
['g', 'u', 'e', 's', 's']
答案 1 :(得分:1)
所有这些答案都适用于从字符串中专门删除空白字符,但更一般地说,Python列表实现了标准的堆栈/队列操作,您可以通过调用list()构造函数将您的单词转换为列表,而无需编写自己的函数:
In [38]: letters = list('guess\n')
letters.pop()
letters
Out[38]: ['g', 'u', 'e', 's', 's']
答案 2 :(得分:0)
使用列表切片
arr = [1,2,3,4]
print(arr[:-1:])
数组切片语法是[startindex:endindex:offset(2,表示每个2元素)]所以在你的情况下你可以。这意味着从列表的开始开始,到列表中每1个元素的最后一个元素-1。
return break_up[:-1:]
答案 3 :(得分:0)
你可以通过-1索引访问最后一个元素,如: 猜[-1] 你可以通过以下方式删除它:
del guess[-1]
答案 4 :(得分:0)
只是删掉这个词:
word = 'guess\n'
word = word.strip() ## 'guess' without new line character, or spaces
答案 5 :(得分:0)
也许你的arrange_word函数的第一行应该是
word = word.strip()
删除所有前导/尾随空白字符。