

【問題】  
数列 A = {a_1, a_2, ..., a_n} と、整数 x が与えられます。  
整数 x が数列 A の何番目に現れているかを求めてください。つまり、x = a_i を満たす i を求めてください。  
なお、整数 x は必ず数列 A に 1 つだけ含まれていることが保証されます。

入力される値  
n  
a_1 a_2 ... a_n  
x

・ 1 行目に、数列の要素数 n が与えられます。  
・ 2 行目に、数列の要素 a_1, a_2, ... , a_n が半角スペース区切りで与えられます。  
・ 3 行目に、検索したい値 x が与えられます。

入力値最終行の末尾に改行が１つ入ります。  
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください

期待する出力  
整数 x が数列 A の何番目にあるのかを出力してください。  
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件  
すべてのテストケースにおいて、以下の条件をみたします。

・ 入力はすべて整数  
・ 2 ≦ n ≦ 100  
・ -20,000 ≦ a_i ≦ 20,000 (1 ≦ i ≦ n)  
・ i ≠ j ならば a_i ≠ a_j  
・ -20,000 ≦ x ≦ 20,000  
・ x は必ず A = {a_1, a_2, ..., a_n} に含まれている

入力例1  
5  
4 1 3 5 2  
5

出力例1  
4

【解答例】

[code]

    n = int(input())
    a = [int(x) for x in input().split()]
    x = int(input())
    
    pos_of_x = -1
    for i in range(n):
        if a[i] == x:
            pos_of_x = i + 1
            break
    
    print(pos_of_x)
    
[/code]

【質問】  
なぜpos_of_xに-1を代入し、if文で+1をするのですか？  
詳しい方、教えて下さると助かります！


CC BY-SA 4.0
2021-08-17T00:26:57.293
80852
2021-08-17T01:54:14.163
2021-08-17T00:33:01.063
3060
47755
question
python python3
Python3 paiza解答例が分からない


**なぜpos_of_xに-1を代入**

forループ終了後にprint文で使うために`pos_of_x`という変数をあらかじめ宣言することが目的で、そのために数値の代入という手段を取っています。

この場合、`-1`という数値自身には意味が無く、どんな値でもかまいません。

ただ、配列のインデックスとしては範囲外の値で初期化しておくことにより、何かしらの不具合があって変数が更新されなかった場合を検出できるような値として`-1`を採用していると思われます。

* * *

**if文で+1をするのですか**

ちなみに正しくは **if文では+１していませんね** 。 **+1しているのはpos_of_xへの代入時です** 。

これは「何番目」の基準の値が何から始まるか、にかかってきます。

Pythonの配列は先頭のインデックスを`0`として始めます。

一方、日本語の算数や数学あるいは一般的な数え方では先頭は`1`番目と言うのが普通ですね。

どちらで表示するかは単独で明言されている感じではなく問題文と条件の中にちりばめられているようですね。  
特に条件の3番目の`(1 ≦ i ≦ n)`でしょうか。

  * 整数 x が数列 A の何番目に現れているか ... つまり、x = a_i を満たす i を求めて ...
  * 条件の3番目の -20,000 ≦ a_i ≦ 20,000 (1 ≦ i ≦ n)
  * 条件の6番目の ... A = {a_1, a_2, ..., a_n} ...
  * 入力例と出力例の対比

日本語の常識に合わせた条件に従って、Pythonプログラム上でのインデックス番号を、日本語の「何番目」として表示する時のためにpos_of_xへの代入時に
i + 1 していると考えられます。

例えばこんな記事が参考になるでしょう  
[配列の先頭要素が「0番目」であることは気持ち悪いか…「N番目」という言葉を考察してみる](https://rubikitch.hatenadiary.org/entry/20080524/1211627661)


CC BY-SA 4.0
2021-08-17T01:12:39.317
80856
2021-08-17T01:54:14.163
2021-08-17T01:54:14.163
26370
26370
80852
answer