Python猪拉丁语转换器和线/字计数器

时间:2016-04-14 04:07:58

标签: python file translation counter language-translation

我必须创建一个python文件,提示用户输入文本文档的文件路径,然后将其转换为pig Latin并进行行/字计数。

  

•生成单个单词的猪拉丁语版本的函数

     

•将行和字数计数打印到标准输出的功能

     

•使用与原始文本文件相同的格式更正pig Latin输出

     

•纠正行和字数

我无法弄清楚为什么猪拉丁出错了。我的老师说我需要另一个(),因为它会使单词转换错误,但我不知道我应该把它放在哪里。

我的行计数器也坏了。它很重要,但总是说222行

我怎样才能让它只用字数来计算?

string.strip("\n")

3 个答案:

答案 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)

  1. 你没有获得所需输出的第一个原因是因为在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 代表“新行”字符。
  2. 你可以尝试这样的方法来解决这个问题。

    lines

    所做的更改

    • 初始化了一个新列表new_string,我们可以在整个循环中附加这些列表。

    • 迭代传入的字符串中的每一行。

    • 对于每一行,请创建一个新字符串return

    • 使用您的代码,但不是new_string我们将其添加到new_string,然后将lines添加到我们的新行列表pig_word。< / p>

    • 请注意,这样就无需使用两个功能。另请注意,我将pig_sentence重命名为line_counter(s)

    1. 第二次错误出现在您的函数str.split('\n')中。您正在迭代每个字符而不是每一行。在这里再次添加def line_counter(s): line_count = 0 for _ in s.split('\n'): line_count += 1 return line_count 以获得所需的输出,方法是将字符串拆分为行列表,然后迭代列表。
    2. 以下是修改后的功能:

      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'之前将每个成员移动到最后,以便新单词以元音开头。