🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

Q&A

解決済

2回答

453閲覧

if関数で作った文を正しく作動させたい。

hirosann15

総合スコア18

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

0グッド

2クリップ

投稿2021/01/18 09:12

一人で遊ぶためにpythonというプログラミング言語を使ってジャンケンの様なものを作ろうと思いました。その際randomモジュールを用いました。
内容としては干支の名前を使い、

ウシはネズミに勝ち、トラはウシに勝ち、ウサギはトラに勝ち、タツはウサギに勝ち…ネズミはイノシシに勝つ。それ以外は負け(勝敗はすべて "あなた(you)" 目線)

最後の1行目から4行目までのif関数を使った文が正常に動作しません。どのようにコードを書き直せばいいのでしょうか?

python

1import random 2eto=["ネズミ","ウシ","トラ","ウサギ","タツ","ミ","ウマ","ヒツジ","サル","トリ","イヌ","イノシシ"] 3pc= random.choice(eto) 4for i in range(12): 5 print(f"{i}:{eto[i]}") 6you=input("どれを出しますか?") 7you=eto[ int (you)] 8print(f"pc:{pc}vsあなた:{you}") 9if (pc+"1"==you) or (you==0 and pc==11): 10 print("勝ち") 11else: 12 print("負け")

結果

0:ネズミ 1:ウシ 2:トラ 3:ウサギ 4:タツ 5:ミ 6:ウマ 7:ヒツジ 8:サル 9:トリ 10:イヌ 11:イノシシ どれを出しますか?0 pc:イノシシvsあなた:ネズミ 負け

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

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

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

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

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

ppaul

2021/01/18 09:23 編集

勝敗の結果が違うということですか。
guest

回答2

0

ベストアンサー

pythonは文字列の足し算が出来ますが、"ネズミ"+”1”は"ネズミ1"です。
PC+1 とYou で順番を判定したいならば、PCとyouは整数でなければなりません。
そのため、プログラム全体での書き換えが必要です。

python

1import random 2eto=["ネズミ","ウシ","トラ","ウサギ","タツ","ミ","ウマ","ヒツジ","サル","トリ","イヌ","イノシシ"] 3pc= random.randint(0,11) 4for i in range(12): 5 print(f"{i}:{eto[i]}") 6 7you=int(input("どれを出しますか?")) 8 9print(f"pc:{eto[pc]}vsあなた:{eto[you]}") 10if (pc+1==you) or (you==0 and pc==11): 11 print("勝ち") 12else: 13 print("負け")

投稿2021/01/18 09:32

編集2021/01/18 09:52
ppaul

総合スコア24670

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

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

hirosann15

2021/01/18 09:47

コピーして実行してみた結果 負け の部分は正常に反応しています。しかしたぶん勝ちの場合の時に起きていると思うのですが、範囲外のインデックスを指定すると出るエラーの list index out of range 出てしまいます。これはなぜなのでしょうか? IndexError Traceback (most recent call last) <ipython-input-48-4961f56366a7> in <module> 7 you=int(input("どれを出しますか?")) 8 ----> 9 print(f"pc:{eto[pc]}vsあなた:{eto[you]}") 10 if (pc+1==you) or (you==0 and pc==11): 11 print("勝ち") IndexError: list index out of range
ppaul

2021/01/18 09:51

random.randint(1,12) は random.randint(0,11) の間違いでした。 修正しておきます。
hirosann15

2021/01/18 09:53

そういうことでしたか。自分もしっかり確認できておらずすみませんでした。回答ありがとうございました。
guest

0

if (pc+"1"==you) or (you==0 and pc==11):

pc+1 でしょうか

投稿2021/01/18 09:24

y_waiwai

総合スコア88038

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問