我在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
答案 0 :(得分:4)
一些快速点:
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