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

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

ただいまの
回答率

89.99%

変数が更新されているのか?

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 760
退会済みユーザー

退会済みユーザー

3
dog
cat
pig


という入力があった時に

input_lines = input()
list_num = int(input_lines)

all_data =[]
for i in range(list_num):
   input_lines = input()
   all_data.append(input_lines)

split_str=[]
ans =[]
two_str =[]
for i in range(list_num):
    len_str = len(all_data[i])
    split_str = list(all_data[i])
    last_str = split_str[len_str-1]
    print(last_str)

for i in range(list_num):
    len_str = len(all_data[i])
    split_str = list(all_data[i])
    last_str = split_str[len_str-1]
    z =split_str _str.pop()
   print(z)
    if last_str =='s' or 'sh' or 'ch' or 'o' or 'x':
      y = split_str.pop()
      print(y)
      z =  y + 'es'
      ans.append(z)
    elif last_str =='f' or 'fe':
      y = split_str.pop()
      print(y)
      z =  y + 'ves'
      ans.append(z)
    elif last_str =='y' and split_str[len_str-2] != 'a' or 'i' or 'u' or 'e' or 'o':
      y = split_str.pop()
      print(y)
      z =  y + 'ies'
      ans.append(z)
    else:
      y = split_str.pop()
      print(y)
      z = split_str + 's'
      ans.append(z)


とコードを書きました。

z =split_str.pop()
print(z)
print(split_str)


と書いた部分で、

['d','o']
['c','a']
['p','i']


と出力されました。
2つわからないことがありまして、
ひとつは

split_str _str.pop()


は配列の最後の要素を切り取り、最後の要素を返すメソッドだと調べたら出てくるのですが、私の認識が何かおかしいのでしょうか?
2つめは、

print(split_str)


でも

['d','o']
['c','a']
['p','i']


と出力されたことで
zに最後の要素を切りとった結果を格納しているので
どうしてsplit_str  までが変更されるのかわからないことです。
スコープの外だと思っていましたが、
変数が更新されているのでしょうか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ozwk

    2017/06/20 08:58

    「z = split_str.pop()」と書こうと思っていたところを「z =split_str _str.pop()」と書いてしまってませんか?

    キャンセル

回答 2

checkベストアンサー

0

配列の最後の要素を切り取り、最後の要素を返すメソッドだと調べたら出てくるのですが、私の認識が何かおかしいのでしょうか?

その通りですしおかしくないですよ。
pop() は配列から最後の要素を除去します。
それがわかっていれば不思議なところはないと思いますが、何が疑問なんでしょう??

s = 'dog'
split_str = list(s)
print(split_str)  # => ['d', 'o', 'g']

z = split_str.pop()

print(z)  # => z
print(split_str)  # => ['d', 'o']

(追記)

配列の最後の要素を切り取り

もしかして「切り取る」の意味を誤解されたのでしょうか。
pop() は配列を更新して、最後の要素を除去するメソッドですから、 split_str が更新されるのは当たり前です。そういうメソッドです。
という回答になるでしょうか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

split_str = [] を宣言しているのは一番外側のスコープですね
基本的に内側からは外側が見えます。逆に外側から内側の変数は見えません

変数が更新されているのもその通りです
pop()というメソッドは最後の要素を取り出すだけではなくsplit_strも変更される点ですが、
このように変数自身にも変更を加えてしまうメソッドを破壊的メソッドと言います
通常のメソッドと異なり、指定変数(今回でいうsplit_str)の中身も常に意識しなければいけないので要注意です

更に踏み込むと、中身の把握を容易にするために一度定義したら更新できない変数をimmutableな変数, 逆に更新できてしまう変数をmutableな変数と呼んだりします
プログラミング言語によってもimmutableとmutableで流派が分かれたりするので、興味があったら調べてみて下さい!

スコープ参考:
http://uxmilk.jp/41353
pop参考:
https://python.g.hatena.ne.jp/muscovyduck/20080720/p1
immutable参考:
http://panda-noir.hatenablog.jp/entry/2015/10/18/191106

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/20 08:41

    このコードはすべて同じスコープに属していますよ。

    キャンセル

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

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる