我做了一个简单的函数,它计算给定范围的数字的平方根。如果x为负数,则函数停止并抛出并显示错误消息。这是代码:
function square(x::Int,y::Int)
for i in range(x,y)
if i< 0
print("You can't enter non-negative numbers. Please enter a valid number for x.")
break
else i>=0
println(sqrt.(i))
end
end
end
当我将函数用于有效范围时,会出现问题。例如,当我调用函数范围(0,9)时,我得到了这个:
square(0,9)
0.0
1.0
1.4142135623730951
1.7320508075688772
2.0
2.23606797749979
2.449489742783178
2.6457513110645907
2.8284271247461903
然后,当我呼吁
时square(2,9)
1.4142135623730951
1.7320508075688772
2.0
2.23606797749979
2.449489742783178
2.6457513110645907
2.8284271247461903
3.0
3.1622776601683795
我尝试了很多组合,只是在少数情况下,该功能按预期工作(例如范围为1:9)。 有人可以解释一下我做错了什么,我该如何解决这个问题呢? 任何帮助将不胜感激
答案 0 :(得分:4)
正如@Fredrik Bagge在评论中提到的那样,range(x,y)
并没有按照您的意愿行事。通过?range
查看文档,我们看到了
range(start, [step], length)
根据起始值和可选步骤(默认为1),按长度构造范围。
因此第二个整数参数指定范围的长度而不是端点。您要使用的是start:step:range
语法或linspace(start, stop, numberofpoints)
。
使用后者(例如numberofpoints=10
),您的函数将会读取
function square(x::Int,y::Int)
for i in linspace(x,y,10)
if i< 0
print("You can't enter non-negative numbers. Please enter a valid number for x.")
break
else i>=0
println(sqrt.(i))
end
end
end
但是,sqrt.(i)
中的广播没有多大意义,因为i
是一个数字。我可能宁愿做这样的事情
function square2(x::Int,y::Int)
(x<0 || y<0) && error("You can't enter non-negative numbers. Please enter a valid number for x.")
sqrt.(linspace(x,y,10))
end
注意:pull request range
方法已对linspace
方法进行了全面检查,并且对于Julia 0.7已弃用class NotificationsController < ApplicationController
def mynotifications
@u_notifications_paginate = current_user.notifications.all.order('created_at DESC').paginate(:page => params[:page], :per_page => 10)
@u_notifications_paginate.update read: true
end
def destroy
if current_user
notif = current_user.notifications.find_by_notification_uid!(params[:id])
notif.destroy
redirect_to mynotifications_path(locale: I18n.locale)
else
redirect_to root_path(locale: I18n.locale)
end
end
end
。
答案 1 :(得分:0)
我不太明白为什么你需要编写这样的函数。你可以写
sqrt.(x:y)
然后使用它。如果您需要以某种特定方式将数字打印到屏幕,请执行以下操作:
function square(x::Int,y::Int)
for i in x:y
if i < 0
println("You can't enter non-negative numbers. Please enter a valid number for x.")
return
else
println(sqrt(i))
end
end
end
答案 2 :(得分:-3)
在Julia collect中,作为Python和R等语言的范围工作。也许解决方案不是那么优雅,但按预期工作:
function square(x::Int,y::Int)
for i in collect(x:y)
if i< 0
print("You can't enter non-negative numbers. Please enter a valid number for x.")
break
else i>=0
return sqrt.(collect(x:y))
end
end
end
square(1,25)