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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1029閲覧

ダメージ計算機を作ろうとしたが、enchantメソッドの操作によってはエラーが発生してしまう

Picmin3daisuki

総合スコア11

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/26 09:40

前提・実現したいこと

ダメージ計算機を作ろうとしたが、enchantメソッドの操作によってはエラーが発生してしまう。

エラーメッセージ

TypeError: unsupported operand type(s) for +: 'float' and 'NoneType'

該当のソースコード

Python

1enchants=1 2 3def enchant(ench): 4 global enchants 5 flag=True 6 if not str(ench).isdigit(): 7 if ench=='sharpness': 8 n=int(input('level:'))*0.05 9 elif ench=='smite': 10 n=int(input('level:'))*0.08 11 elif ench=='bane of arthropods': 12 n=int(input('level:'))*0.08 13 elif ench=='cubism': 14 n=int(input('level:'))*0.1 15 elif ench=='giant killer': 16 HP=int(input('playerHP:')) 17 n=(int(input('enemyHP:'))-HP)/HP*int(input('level:'))*0.1 18 if n<0: 19 n=0 20 elif ench=='first strike': 21 n=int(input('level:'))*0.25 22 elif ench=='ender slayer': 23 n=int(input('level:'))*0.12 24 elif ench=='impaling': 25 n=int(input('level:'))*0.125 26 elif ench=='execute': 27 HP=int(input('maxHP:')) 28 n=(HP-int(input('curremtHP:')))/HP*int(input('level:'))*0.002 29 elif ench=='triple strke': 30 n=int(input('level:'))*0.1 31 elif ench=='prosecute': 32 n=int(input('curremtHP:'))/int(input('maxHP:'))*int(input('level:'))*0.001 33 elif ench=='titan killer': 34 n=int(input('enemyDEF:'))*int(input('level:'))*0.02 35 else: 36 flag=False 37 if flag: 38 enchants+=n 39 if ench!='end': 40 enchant(input('enchants:')) 41 else: 42 return float(enchants) 43 44def calc(damage,strength,critical,enchants,combat,armor,other): 45 initial=(5+damage)*(1+strength/100) 46 multiplier=1+(combat*0.04)+enchants+other 47 finaldamage=int(initial*multiplier*armor) 48 criticaldamage=int(finaldamage*(1+critical/100)) 49 print('final damage:',finaldamage) 50 print('final damage(critical)):',criticaldamage) 51 52calc(int(input('damage:')),int(input('strength:')),int(input('critical:')),enchant(input('enchants:')),int(input('combat:')),int(input('armor:')),int(input('other:'))) 53 54

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

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

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

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

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

guest

回答1

0

ベストアンサー

enchant関数最後の部分がおかしいです。
関数呼び出し時の文字列が end 以外だった場合、再度enchant関数を呼び出すことになりますが
そこでは値を return していないので、None が返ることになります。

期待動作がどのような物か不明ですが、おそらく以下のようにすると動作するのでは?

python

1 if ench!='end': 2 enchant(input('enchants:')) 3 return float(enchants)

投稿2021/11/26 16:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問