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它给我一个错误的全局变量r未定义
答案 0 :(得分:0)
正如评论中已经提到的那样,尝试使用&#34; good&#34; (=可读)变量名称,因为这有助于减少混淆。
对于使用try
... except
的非数字输入,应该使从字符串到float的转换变得健壮,所以我把它放在一个单独的函数中。
通常,您不希望函数返回插入了所有计算值的字符串,但是&#34; raw&#34;值。这些值的打印通常应该在其他地方完成。
在评论中你提到你&#34;需要从y得到r的值,如果我没有把它放在注释中它取我的r值并且不会从if r语句计算出来#34; ,但是你的函数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更改它,并打印新值。
答案 1 :(得分:-1)
在您的主方法中,您指定了b = (r)
,而您从未指定过什么是r,所以如果您的全局范围内有变量r
,那么第一行就是主要方法应该是
def main(): global r # Now you can use your r
通过这样做,您在方法中调用了变量r
。
希望有所帮助:)