2017-03-08 15 views
-3
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() 

を定義されていない場合、私はそれは私にあなたのメイン方法でelseステートメントは、グローバル名

+4

なぜ、「r」を入力し、存在しない変数への参照で置き換える行をコメントアウトしましたか? –

+1

また、 'input'の前後にかっこは必要ありません。これは 'tuple'を生成するように見えますが、(カンマ'、 'がありません)混乱する可能性があります。 –

+0

私はyからrの値を取得する必要があるので、コメントに入れないとrの値をとり、if rステートメントから計算しません – joe

答えて

-1

を定義されていないエラーグローバル変数rを与えRを置くべき場所を私は理解していない、決してRが何であるかを指定し、あなたがグローバルスコープで変数rを持っているならば、mainメソッドの最初の行は、そうすることによって

 
def main(): 
    global r 
    # Now you can use your r 

する必要がありますので、あなたがあなたの変数と呼ばれますあなたの方法で。

はそれが役に立てば幸い:)すでにコメントで述べた

+0

ありがとう私は両方の方法で試して、それは働いた。 – joe

+0

それから私の答えのために-1なぜそれがあなたのために働いた場合それを正しく印をつけてください:\ –

+0

私は実際に私はできません、私は増やそうとしていますが、私の側の相棒から可能ではありません – joe

0

としては、これは混乱を減らすのに役立ちますので、「良い」(=読める)変数名を使用するようにしてください。

try ... exceptを使用して文字列から浮動小数点への変換を非数値入力に対して堅牢にする必要があるので、別の関数に入れます。

通常、関数では計算された値がすべて挿入された文字列が返されるのではなく、「未処理」の値が返されるようにします。これらの値の印刷は、通常は別の場所で行われます。

コメントでは、「yのrの値を取得する必要があります。コメントに入れない場合はrの値をとり、if rステートメントから計算しません」が、関数vel()は、rを使用して、最初の行のvel_pを計算します。変数rは関数の引数であるため、どこかから来なければなりません。他のすべての値と同じようにユーザーに入力させるか、別の値を定義する必要があります。それをグローバルに行う場合は、Vipin Chaudharysの回答をご覧ください。

私の提案、あなたが入力Rにユーザーをしたい場合: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() 

お知らせ。 yに応じて変更され、新しい値が出力されます。

+0

ありがとう多く、私は私のエラーを理解した。 – joe

+0

こんにちは、あなたが私のvelの価値を印刷する必要があるかどうか教えてください。今、それは全体の議論を返すが、私はただの速度しか必要としない。 – joe

+0

'vel'の値だけを出力したい場合は、関数の' return'ステートメントを変更してください: 'return 'セル内のベロシティの値は{value_vel_p}です。'(value_vel_p = vel_p)' –

関連する問題