如何使用Ruby在主程序中使用函数中的局部变量?
感谢您查看我的问题!:) 我是一个为Rails课程(在SMC)学习Ruby的noob,我被一个与循环和函数有关的练习作业困住了。问题似乎是,我不知道如何从函数中使用的变量向主程序返回正确的值 目标如下: 创建一个Ruby程序,计算圣莫尼卡学院的学生费用。为了获得全额积分,您必须创建函数以使用参数解决此问题。此外,为了获得全额积分,当用户输入无效数据值时,必须抛出并捕获异常 下表总结了我希望您的程序执行的成本计算 圣莫尼卡学院学生费用(截至2014年秋季) 报名费 加州居民46.00美元/套 一层/非居民每单元325.00美元 学生服务费 (因为贴纸费用是可选的,节省19.50美元) (身份证费用可选,节省13美元) 冬季/夏季47.50美元 秋季/春季50.50美元 停车标志(可选) 冬季/夏季$45.00 秋季/春季85美元 这个节目对话描述了我正在寻找的节目 这是我的程序,我遇到了麻烦(我已经注释掉了一些我不确定的代码): 以下是我的函数,它们位于名为“unit5test.rb”的单独文件中:如何使用Ruby在主程序中使用函数中的局部变量?,ruby,function,loops,global-variables,local-variables,Ruby,Function,Loops,Global Variables,Local Variables,感谢您查看我的问题!:) 我是一个为Rails课程(在SMC)学习Ruby的noob,我被一个与循环和函数有关的练习作业困住了。问题似乎是,我不知道如何从函数中使用的变量向主程序返回正确的值 目标如下: 创建一个Ruby程序,计算圣莫尼卡学院的学生费用。为了获得全额积分,您必须创建函数以使用参数解决此问题。此外,为了获得全额积分,当用户输入无效数据值时,必须抛出并捕获异常 下表总结了我希望您的程序执行的成本计算 圣莫尼卡学院学生费用(截至2014年秋季) 报名费 加州居民46.00美元/套 一层
# 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 )