としては、これは混乱を減らすのに役立ちますので、「良い」(=読める)変数名を使用するようにしてください。
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に応じて変更され、新しい値が出力されます。
なぜ、「r」を入力し、存在しない変数への参照で置き換える行をコメントアウトしましたか? –
また、 'input'の前後にかっこは必要ありません。これは 'tuple'を生成するように見えますが、(カンマ'、 'がありません)混乱する可能性があります。 –
私はyからrの値を取得する必要があるので、コメントに入れないとrの値をとり、if rステートメントから計算しません – joe