我必须创建一个python文件,提示用户输入文本文档的文件路径,然后将其转换为pig Latin并进行行/字计数。
•生成单个单词的猪拉丁语版本的函数
•将行和字数计数打印到标准输出的功能
•使用与原始文本文件相同的格式更正pig Latin输出
•纠正行和字数
我无法弄清楚为什么猪拉丁出错了。我的老师说我需要另一个()
,因为它会使单词转换错误,但我不知道我应该把它放在哪里。
我的行计数器也坏了。它很重要,但总是说222行。
我怎样才能让它只用字数来计算?
string.strip("\n")
答案 0 :(得分:0)
你的第一个问题就在这里:
def pig_word(string):
line = string.strip("\n") #!!!! line is NEVER USED !!!
for word in string.split(" "): #you want *line*.split here
第二个问题是由迭代字符串引起的,它遍历每个字符而不是像文件那样的每一行:
>>> for i in "abcd":
... print(i)
a
b
c
d
所以在你的line_counter
而不是:
for line in s:
line_count += 1
你只需要这样做:
for line in s.split("\n"):
line_count += 1
答案 1 :(得分:0)
pig_word(string)
函数中,当你将return
放入for
时,会返回字符串中的第一个单词你的str.split('\n')
循环。此外,您的老师正在讨论将所有行都纳入函数,并通过\n
迭代每一行。 def pig_sentence(string):
lines = []
for line in string.split('\n'):
new_string = ""
for word in line.split(" "):
first_letter = word[0]
if first_letter in vowels:
new_string += word + "way"
else:
new_string += word[1:] + first_letter + "ay"
lines.append(new_string)
return lines
代表“新行”字符。你可以尝试这样的方法来解决这个问题。
lines
所做的更改
初始化了一个新列表new_string
,我们可以在整个循环中附加这些列表。
迭代传入的字符串中的每一行。
对于每一行,请创建一个新字符串return
。
使用您的代码,但不是new_string
我们将其添加到new_string
,然后将lines
添加到我们的新行列表pig_word
。< / p>
请注意,这样就无需使用两个功能。另请注意,我将pig_sentence
重命名为line_counter(s)
。
str.split('\n')
中。您正在迭代每个字符而不是每一行。在这里再次添加def line_counter(s):
line_count = 0
for _ in s.split('\n'):
line_count += 1
return line_count
以获得所需的输出,方法是将字符串拆分为行列表,然后迭代列表。以下是修改后的功能:
paragraph = """\
Hello world
how are you
pig latin\
"""
lines = line_counter(paragraph)
words = sum([word_counter(line) for line in paragraph.split('\n')])
out = pig_sentence(paragraph)
print(lines, words, out)
(因为你的文件i.o.没有任何错误,我只是在这里使用字符串文字进行测试。)
<强>测试强>
3 7 ['elloHay', 'elloHayorldway', 'owhay', 'owhayareway', 'owhayarewayouyay', 'igpay', 'igpayatinlay']
输出是我们所期望的!
<ion-side-menus>
<ion-side-menu-content drag-content="false">
............
</ion-side-menu-content>
</ion-side-menus>
答案 2 :(得分:0)
您只删除空格,您需要删除所有标点符号以及行尾字符。取代
split(" ")
与
split()
您的句子清单相当于
sentence = 'Hello there.\nMy name is Roxy.\nHow are you?
如果您在split(" ")
和split()
后打印,您会看到差异,您将获得所期望的结果。
此外,您将获得不正确的结果,因为您将there
翻译为heretay
。你需要循环,以便它出现erethay
这是在添加'ay'之前将每个成员移动到最后,以便新单词以元音开头。