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

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

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

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

Q&A

解決済

2回答

396閲覧

文字列の入力で数値の和を出す

taiyodesu

総合スコア4

Python

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

0グッド

0クリップ

投稿2020/11/08 15:43

前提・実現したいこと

下記の内容を入力してもらい、その二つの和を求めるコードを書きたいです。
イメージ説明
例:remubi(入力値) + sono(入力値) = civobi(出力値)

やりたいこと:
pareci - > pa re ci - > 123に変換 vomuxa - > vo mu xa -> 456に変換 
123+456 -> 579 (和を求める)
579 - > muzeso に戻す。

試したこと

以下のようにfirst_numberでインプットされた文字をLojbanリストから数字で取得しようと試みましたが、以下のようなエラーが発生しました。やり方があっていましたら、問題点の修正をしてもらえれば幸いです。そもそものやり方が間違っているのでしたら書き方を教えて頂けたらと思っております。

python

1Lojban=['no','pa','re','ci','vo','mu','xa','ze','bi','so'] 2 3first_string=str(input("Enter the first string.")) 4second_string=str(input("Enter the second string")) 5 6sep_first=[first_string[i: i + 2] for i in range(0, len(first_string), 2)] 7first_number=Lojban.index(sep_first) 8sep_two=[second_string[i: i+2] for i in range(0, len(second_string), 2)] 9second_number=Lojban.index(sep_two) 10 11sum=first_number+second_number 12string_sum=str(sum) 13list_sum=[string_sum[i: i + 1] for i in range(0, len(string_sum), 1)] 14lojban_sum=Lojban.index(list_sum) 15 16print(lojban_sum)

python

1File "file名", line 8, in <module> 2 first_number=Lojban.index(sep_first) 3ValueError: ['re', 'ci'] is not in list 4 5

補足情報

前に一度質問しましたが、前回は私の無知と不備で色々迷惑をかけたため、自分でもう一度考えてみました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

Lojban.index(切り出した2文字) で数値に変換し、
''.join([str(数値)]) で数字を結合すればよいでしょう。

Python

1Lojban = ['no','pa','re','ci','vo','mu','xa','ze','bi','so'] 2 3str1 = input('Enter the first string: ') 4str2 = input('Enter the second string: ') 5 6num1 = int(''.join([str(Lojban.index(str1[i:i+2])) for i in range(0, len(str1), 2)])) 7num2 = int(''.join([str(Lojban.index(str2[i:i+2])) for i in range(0, len(str2), 2)])) 8 9num3 = num1 + num2 10str3 = ''.join([Lojban[int(c)] for c in str(num3)]) 11print(str3)

このコードの疑問点はどこですか?

投稿2020/11/08 18:07

編集2020/11/08 18:28
kazuma-s

総合スコア8224

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

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

taiyodesu

2020/11/11 13:26

ありがとうございます!
guest

0

エラーメッセージの意味は、
リストの中に['re', 'ci']という要素は無い
ということです。Lojbanの要素は2文字の文字列10個で、リストは要素に無いので、その通りです。

「文字列」と「文字列のリスト」の違いは分かりますか?

Lojban.index(~~)のカッコの中には文字列のリスト['re', 'ci']じゃなくて、文字列're'とか 'ci'とか、を入れる必要があります。

Python

1sep_first=[Lojban.index(first_string[i: i + 2]) for i in range(0, len(first_string), 2)]

にすれば、Lojban.indexには、数値に変換された後のリストが入るので、ここで変換した方が良いでしょうね。

投稿2020/11/08 16:44

編集2020/11/08 16:47
otn

総合スコア84499

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

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

taiyodesu

2020/11/11 13:26

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問