我遇到的问题是在相同的行上打印phone_sorter()和number_calls()。例如,它将打印两行phone_sorter,但number_calls将打印在它的正下方。我已经尝试了结束=''方法,但它似乎不起作用。
customers=open('customers.txt','r')
calls=open('calls.txt.','r')
def main():
print("+--------------+------------------------------+---+---------+--------+")
print("| Phone number | Name | # |Duration | Due |")
print("+--------------+------------------------------+---+---------+--------+")
print(phone_sorter(), number_calls())
def time(x):
m, s = divmod(seconds, x)
h, m = divmod(m, x)
return "%d:%02d:%02d" % (h, m, s)
def phone_sorter():
sorted_no={}
for line in customers:
rows=line.split(";")
sorted_no[rows[1]]=rows[0]
for value in sorted(sorted_no.values()):
for key in sorted_no.keys():
if sorted_no[key] == value:
print(sorted_no[key],key)
def number_calls():
no_calls={}
for line in calls:
rows=line.split(";")
if rows[1] not in no_calls:
no_calls[rows[1]]=1
else:
no_calls[rows[1]]+=1
s={}
s=sorted(no_calls.keys())
for key in s:
print(no_calls[key])
main()
答案 0 :(得分:2)
您的关键问题是,phone_sorter
和number_calls
都会自行打印,并返回None
。因此,打印它们的返回值是荒谬的,并且应该在它们完成所有单独行打印之后以None None
行结束,这是没有意义的。
更好的方法是将它们重新构建为返回,而不是打印,它们确定的字符串,然后才安排print
这些字符串格式正确在“编排”main
函数中。
看起来他们每个都会返回一个list
个字符串(他们现在在不同的行上打印),如果这些列表按相应的顺序排列,你可能会想zip
准备印刷。
但是你的代码有些不透明,所以很难判断两者的命令是否确实对应。如果最终印刷有意义的话,他们会更好......
补充说:让我举一些细微的改进和phone_sorter
的一个重大变化...:
def phone_sorter():
sorted_no={}
for line in customers:
rows=line.split(";")
sorted_no[rows[1]]=rows[0]
sorted_keys = sorted(sorted_no, key=sorted_no.get)
results = [(sorted_no[k], k) for k in sorted_keys]
return results
知道了吗?除了更好地进行计算之外,核心思想是将列表放在一起并将其返回 - 它是main
的工作,以便格式化并打印它,与类似的列表一致由number_calls
返回(似乎是平行的)。
def number_calls():
no_calls=collections.Counter(
line.split(';')[1] for line in calls)
return [no_calls(k) for k in sorted(no_calls)]
现在两个列表之间的关系对我来说并不明显,但是,假设它们是并行的,main
可以这样做:
nc = no_calls()
ps = phone_sorter()
for (duration, name), numcalls in zip(ps, nc):
print(...however you want to format the fields here...)
您在main
打印的那些标题并没有告诉我每个标题下应打印哪些数据,以及如何格式化打印(宽度为
每个领域,例如)。但是,main
,只有main
应该是。{
非常熟悉这些演示问题并控制它们,而其他功能则处理适当提取数据的“业务逻辑”。 “关注点分离” - 编程中的一个大问题!