如何在值发生变化后使用变量的前值?

时间:2018-03-30 18:12:00

标签: python

我编写了一个代码,用于将数字从基数10转换为另一个基数。这是代码,其中n是要转换的数字,l是转换为的基础:

<div class="container">
  <section class="left">
    <div class="item">1</div>
  </section>
  <section class="right">
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
    <div class="item">5</div>
  </section>
</div>

因为在第一个else语句中,我通过将m除以l来改变我想要转换的数字的值,我必须指定m = n并使用m而不是n。有没有办法绕过这个并只使用变量?

4 个答案:

答案 0 :(得分:1)

我没有足够的声誉来添加评论,但我正在添加答案作为解决方法。请查看Python中的Math库。

如果这样的话可能会有所帮助,请告诉我。

log(x)/log(base)
  

math.log(x [,base])使用一个参数,返回自然对数   x(以e为基础。)

     

使用两个参数,将x的对数返回给定的基数,   计算为log(x)/ log(base)。

来源:https://docs.python.org/3.6/library/math.html

答案 1 :(得分:0)

不确定你想要完成什么,但是你不想使用内置函数,因为NellMartinez指出我认为添加另一个函数可能就是你要从中删除一个变量。

def set_count(n, l):
    count = 0
    if n >= 2:
        while n >= l:
            n = n / l
            count += 1
    return count


def convert_from_base_10(n, l):
    string = ""

    counter = set_count(n, l)

    while counter >= 0:
        z = math.floor(n / (l ** counter))
        string = string + str(z)
        n = n - z * (l ** counter)
        counter = counter - 1
    return string

答案 2 :(得分:0)

您可以选择使用字典或列表。

您可以选择使用列表n,而不是将m分配给list_name = [n, n],并使用两个变量。现在你可以将list_name [0]保持为常量并改变list_name [1]。

使用字典,您可以执行类似dict_name = {"original": n, "variable": n}的操作。

答案 3 :(得分:0)

我建议你像这样重写你的代码(这是相同的代码,只是更具可读性和更好的格式。有些名称仍然供你选择)

如果它是一个字符串,你应该总是返回一个连贯的结果,总是返回一个字符串

如果您以后需要,我不会在保存var内容时发现问题。 请注意,number是一个本地函数参数,因此您不会改变原始(在您的情况下实际上也是不可变的)但是您想要 稍后更改本地值,因此可以将其复制到m。

还有其他方法可以进行转换,但我想您想要对算法进行编码而不是简单的解决方案。

import math

def convert_base10_to(number, base):
    counter = 0
    m = number  # choose a proper name to m: what is m?
                # That will be the best name for m
    z = 0       # same for z
    result = ""
    if number < 2:
        return str(number)
    else:
        while m >= base:
            m = m / base
            counter += 1
    while counter >= 0:
        z = math.floor(number / (base ** counter))
        result = result + str(z)  
        number = number - z *(base ** counter)
        counter = counter - 1
    return result

print(convert_base10_to(7, 2))