質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1140閲覧

なぜ動かない...

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2015/05/24 03:53

lang

1def change_bite(inp_1, sel_1, sel_2): 2 3 bite_dict = { 4 'B' : 1, 5 'TB' : 10 ** 12, 6 'GB' : 10 ** 9, 7 'MB' : 10 ** 6, 8 'KB' : 10 ** 3, 9 'mb' : 10 ** -3, 10 'μb' : 10 ** -6, 11 'nb' : 10 ** -9, 12 'pb' : 10 ** -12 13 } 14 15 c_bite = { n:b for b, n in bite_dict.items() }[bite_dict[sel_2]] 16 if c_bite[sel_2] < bite_dict['B']: 17 result = inp_1 * bite_dict[sel_1] * -(bite_dict[sel_2]) 18 else: 19 result = inp_1 * bite_dict[sel_1] * bite_dict[sel_2] 20 21 return result + c_bite 22 23print(change_bite(3, 'GB', 'mb')) 24``` 25なぜ動かないのか教えてください 26悲しくて泣きそうです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

c_biteという変数の代入のところが何がしたいのかよくわからなくなってますね。
{ n:b for b, n in bite_dict.items() }でbite_dictのキーと値を入れ替えた辞書を作成してますが
その後ろの[bite_dict[sel_2]]によって結局c_biteには'mb'という文字列が代入されてしまっています
(これではsel_2と同じ値を得るだけなので無意味ですね)

そして次の行のc_bite[sel_2]部分が'mb'['mb']と評価され、結果エラーが出てしまってます。

こうではないでしょうか。

lang

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4def change_bite(inp_1, sel_1, sel_2): 5 6 bite_dict = { 7 'B' : 1, 8 'TB' : 10 ** 12, 9 'GB' : 10 ** 9, 10 'MB' : 10 ** 6, 11 'KB' : 10 ** 3, 12 'mb' : 10 ** -3, 13 'μb' : 10 ** -6, 14 'nb' : 10 ** -9, 15 'pb' : 10 ** -12 16 } 17 18 c_bite = bite_dict[sel_2] 19 if c_bite < bite_dict['B']: 20 result = inp_1 * bite_dict[sel_1] * -(bite_dict[sel_2]) 21 else: 22 result = inp_1 * bite_dict[sel_1] * bite_dict[sel_2] 23 24 # resultはfloat型なので結合する際はstr()で変換が必要 25 return str(result) + sel_2 26 27print(change_bite(3, 'GB', 'mb'))

動かない場合はエラーの内容で検索したり、
変数の値、型が違っていないか確認してみるのも大切です

----- 追記 -----
後で気づいたのですが

lang

1c_bite = bite_dict[sel_2] 2if c_bite < bite_dict['B']:

の箇所は別に

lang

1if bite_dict[sel_2] < bite_dict['B']:

でも問題無いですね。

投稿2015/05/24 04:40

編集2015/05/24 04:45
MAGP

総合スコア153

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エラーが出ていませんか?エラーメッセージも載せて質問するとよいでしょう。

lang

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4def change_bite(inp_1, sel_1, sel_2): 5 6 bite_dict = { 7 'B' : 1, 8 'TB' : 10 ** 12, 9 'GB' : 10 ** 9, 10 'MB' : 10 ** 6, 11 'KB' : 10 ** 3, 12 'mb' : 10 ** -3, 13 'μb' : 10 ** -6, 14 'nb' : 10 ** -9, 15 'pb' : 10 ** -12 16 } 17 18 c_bite = { n:b for b, n in bite_dict.items() }[bite_dict[sel_2]] 19 if c_bite < bite_dict['B']: 20 result = inp_1 * bite_dict[sel_1] * -(bite_dict[sel_2]) 21 else: 22 result = inp_1 * bite_dict[sel_1] * bite_dict[sel_2] 23 24 return str(result) + c_bite 25 26print(change_bite(3, 'GB', 'mb'))

これなら動きますから、見比べてみて下さい。

投稿2015/05/24 04:14

takotakot

総合スコア1111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問