如何使用Ruby在主程序中使用函数中的局部变量?

如何使用Ruby在主程序中使用函数中的局部变量?,ruby,function,loops,global-variables,local-variables,Ruby,Function,Loops,Global Variables,Local Variables,感谢您查看我的问题!:) 我是一个为Rails课程(在SMC)学习Ruby的noob,我被一个与循环和函数有关的练习作业困住了。问题似乎是,我不知道如何从函数中使用的变量向主程序返回正确的值 目标如下: 创建一个Ruby程序,计算圣莫尼卡学院的学生费用。为了获得全额积分,您必须创建函数以使用参数解决此问题。此外,为了获得全额积分,当用户输入无效数据值时,必须抛出并捕获异常 下表总结了我希望您的程序执行的成本计算 圣莫尼卡学院学生费用(截至2014年秋季) 报名费 加州居民46.00美元/套 一层

感谢您查看我的问题!:)

我是一个为Rails课程(在SMC)学习Ruby的noob,我被一个与循环和函数有关的练习作业困住了。问题似乎是,我不知道如何从函数中使用的变量向主程序返回正确的值

目标如下:

创建一个Ruby程序,计算圣莫尼卡学院的学生费用。为了获得全额积分,您必须创建函数以使用参数解决此问题。此外,为了获得全额积分,当用户输入无效数据值时,必须抛出并捕获异常

下表总结了我希望您的程序执行的成本计算

圣莫尼卡学院学生费用(截至2014年秋季)

报名费

加州居民46.00美元/套 一层/非居民每单元325.00美元

学生服务费 (因为贴纸费用是可选的,节省19.50美元) (身份证费用可选,节省13美元)

冬季/夏季47.50美元 秋季/春季50.50美元

停车标志(可选)

冬季/夏季$45.00 秋季/春季85美元

这个节目对话描述了我正在寻找的节目

这是我的程序,我遇到了麻烦(我已经注释掉了一些我不确定的代码):

以下是我的函数,它们位于名为“unit5test.rb”的单独文件中:

# contains functions for the SMC Fee Calculator

def session_type ( semester )
    if (semester == 0)
        semester = "Fall"
    elsif (semester == 1)
        semester = "Winter"
    elsif (semester == 2)
        semester = "Spring"
    elsif (semester == 3)
        semester = "Summer"
    end

    return semester
end

def unit_fee ( units, resident, fees )

    # if (semester == 0 or semester == 2)
        if (units < 0 or units > 16)
            raise "inappropriate number of units entered for semester"
        end
    # elsif (semester == 1 or semester == 3)
    #   if (units < 0 or units > 8)
    #       raise "inappropriate number of units entered for session"
    #   end
    # end

    if (resident == 0)
        fees += (units * 46.00)
    elsif (resident == 1)
        fees += (units * 325.00)
    end

    return fees
end

def decal_fee ( decal, semester, fees )

    if (semester == 0 or semester == 2)
        if (decal == 'y')
            fees += 85.00
        end
    elsif (semester == 1 or semester == 3)
        if (decal == 'y')
            fees += 45.00
        end
    end

    return fees
end

def services_fee ( semester, sticker, card, fees )

    if (semester == 0 or semester == 2)
        fees += 50.50
        if (sticker == 'n')
            fees -= 19.50
        end
        if (card == 'n')
            fees -= 13.00
        end
    elsif (semester == 1 or semester == 3)
        fees += 47.50
        if (sticker == 'n')
            fees -= 19.50
        end
        if (card == 'n')
            fees -= 13.00
        end
    end

    return fees
end
提前谢谢你帮了我的忙!尽管困难重重,我还是喜欢学习Ruby!:)

您的代码:

fees = 0
unit_fee( units, resident, fees )
decal_fee( decal, semester, fees )
total_fees = services_fee( sticker, card, semester, fees )
将此更改为:

fees = 0
fees+=unit_fee( units, resident, fees )
fees+=decal_fee( decal, semester, fees )
total_fees = services_fee( sticker, card, semester, fees )

当您将
费用
传递到
单位费用
贴花费用
时,只传递
费用
的值,因此它不会更改
费用
的原始值,即
0

您没有保存单位费用方法返回的值。它应该是类似于费用+=单位费用(…)。将费用传递到函数中不会返回变量,只返回值。哦,好的,那么我应该在调用费为0的函数之前初始化可变费用,然后调用费为+=单位费(单位,费用)+贴花费(贴花,学期,费用)+服务费(贴纸,卡片,学期,费用)的函数吗?这就是想法。如果您计划在一行中完成这3个方法调用,您可能需要将它们括在括号中。非常感谢!我在所有函数调用的周围添加了括号,并将其设置为fees变量,结果成功了!:)哦,我还意识到我应该通过执行以下操作来初始化学期变量:sement=sement\u type(sement)…这样我就可以在输出中获得正确的字符串。谢谢,这就是我的代码最终的样子!:)
SMC Fee Calculator
Is this Fall[0], Winter[1], Spring[2] or Summer[3] session: 0
Enter number of units enrolled: 12
Are you a state resident[0] or not[1]: 0
Want a parking decal? [y/n]: n
Want an AS sticker? [y/n]: n
Want an ID card? [y/n]: n
For
Fall
 semester, your total fees are $
0
fees = 0
unit_fee( units, resident, fees )
decal_fee( decal, semester, fees )
total_fees = services_fee( sticker, card, semester, fees )
fees = 0
fees+=unit_fee( units, resident, fees )
fees+=decal_fee( decal, semester, fees )
total_fees = services_fee( sticker, card, semester, fees )