Python:如何在以后的代码中使用函数的返回值?

时间:2015-04-24 12:56:41

标签: python-3.x

我刚开始学习Python并且正在尝试做练习。

我觉得我错过了一些非常基本的东西,因为我无法获得一些返回来影响我的代码的值。

以下代码的要点是打印用户输入分数的素因子,除了它只打印输入的分数的素因子而不是简化的分数。

def gcd(a,b):
    while b:
        a,b = b,a%b
    return a
def simplify_fraction(numerator,denominator):
    cd = gcd(numerator,denominator)
    (simple_num,simple_denom) = (numerator/cd,denominator/cd)
    if simple_denom == 1:
        return simple_num
    elif cd == 1:
        return simple_num,simple_denom
    else:
        return simple_num,simple_denom
def prime_factors(n):
    i = 2
    factors = []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return factors
while True:
    try:
        while True:
            fraction = input("Input a positive fraction then press enter:")
            numerator,denominator = fraction.split("/")
            numerator = int(numerator)
            denominator = int(denominator)
            if denominator == 0:
                raise ValueError
            elif numerator < 0:
                print("That is not a positive fraction, please try again.")
                continue
            elif denominator < 0:
                print("That is not a positive fraction, please try again.")
                continue            
            elif numerator == 0:
                print(str(numerator) + " / " + str(denominator) + " -> [0]")
            elif numerator == 1:
                print(str(fraction) + " -> [1] / " + str(prime_factors(denominator)))
            elif int(denominator) == 1:
                print(str(fraction) + " -> " + str(prime_factors(numerator)))
            else:
                simplify_fraction(numerator,denominator)

我确定我在这里遗漏了一些东西,将我的simplify_fraction函数链接到我的代码块但我无法弄清楚它是什么。

                print(str(fraction) + " -> " + str(prime_factors(numerator)) + " / " + str(prime_factors(denominator))) 
            while True:
                character = str(input('Continue (y/n)? '))
                if character == "y":
                    break
                if character == "n":
                    quit()
                else:
                    print ("That was not a valid choice, please select (y/n).")
                    continue
except ValueError:
    print("That is not a fraction, please try again.")
    continue

以下是两个例子:

3/9的输入给出3/9 - &gt; [3] / [3,3]。我希望它是3/9 - &gt; [1] / [3]。

输入138/24给出138/24 - &gt; [2,3,23] / [2,2,2,3]。我希望它是138/24 - &gt; [23] / [2,2]

有人可以就此给我一些建议吗?

1 个答案:

答案 0 :(得分:1)

在过去的几个小时里尝试了几种方法来实现这一目标并将其排序。 感觉我已经回答了这个,因为它现在没有实际意义...... 这是完成的代码:

def gcd(a,b):
    while b:
        a,b = b,a%b
    return a
def simplify_fraction(numerator,denominator):
    cd = gcd(numerator,denominator)
    (simple_num,simple_denom) = (numerator/cd,denominator/cd)
    return int(simple_num),int(simple_denom)
def prime_factors(n):
    i = 2
    factors = []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return factors
while True:
    try:
        while True:
            fraction = input("Input a positive fraction then press enter:")
            numerator,denominator = fraction.split("/")
            numerator = int(numerator)
            denominator = int(denominator)
            if denominator == 0:
                raise ValueError
            elif numerator < 0:
                print("That is not a positive fraction, please try again.")
                continue
            elif denominator < 0:
                print("That is not a positive fraction, please try again.")
                continue
            simple_num,simple_denom = simplify_fraction(numerator,denominator)
            if simple_denom == 1 and simple_num == 0:
                print(str(fraction) + " -> [0]")
            elif simple_denom == 1:
                print(str(fraction) + " -> " + str(prime_factors(simple_num)))
            elif simple_num == 1:
                print(str(fraction) + " -> [1] / " + str(prime_factors(simple_denom)))
            else:
                print(str(fraction) + " -> " + str(prime_factors(simple_num)) + " / " + str(prime_factors(simple_denom)))
            while True:
                character = str(input('Continue (y/n)? '))
                if character == "y":
                    break
                if character == "n":
                    quit()
                else:
                    print ("That was not a valid choice, please select (y/n).")
                    continue
except ValueError:
    print("That is not a valid fraction, please try again.")
    continue

这是对该计划的测试:

输入正分数然后按enter:-6/2
这不是一个积极的部分,请再试一次 输入正分数然后按Enter:6 / -2
这不是一个积极的部分,请再试一次 输入正分数,然后按enter键:10/0
这不是一个有效的部分,请再试一次 输入正分数然后按enter:0/0
这不是一个有效的部分,请再试一次 输入正分数然后按Enter:0/10
0/10 - &gt; [0]
继续(是/否)? ÿ
输入正分数,然后按enter键:138/24
138/24 - &gt; [23] / [2,2]
继续(是/否)? ÿ
输入正分数,然后按enter:24/138
24/138 - &gt; [2,2] / [23]
继续(是/否)? ü
这不是一个有效的选择,请选择(y / n) 继续(是/否)? TT
这不是一个有效的选择,请选择(y / n) 继续(是/否)? ÿ
这不是一个有效的选择,请选择(y / n) 继续(是/否)? ÿ
输入正分数,然后按Enter键:66
这不是一个有效的部分,请再试一次 输入正分数,然后按enter键:1024/512
1024/512 - &gt; [2]
继续(是/否)? ÿ
输入正分数,然后按enter键:1024/511
1024/511 = [2,2,2,2,2,2,2,2,2,2] / [7,73]
继续(是/否)? n

程序退出。

我的主要错误是没有在我的主代码块中设置变量simple_num和simple_denom ....知道它是基本的东西。一旦完成,只需要进行调整以使其完美。

哇,真是个咆哮。对于那个很抱歉。

如果有人看到它并知道更好的方法,我很乐意看到它...总是试图改进。

感谢这个很棒的网站和社区!