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

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

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

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

Q&A

2回答

554閲覧

printで1行で表示したい

shinnnaka

総合スコア6

Python 3.x

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

0グッド

0クリップ

投稿2023/01/23 12:53

編集2023/01/23 23:36

前提

python です
2分探索を書いてます

実現したいこと

2分探索で途中のdata[left],data[mid],data[right]の数値の変化が見たいので1行でprint関数で表示されるようにしたい

発生している問題・エラーメッセージ

TypeError: str() argument 'encoding' must be str, not int
もしくは
TypeError: list indices must be integers or slices, not tuple

該当のソースコード

data = [1, 2, 9, 16, 22, 25, 30, 40, 50, 57, 72, 78, 82, 94, 100] key=int(input("入力してください")) left=0 right=len(data)-1 flg=0 while left<right: mid=(left+right)//2 print("L={} M={} R={}".format(left,mid,right)) print(str(data[left],data[mid],data[right])) if data[mid]==key: print("data[{}]が{}です".format(mid,key)) flg=1 break if data[mid]<key: left=mid+1 else: right=mid-1 if flg==0: print("その値は見つかりませんでした")``` ```ここに言語を入力 コード

試したこと

print(str(data[left])だけならでるのにdata[right]もたすとでなくなる
質問編集しました、ご指摘ありがとうございました

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

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

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

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

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

can110

2023/01/23 14:06

コードにインデントがなくなり検証、実行できないのでコードブロックで囲んでください。
y_waiwai

2023/01/23 14:29

このままではコードが読めないので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答2

0

print(str(data[left],data[mid],data[right]))

クラスstr()の引数の数が間違っています。

str(object='')
または
str(object=b'', encoding='utf-8', errors='strict')
です。

encodeingに、data[mid]が代入され、「encodingはintじゃなくてstrだろ」って怒られてます。

詳しくは公式ドキュメントを確認してください。
https://docs.python.org/ja/3/library/functions.html#func-str
https://docs.python.org/ja/3/library/stdtypes.html#str

文字列にするのであれば、
中身をタプルやリストにしたり
str((data[left],data[mid],data[right]))
str([data[left],data[mid],data[right]])

formatやf文字列を使いましょう。
f"{data[left]},{data[mid]},{data[right]}"

投稿2023/01/24 01:21

編集2023/01/24 01:37
dtn8kp6s

総合スコア66

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

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

0

str()に複数の値を与えてそれぞれ文字列にしてもらうというような使いかたはできません。

python

1str(data[left],data[mid],data[right])

2番目以降が他のパラメータだと解釈されて質問のエラーになっています。
print()は複数のものを受け取れますので、それぞれを文字列化して与えればいいでしょう。

python

1print(str(data[left]),str(data[mid]),str(data[right])))

ちなみに、値を表示したいだけであれば、str()を付けなくてもいけますよ。

python

1print(data[left],data[mid],data[right])

投稿2023/01/24 01:15

TakaiY

総合スコア12765

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問