基本的python。关于调用函数的快速问题

时间:2009-04-14 08:45:41

标签: python

我在python中遇到了一个基本问题,我很乐意提供一些帮助: - )

我有两个功能。将文本文件转换为字典的文件。并且将一个句子分成单独的单词:

(这是functiondoc.txt)

def autoparts():

    list_of_parts= open('list_of_parts.txt', 'r')
    for line in list_of_parts:
        k, v= line.split()
        list1.append(k)
        list2.append(v)

    dictionary = dict(zip(k, v))

def splittext(text):
    words = text.split()

    print words

现在我想创建一个使用这两个函数的程序。

(这是program.txt)

from functiondoc import *

# A and B are keys in the dict. The values are 'rear_bumper' 'back_seat'
text = 'A B'    # Input

# Splits the input into separate strings.
input_ = split_line(text)

这是我无法做到的部分。我需要使用autoparts函数来输出值(rear_bumper back_seat),但我不确定如何调用该函数以便它可以执行此操作。我不认为这很难。但我无法弄清楚......

亲切的问候,

的Th

6 个答案:

答案 0 :(得分:4)

一些快速点:

  • 你不应该将Python源文件命名为“.txt”,你应该使用“.py”。
  • 你的缩进看起来不对,但这可能就是Stack Overflow。
  • 您需要调用autoparts()函数来设置字典。
  • autoparts()函数应该返回字典,以便其他代码可以使用。
  • open文本文件时,您应该使用t模式说明符。在某些平台上,较低级别的I / O代码必须知道它正在读取文本,因此您需要告诉它。

答案 1 :(得分:3)

正如人们所指出的,你需要对python源文件使用py扩展名。您的文件将变为“functiondoc.py”和“program.py”。这将使您的import functiondoc正常工作(只要它们位于同一目录中)

autoparts函数的最大问题是你从未返回任何内容。另一个大问题是你使用了错误的变量..

for line in list_of_parts:
    k, v = line.split()
    list1.append(k)
    list2.append(v)

# k and v are now the last line split up, *not* the list you've been constructing.
# The following incorrect line:
dictionary = dict(zip(k, v))
# ...should be:
dictionary = dict(zip(list1, list2))
# ..although you shouldn't use zip for this:

你几乎从不必须使用zip,有时它可能有用,但是对于创建一个简单的dict,它是不正确的..而不是做..

for line in list_of_parts:
    ...
dictionary = dict(zip(k, v))

..只需在循环之前创建一个空的dict,然后执行mydict [key_variable] = value_variable

例如,我如何编写函数..

def autoparts():
    # open() returns a file object, not the contents of the file,
    # you need to use .read() or .readlines() to get the actual text
    input_file = open('list_of_parts.txt', 'r')
    all_lines = input_file.read_lines() # reads files as a list (one index per line)

    mydict = {} # initialise a empty dictionary

    for line in list_of_parts:
        k, v = line.split()
        mydict[k] = v

    return mydict # you have to explicitly return stuff, or it returns None

答案 2 :(得分:2)

除了所有其他提示和提示之外,我认为你遗漏了一些至关重要的东西:你的功能实际上需要返回

当你创建autoparts()splittext()时,我们的想法是,这将是一个你可以调用的函数,它可以(而且应该)回馈一些东西。

一旦找出了你希望函数输出的输出,就需要将它放在return语句中。

例如,如果您希望splittext返回单词列表,而不是打印它们,则需要行return words。如果您希望autoparts返回您构建的词典,则可以使用return dictionary

更准确(并回答下面的评论/问题):你不想“返回制作字典的功能”;你想在函数内部返回字典。所以,函数的最后一行应该是return dictionary(在函数内部!)例如,参见上面dbr中的(接受!)解决方案。

我认为你需要回到头脑并阅读一本关于python的书籍或网站,特别是编程,因为你对某些概念略有不满。一个好的(其他人当然可用)是http://diveintopython3.ep.io/

答案 3 :(得分:1)

不要先打扰创建列表,只需直接进入字典:

parts_dict={}
list_of_parts = open('list_of_parts.txt', 'r')
for line in list_of_parts:
        k, v = line.split()
        parts_dict[k] = v

此外,这些键是否独一无二?因为如果不是,某些值将被覆盖。

答案 4 :(得分:0)

到目前为止,您所写的内容存在很多问题,但您的问题是如何调用汽车零件功能。这是如何做;首先,将你的文件重命名为functiondocs.py和program.py - 它们是python,所以把它们变成python文件。

接下来,要调用autoparts函数,只需更改主程序列表:

from functiondoc import *

# A and B are keys in the dict. The values are 'rear_bumper' 'back_seat'
text = 'A B'    # Input

# Splits the input into separate strings.
input_ = split_line(text)

为:

from functiondoc import *

# Call the autparts function
autoparts()

在我看来,看起来你要求我们做一个CS家庭作业..但也许我只是愤世嫉俗; - )

答案 5 :(得分:0)

以下是您可以执行此操作的最简单方法:

def filetodict(filename):
    return dict(line.split() for line in open(filename))

parts = filetodict("list_of_parts.txt")
print parts

这是输出:

{'a': 'apple', 'c': 'cheese', 'b': 'bacon', 'e': 'egg', 'd': 'donut'}

文件内容:

a apple
b bacon
c cheese
d donut
e egg