2017-05-07 13 views
2

私は現在Pythonを学んでいます(これまで愛していました)少し華氏/摂氏のコンバータを作っています。Python 3.5で小数点以下の最初の数字を選ぶには?

これはそれを実行している時に出力されます。

変換するために、華氏または摂氏度を入力してください:32

32.0度摂氏89.6度華氏です。

華氏32.0度は摂氏0.0度です。

もう一度計算しますか? (y/n):

小数点の後の数字が0(整数)の場合を除いて、どのようにしたいのですか.0を完全に削除したいと思います5)。私はそれがゼロに等しいかどうかをテストするifステートメントがほしいと思いますが、どのように私はその値を選んで行くだろうか?

全コード:

answer = "ERROR" 

def calcfc(): 
""" Calculates F to C and C to F, prints out, 
    and asks if user wants to run again """ 
    try: 
     degrees = float(input("\nPlease enter the degrees in Fahrenheit or Celsius to convert: ")) 
    except Exception: 
     input("\nEnter a valid number next time. Hit enter to terminate.") 
     exit() 

    ftoc = (degrees - 32) * 5/9 
    ctof = (degrees * 9)/5 + 32 

    print("\n{} degrees Celsius is {:.1f} degrees Fahrenheit.".format(degrees, ctof)) 
    print("{} degrees Fahrenheit is {:.1f} degrees Celsius.".format(degrees, ftoc)) 
    global answer 
    answer = input("\n\nDo you want to calculate again? (y/n): ") 

calcfc() 

# run again? 
while answer != "y" and answer != "n": 
    answer = input("\nPlease enter y for yes or n for no: ") 
while answer == "y": 
    calcfc() 
if answer == "n": 
    exit() 
+0

クイックレスポンスありがとう!すべてが有効なソリューションのように見えますが、私はちょうど1つを選んでそれを実行します。 –

+0

あなたのコードを 'calcfc'関数で分割します。関数は度だけを計算し、もう1つは度量衡を再度求めます。この関数から 'calcfc'の最後の2行を取得します。 – Daniel

+0

@ダニエル私はそれが良い方法があるかどうか疑問に思っていました。私はグローバルな答えを使用したときにひどくなりました。ありがとう、私はそれをやります。 –

答えて

1

次のようにして、数の小数部分を取得することができます:

>> num = 42.56 
>> decimal_part = num - int(num) 
>> decimal_part = 0.56 

Thisポストを同様の質問を探ります。

0
args = [89.6, 32.0, 5.5, 10.0, 9.1] 

for var in args: 
    if var == int(var): 
     print int(var) # prints the number without the decimal part 
    else: 
     print var 

OUTPUT

89.6 
32 
5.5 
10 
9.1 
+0

32.01のような番号を試してみませんか? – Allen

+0

@Allenは私のためにうまくいきます...それはどうですか? – alfasin

+0

OPは丸めた後に0を取り除きたい。 '{:.1f}'という形式(32.01)は32.0を出力し、代わりに32を出力します。 – Allen

2

それは.0で終わる場合は、文字列とテストに数値を変換する必要があります。

number = 23.04 
text = "{:.1f}".format(number) 
if text.endswith(".0"): 
    text = text[:-2] 
+0

ああ、これは完璧です、私が探しているものです。どうもありがとうございました! –

+0

変換するには華氏または摂氏の度を入力してください:32 摂氏32度は華氏89.6度です。 華氏32度は摂氏0度です。 完璧!おかげで再び:D –

0

にコードの任意の行を追加することなく、あなたのあなたはこのようなformat()コールでこれを達成するためにgタイプを使用することができます。

'{0:g}'.format(5.5) 

5.5 

'{0:g}'.format(5.0) 

5 
+0

'{0:g}'形式(5.01)ouputs 5.01 OPが期待している間に5 – Allen

+1

その音から、OPは、 /彼女の例 –

0

セットアップ

NSすることができます= [32,32.0,32.04,32.05,32.1,32.45,32.5,32.51,32.6]

ソリューション

for n in ns: 
    print('Before: {:.1f}'.format(n)) 
    #conditionally set the decimal place. 
    print('After: {:.{}f}'.format(n, 0 if n%1 <0.05 else 1)) 

