现在,我有一个可用的基本10到2的转换器,但是在每次转换结束时它总是不打印。 base_two = 0
def binary_recursion(base_ten):
global base_two
if base_ten==0:
print(base_two)
return
c=0
while base_ten//2**c>1:
c+=1
base_two+=10**c
if c==0:
print(base_two)
return
binary_recursion(base_ten-2**c)
我尝试返回base_two而不是打印它,但是它没有返回数字,它也只返回None。任何人都可以帮我查明我的错误吗?
答案 0 :(得分:0)
您没有将新元素添加到队列中。假设list_queue是一个队列 Queue已经将函数添加到其中。
def make_job():
temp_list=[]
list_queue = Queue()
for line in print_list:
if line[:6]=='submit': #If the command is submit, then the file must be placed in its
a=line.split() #correct spot in the linked list
del(a[0])
list_queue.put(a)#Contains file id, and the time required to print
temp_list.append(list_queue)
organize(list_queue) #Places the file in its correct spot in the linked list
else:
break
答案 1 :(得分:0)
Python queue
模块有一个名为PriorityQueue
的类,它正是您正在寻找的。对于您的情况,使用它看起来像这样:
class Job(object):
def __init__(self, name, print_time):
self.name = name
self.print_time = print_time
def __lt__(self, other):
return self.print_time < other.print_time
import queue as _queue # Need to rename the module so it doesn't conflict with your 'queue' function
my_queue = _queue.PriorityQueue()
def make_job():
for line in print_list:
if line[:6]=='submit':
a=line.split()
del(a[0])
new_job=queue(a) # queue(a) now returns a Job, e.g. Job('101', 40), instead of a 2-element list
my_queue.put(new_job)
else:
break
构建my_queue
后,对my_queue.get()
的重复调用将返回Job
订购的print_time
。
如果您希望能够在不删除元素的情况下检查队列的内容(get
删除它返回的元素),您可以将Job
附加到列表并调用{{1每次插入后。如果这是性能问题,您可以自己在列表中找到正确的位置并致电list_queue.sort()
。不过,推迟使用Python list_queue.insert(i, a)
有一些优点;即,stable。
最后,如果您不想定义新课程,可以使用list.sort
或sorted
自定义排序功能。这取代了我为list.sort
定义的__lt__
成员。
Job
答案 2 :(得分:0)
def node(document_info, next_node):
return {'data': document_info, 'next': next_node}
def insert(head, new_document_info):
#insert new document into the linked list head
#returns the head of the modified list
if head is None:
return node(new_document_info, None)
if new_document_info[1] <= head['data'][1]:
return node(new_document_info, head)
head['next'] = insert(head['next'], new_document_info)
return head
这是一个稍微修改过的插入排序方式,从我上一个问题的答案开始。您将从head = None
开始,然后每次添加打印作业时都执行head = insert(head, document_info)
。或者在收集所有打印作业后执行类似
head = None
for document_info in list_queue:
head = insert(head, document_info)