如果其他语句,则未定义全局名称


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()

我不明白我在哪里放置它会给我一个错误的全局变量r未定义

如评论中已经提到的,尝试使用"良好"(=可读)变量名称,因为这有助于减少混乱。

使用 try ... except,应对非数字输入进行从字符串转换为float,所以我将其放在单独的功能中。

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

在您提到的评论中,您"需要从y中获取r的值,如果我不将其放在评论中,则它的价值为r,并且不会从if r语句中计算出来",但是您的函数vel()使用R在第一行中计算VEL_P。变量r是该功能的参数,因此必须来自某个地方。您要么让用户像所有其他值一样输入它,要么必须在其他地方定义它。如果您在全球范围内这样做,请看看Vipin Chaudharys的答案。

我的建议,如果您希望用户输入R:

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()

请注意,R的输入值用于进行计算。然后根据y进行更改,并打印新值。

在您的 main 方法中,您分配了b = (r),而您从未指定什么是R,因此,如果您在全球范围中具有可变的r主要方法应为

def main():   全球r   #现在您可以使用R

这样做,您在方法中调用了变量r

希望它有帮助:)

相关内容

  • 没有找到相关文章

最新更新