这是我的程序计算单利的开始。利率将具有以下格式:0.97,0.67,0.17等。它们将不会大于1。因此,如果用户输入9作为利息,程序会将其转换为0.09(除以100)。用户也可以使用“ /”输入输入。因此程序会将97/100的输入转换为0.97。
我写了下面的代码。它有效,但在我看来,可能有一个更简单,更优雅的解决方案。也许使用更多的内置函数等。如果您对此有所帮助,我将不胜感激。
def toNum(interest):
if '/' not in interest:
if float(interest) > 1:
return float(interest)/100
else:
return float(interest)
else:
l= []
n = 0
count = 1
list_interest=[]
for e in interest:
list_interest.append(e)
for e in list_interest:
if count == 1 or count == 3:
l.append(e)
count = count +1
continue
if e == '/':
n = n + 1
count = count +1
else:
l[n] = l[n] + e
return int(l[0]) / int(l[1])
interest = input("Interest rate: ")
print(toNum(interest))
答案 0 :(得分:0)
我想以下方法可能会起作用:
import re
interest = re.sub('[^0-9.0-9]+', '', interest)
print(toNum(interest))
答案 1 :(得分:0)
这似乎可以完成您的工作,并且相当紧凑。
在递归函数调用中添加了EDIT ,因为我意识到if / else并不是真正必要的,因为您可以仅将分子反馈回来。当然,这假定分子/分母始终使用100作为分母。
它确定是否可以float
输入。如果可以,则除以100还是返回,具体取决于值是否为> 1
。如果引发异常(在您的情况下,这意味着用户已经输入"97/100"
或类似的异常),它将对此进行解析并返回计算出的费率。
在很多情况下,这会失败,但这是需要继续考虑的事情。
def toNum(interest):
try:
floated = float(interest)
if floated > 1:
rate = floated / 100
elif floated < 1:
rate = floated
return rate
except ValueError:
return toNum(interest.split("/")[0])
答案 2 :(得分:0)
您有两种情况,输入是纯数字的,或者是分数表示法。因此,请检查您是否有分数:
def toNum(user_input):
if '/' in user_input:
return abs(eval(user_input))
if user_input.isnumeric():
return int(user_input)/100
raise AttributeError('`user_input` must be an integer 0-100 or fraction')
由于isnumeric()
如果输入-1或类似您认为安全的垃圾,将返回false。