[从头学数学] 第90节 分数乘法

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入练气期第十一层功法的修炼,
这次要修炼的目标是[分数乘法]。
正剧开始:
星历2016年02月16日 10:58:10, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起继续研究分数的运算。

这次的修炼是练气期第十一层的功法了,当[工程师阿伟]小时候,那时练气期只要修练到第十层就圆满了,就能进入到筑基期。
但是现在却不行了,要修满十二层才可以。时过境迁,这修仙界的规矩也在不断地改变着。

[机器小伟]从[人叫板老师]那里取得了第十一层功法:
[从头学数学] 第90节 分数乘法_第1张图片

下面就可以进行修炼了。

<span style="font-size:18px;">2/9*3 = 2/3


###
# @usage   分数运算
# @author  mw
# @date    2016年01月15日  星期五  09:04:31 
# @param
# @return
#
###
def fractionCalc():
    
    # 可以将任意的四则运算表达式用分数进行计算,
    # 而不是将浮点结果简单转化成分数。
    fin = open('input.txt');
    fout= open('output.txt', 'a');
    
    for line in fin.readlines():
        if line[-1] == '\n':
            line = line[:-1];     
            
        if line == '':
            continue;
        elif line.startswith('#'):
            print(line);
            fout.write(line+'\n');
        else:
            try:
                lines = line.split(sep=' ');
                for i in range(len(lines)):
                    if lines[i]=='':
                        continue;
                    #消除空格
                    lines[i] = lines[i].replace(' ', '');
                    expCount = len(lines[i]);
                    expression = '';

                    #分割操作数
                    operands = [];
                    stmp = '';
                    indexBeg = 0;
                    indexEnd = 0;
                    for j in range(expCount):
                        if isOps(lines[i][j]):
                            if stmp != '':
                                operands.append(stmp);
                                stmp = '';
                        else:
                            stmp+=lines[i][j];
                    if stmp != '':
                        operands.append(stmp);
                    
                    print(operands);

                    #操作数修饰
                    operandCount = len(operands);
                    operandString = [];
                    #数字如1/7要转化成Fraction('1/7')这种样式才可以算出正确结果,引号不可以少掉。
                    for j in range(operandCount):
                        stmp = '';
                        stmp = 'Fraction(\''+operands[j]+'\')';
                        operandString.append(stmp);

                    #组装新表达式       
                    typechange = 1;
                    index = 0;
                    expression = '';
                    
                    for j in range(expCount):
                        #操作符直接添加
                        if  isOps(lines[i][j]):
                            expression+=lines[i][j];
                        else:
                            if j > 0 and typechange == 0 and isOps(lines[i][j-1]):
                                typechange = 1;
                            
                            #从操作数序列中选择对应操作数。
                            if typechange == 1:
                                if index > len(operandString):
                                    break;
                                expression += operandString[index];
                                index+=1;
                                typechange = 0;
                     
                    #表达式结果的运算打印
                    s = '{0} = {1}'.format(lines[i],eval(expression));
                    print(s, end=', ');
                    fout.write(s + ', ');
                print('\n');
                fout.write('\n');
            except:
                #traceback.print_exc();
                ex = '{0} 表达式有误,无法进行计算。'.format(lines[i]);
                print(ex);
                fout.write(ex);

    fout.write('\n');
    fout.close();
    fin.close();

def isOps(c):
    if c == '+' or c == '-' or c == '/' or c == '*' or c == '(' or c ==')':
        return 1;
    else:
        return 0;</span>

[从头学数学] 第90节 分数乘法_第2张图片
<span style="font-size:18px;">12*1/2 = 6, 
12*1/4 = 3, </span>



[人叫板老师]对分数还是很看重的,有好几节功法都是和分数有关的。但对于[机器小伟]来说,题目里面的科普作用才是小伟最看重的。


这李叔叔已经游得很快了,不过还是只有乌贼的十分之一都不到,果然叫了贼,不负这个名字。

<span style="font-size:18px;">9/10*4/45 = 2/25, 
9/10*30 = 27, </span>

[从头学数学] 第90节 分数乘法_第3张图片
<span style="font-size:18px;">3/10*2/3 = 1/5, 
3/10*5 = 3/2, 
28*2/35 = 8/5, </span>


[从头学数学] 第90节 分数乘法_第4张图片

<span style="font-size:18px;">2500*53/125 = 1060, 
2000*1/4 = 500, 
26*7/13 = 14, 
40*11/20 = 22, </span>

[从头学数学] 第90节 分数乘法_第5张图片
<span style="font-size:18px;">80*4/5 = 64, 
9200*2/5*4/5 = 2944, 
30*3/20-5 = -1/2, </span>

看来王明的书包超重了。

[从头学数学] 第90节 分数乘法_第6张图片
<span style="font-size:18px;">1.38*1/6 = 23/100, 
2.5*12/25 = 6/5, 
2.5*4/5 = 2, </span>

<span style="font-size:18px;">75*(1+4/5) = 135, </span>
婴儿每分钟心跳竟然有这么多次。

[从头学数学] 第90节 分数乘法_第7张图片


<span style="font-size:18px;">50*2/5*1/40 = 1/2, 
40*3/4*2/3 = 20, 
32*5/8*3/4 = 15, </span>

[从头学数学] 第90节 分数乘法_第8张图片
<span style="font-size:18px;">236*(1-109/118) = 18, 
21*(1+1/3) = 28, 
16*(1-1/4) = 12, 
430*(1-36/43) = 70, </span>

[从头学数学] 第90节 分数乘法_第9张图片
<span style="font-size:18px;">225*1/5 = 45, 
225*(1+1/5) = 270, </span>

本节到此结束,欲知后事如何,请看下回分解。

你可能感兴趣的:([从头学数学] 第90节 分数乘法)