将My Base 10固定为二进制转换器

时间:2017-07-19 16:31:53

标签: python list

现在,我有一个可用的基本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。任何人都可以帮我查明我的错误吗?

3 个答案:

答案 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.sortsorted自定义排序功能。这取代了我为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)