我在这里使用类来输入分数(当给出分子和分母时),以及将两个分数相加和相乘。出于某种原因,导入的分数模块仅适用于部分程序; gcd方法有效,但Fraction方法(当给出两个数字时,放入分数格式)不起作用,而是抛出一个NameError(特别是“全局名称'Fractions'未定义”)。
我做错了什么?我对Python比较陌生,并且非常感谢有关如何使这些代码更紧密以及更多异常的任何建议。
这是我的代码:
import fractions
class FractionClass:
# Initialize starting numerator and denominator.
n = 0
d = 0
def __init__(self, numerator, denominator):
self.n = numerator
self.d = denominator
# Function that adds fractions, whichs throws NameError if gcd() doesn't work!
def add_fractions(self, other):
try:
sum_numerator = self.n + other.n
sum_denominator = fractions.gcd(self.d, other.d)
return(sum_numerator, sum_denominator)
except NameError:
print("Methods aren't defined.")
# Function that multiplies fractions, whichs throws NameError if gcd() doesn't work!
def multiply_fractions(self, other):
try:
product_numerator = self.n * other.n
product_denominator = self.d * other.d
return(product_numerator, product_denominator)
except NameError:
print("Methods aren't defined.")
# Enter input function.
def user_input():
try:
print("Enter a numerator and denominator:")
n, d = [int(x) for x in input().split()]
print("Enter a numerator and denominator:")
n2, d2 = [int(x) for x in input().split()]
# Check used to debug for denominators that aren't the minimum of 1 (0 can't be divided!)
check = 1 / d
check = 1 / d2
# print(check)
# Exception for d = 0.
except ZeroDivisionError:
print("\n You didn't enter the minimum denominator.")
print("Set denominator to minimum default.")
d = 1
# Exception for not entering a space in between numbers.
except UnboundLocalError:
print("You didn't enter your numbers in properly! Try again.")
# Exception for not entering all required.
except NameError:
print("\n You didn't enter two numbers.")
# Exception for user input both or one of them, not being integers.
except TypeError:
print("\n You didn't enter all valid numbers.")
# General exception case.
except:
print("Something went wrong!")
fract = FractionClass(n,d)
another_fraction = FractionClass(n2, d2)
total_sum = fract.add_fractions(another_fraction)
# Unpacks total sum tuple.
# Puts in fraction format.
sum_numerator, sum_denominator = total_sum
add_output = fractions.Fraction(sum_numerator, sum_denominator)
total_product = fract.multiply_fractions(another_fraction)
# Unpacks product sum tuple.
# Puts in fraction format.
product_numerator, product_denominator = total_product
multiply_output = fractions.Fraction(product_numerator, product_denominator)
print(add_output, multiply_output)
答案 0 :(得分:4)
您不需要自己的类来乘以两个分数:
>>> from fractions import Fraction as F
>>> F("1/2")
Fraction(1, 2)
>>> F("3/4")
Fraction(3, 4)
>>> F("1/2") * F("3/4")
Fraction(3, 8)
>>> F("1/2") + F("3/4")
Fraction(5, 4)
>>> F(5, 8) + F(4, 7)
Fraction(67, 56)
至于您提到的错误,因为您的代码中没有任何名称“Fractions”,并且您没有发布回溯。您最有可能运行一些旧版本的代码。
答案 1 :(得分:0)
第26行还有一个空格:
except NameError:
应该是
except NameError:
您还应该检查并修复缩进。否则,没有身体 - 没有任何东西被称为。