Before: 32.0 
After: 32 
Before: 32.0 
After: 32 
Before: 32.0 
After: 32 
Before: 32.0 
After: 32 
Before: 32.1 
After: 32.1 
Before: 32.5 
After: 32.5 
Before: 32.5 
After: 32.5 
Before: 32.5 
After: 32.5 
Before: 32.6 
After: 32.6 
0

モジュロ演算子を使用してください:

for num in [67.89, 123.0]: 
    if num % 1 == 0: 
     print(int(num)) 
    else: 
     print(num) 

#Output: 
67.89 
123 
0

これを試してください。私は数字から.0sを取り除く関数を定義しました。プリント中に{:.1f}を{}に変更したので、浮動小数点数にフォーマットされ、小数点があります。

answer = "ERROR" 

def remove0(initialValue): 
    strValue = str(initialValue) 

    if ("." in strValue): 
    if(int(str(strValue.split(".")[1])) == 0): 
     return int(strValue.split(".")[0]) 
    else: 
     return initialValue 
    else: 
    return initialValue 

def calcfc(): 
    """ Calculates F to C and C to F, prints out, and asks if user wants to run again """ 
    try: 
     degrees = remove0(float(input("\nPlease enter the degrees in Fahrenheit or Celsius to convert: "))) 
    except Exception: 
     input("\nEnter a valid number next time. Hit enter to terminate.") 
     exit() 

    ftoc = (degrees - 32) * 5/9 
    ctof = (degrees * 9)/5 + 32 

    ftoc = remove0(ftoc) 
    ctof = remove0(ctof) 

    print("\n{} degrees Celsius is {} degrees Fahrenheit.".format(degrees, ctof)) 
    print("{} degrees Fahrenheit is {} degrees Celsius.".format(degrees, ftoc)) 
    global answer 
    answer = input("\n\nDo you want to calculate again? (y/n): ") 

calcfc() 

# run again? 
while answer != "y" and answer != "n": 
    answer = input("\nPlease enter y for yes or n for no: ") 
while answer == "y": 
    calcfc() 
if answer == "n": 
    exit() 
0

(OPに代わって解決策を投稿します)。

固定/作業コードは以下のとおりであり、提案ごとに繰り返すための追加機能が追加されました(Daniel!ありがとう!)。誰かが使用している場合に備えて私は残していると考えました。

def calcfc(): 
    """ Calculates F to C and C to F, prints out, 
     and asks if user wants to run again """ 
    try: 
     degrees = float(input("\nPlease enter the degrees in Fahrenheit or Celsius to convert: ")) 
    except Exception: 
     print("\nPlease enter a valid number.") 
     calcfc() 

    ctof = (degrees * 9)/5 + 32 
    ftoc = (degrees - 32) * 5/9 

    # checks if it's a whole number and gets rid of decimal if so 
    degrees_text = "{:.1f}".format(degrees) 
    ctof_text = "{:.1f}".format(ctof) 
    ftoc_text = "{:.1f}".format(ftoc) 
    if ctof_text.endswith(".0"): 
     ctof_text = ctof_text[:-2] 
    if ftoc_text.endswith(".0"): 
     ftoc_text = ftoc_text[:-2] 
    if degrees_text.endswith(".0"): 
     degrees_text = degrees_text[:-2] 

    print("\n{} degrees Celsius is {} degrees Fahrenheit.".format(degrees_text, ctof_text)) 
    print("{} degrees Fahrenheit is {} degrees Celsius.".format(degrees_text, ftoc_text)) 
    runagain() 

def runagain(): 
    answer = input("\n\nDo you want to calculate again? (y/n): ") 
    answer = answer.lower() 
    # run again? 
    while answer != "y" and answer != "n": 
     answer = input("\nPlease enter y for yes or n for no: ") 
    if answer == "y": 
     calcfc() 
    if answer == "n": 
     exit() 

calcfc() 
+0

ああ、ありがとう! –

+0

はい@Beef、自己解答が奨励されていますが、我々は受け入れているので、[解決済みの]タイトル編集を避ける方が好きです。システム上。Welcome on board。 – halfer

+0

また、あなたは義務はありませんが、他の回答のいずれかが+1の投票にふさわしいと思われる場合は、その有益な人に何らかのクレジットを与えてください。 – halfer

関連する問題