Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python If else语句,未定义全局名称 def级别(y、umax、r、Rmax): 水平p=umax*(1-(r/Rmax)**2) 如果在main方法中r_Python_If Statement_Global Variables - Fatal编程技术网

Python If else语句,未定义全局名称 def级别(y、umax、r、Rmax): 水平p=umax*(1-(r/Rmax)**2) 如果在main方法中r

Python If else语句,未定义全局名称 def级别(y、umax、r、Rmax): 水平p=umax*(1-(r/Rmax)**2) 如果在main方法中r,python,if-statement,global-variables,Python,If Statement,Global Variables,,则分配了b=(r),而您从未指定什么是r,因此如果在全局范围中有变量r,则主方法中的第一行应为 def vel(y,umax,r,Rmax): vel_p=umax*(1-(r/Rmax)**2) if r<50: r=50-y else: r=y-50 return 'the value of velocity in cell is %r,%r,%r,%r'%(umax,r,Rmax,vel_p) def m

,则分配了
b=(r)
,而您从未指定什么是r,因此如果在全局范围中有变量
r
,则主方法中的第一行应为

def vel(y,umax,r,Rmax):
     vel_p=umax*(1-(r/Rmax)**2)

     if r<50:
        r=50-y
     else:
        r=y-50
     return 'the value of velocity in cell is %r,%r,%r,%r'%(umax,r,Rmax,vel_p)


def main ():

     y=(input('enter y'))   
     a=(input('enter the umax'))
     #b=(input('enter the r'))
     b=(r)
     c=(input('enter the Rmax'))
     print(vel(a,c,b,y))

main()
def main(): 全局r #现在您可以使用您的r 这样,您就在方法中调用了变量
r


希望有帮助:)

正如评论中已经提到的,尝试使用“好的”(=可读的)变量名,因为这有助于减少混淆

使用
try
除了
,从字符串到浮点的转换应该对非数字输入具有鲁棒性,所以我将其放在一个单独的函数中

通常,您不希望函数返回插入了所有计算值的字符串,而是返回“原始”值。这些值的打印通常应在其他地方进行

在您提到的注释中,您“需要从y中获取r的值,如果我不在注释中输入,它将获取我的r值,并且不会从if r语句中计算”,但是您的函数
vel()
使用r来计算第一行中的vel_p。变量r是函数的参数,因此它必须来自某个地方。要么让用户像所有其他值一样输入它,要么必须在其他地方定义它。如果你在全球范围内这样做,看看Vipin Chaudhary的答案

我的建议是,如果希望用户输入r:

def main(): global r # Now you can use your r
def-vel(y,u_-max,r,r_-max):
#你已经在这里使用了r的值!
水平p=u最大值*(1-(r/r最大值)**2)
#这里你改变r,如果r小于50。
#在指定新值之前,再次使用r!

如果是rWell,为什么要注释掉输入“r”的行,并将其替换为对不存在的变量的引用?在
输入
周围也不需要括号。这看起来像是它生成了一个
元组
,但它没有(缺少逗号
),并且可能会让人困惑。因为我需要从y中获取r的值,如果我不在注释中输入,它将获取我的r值,并且不会从if r语句中计算。另外,请注意
input()
将返回一个字符串。若要使用这些值进行计算,则必须转换为int或float。此外,还应保持变量名的一致性。你的函数
vel()
期望y,umax,r,Rmax是这样的顺序,但是你用a(保存umax的值)、c(保存Rmax的值)、b(可能保存r的值)和y来调用它。那么为什么我的答案是-1,如果它对你有效,请将其正确标记:\n我没有标记任何值,事实上我不能,我正在尝试增加,但从我的角度看不可能,sirHi,你能告诉我,如果我需要打印我的级别值,我应该给出什么语法或命令吗??现在它返回整个参数,但我只需要速度。如果您只想打印
vel
的值,请更改函数的
return
语句:
return'单元格中的速度值为{value\u vel\u p}'。格式(value\u vel\u p=vel\u p)
def vel(y, u_max, r, r_max):
    # You use the value of r here already!
    vel_p=u_max*(1-(r/r_max)**2)

    # Here you change r, if r is less than 50.
    # You are using r again, before assigning a new value!
    if r<50:
        r=50-y
    else:
        r=y-50

    # I use the preferred .format() function with explicit field names
    # \ is used to do a line-break for readability
    return 'The value of velocity in cell is umax: {value_u_max}, \
r: {value_r}, Rmax: {value_r_max}, vel_p: {value_vel_p}.'.format(
    value_u_max=u_max, value_r=r,value_r_max=r_max, value_vel_p=vel_p)

# Helper function to sanitize user input    
def numberinput(text='? '):
    while True:
        try:
            number=float(input(text))
            # return breaks the loop
            return number
        except ValueError:
            print('Input error. Please enter a number!')


def main():
    y=numberinput('Enter y: ')
    u_max=numberinput('Enter the umax: ')
    r=numberinput('Enter the r: ')
    r_max=numberinput('Enter the Rmax: ')
    print(vel(y, u_max, r, r_max))

main()