‘壹’ 用python带分数和分数
#!/usr/bin/envpython3
fromrandomimportrandint,choice
defmm(m,n):
"""求两个整数的最小公倍数"""
ifm>n:
m,n=n,m
ifm==norm==1orn%m==0:
returnn
foriinrange(2,n+1):
ifm*i%n==0:
returnm*i
defmn(m,n):
"""求两个整数的最小公约数"""
ifm>n:
m,n=n,m
ifm==norm==1orn%m==0:
returnm
r=1
foriinrange(2,m):
ifm%i==0andn%i==0:
r=i
returnr
defrd(t=3):
"""随机生成一个分数"""
w=randint(1,9)
d=randint(2,9)
n=randint(1,d-1)
m=mn(d,n)
return[w,n//m,d//m]
defshow(a):
"""[1,1,2]-->'11/2'"""
return'{}{}/{}'.format(*a)
defimp(a):
"""11/2-->3/2"""
return[a[0]*a[2]+(a[0]//abs(a[0]))*a[1],a[2]]
defunimp(a):
"""3/2-->11/2"""
m=mn(abs(a[0]),a[1])
n,d=a[0]//m,a[1]//m
return(n//abs(n))*(abs(n)//d),abs(n)%d,d
defadd(a,b,negative=False):
a,b=imp(a),imp(b)
m=mm(a[1],b[1])
sign=-1ifnegativeelse1
r=a[0]*m//a[1]+sign*b[0]*m//b[1],m
returnunimp(r)
defmain():
right=0
foriinrange(20):
print('Question{}:'.format(i+1))
a,s,b=rd(),choice(('+','-')),rd()
result=show(add(a,b,s=='-'))
inp=input('{}{}{}='.format(show(a),s,show(b))).strip()
ifinp==resultorinp==result.lstrip('0'):
right+=1
print('Right.')
else:
print('Wrong!Thecorrectresultis:{}'.format(result.lstrip('0')))
print('Testcomplete.Right:{},wrong:{},Rate:{}%'.format(
right,20-right,right*5))
if__name__=='__main__':
main()