pythonでwhileループなどを使って平均計算の出力をする方法は？


1行ごとに整数が入力され、最後の行がピリオド.で終了するとします。そして、入力された数の平均を計算して出力したいと思っています。イメージとしては、このように入力されたとします

[code]

    5 
    2 
    10 
    1
    .
    
[/code]

それをこのように出力したいのです

[code]

    4.5
    
[/code]

このようなコードを書きました。

[code]

    num = input()
    res = []
    while num != ".":
        res.appen(num)
        if num = ".":
            break
        print(mean(res))
    
[/code]

その結果このようなエラーメッセージを受け取りました。

[code]

    Error:
      File "jailed_code", line 5
        if num = ".":
               ^
    SyntaxError: invalid syntax
    
[/code]

この場合、5行目が問題なのは明らかなのですが、それ以外にも問題があるかもしれません。どのようにすれば改善すれば良いでしょうか。よろしくお願いいたします。




質問の直接の答えは`比較演算子が違う`からです。以下2つの記事を良く見てください。  
問題の箇所は`==`が正しく、つまり`=`が一つ足らないことが原因です。

[4.1. if 文](https://docs.python.org/ja/3/tutorial/controlflow.html#if-
statements)  
[6.10.
比較](https://docs.python.org/ja/3/reference/expressions.html#comparisons)

* * *

他にはこれらの課題があります。

  * 数値を入力できるのが先頭行の1回だけで、複数の数値を繰り返し入力出来るようになっていません。ループの中(の先頭)に移動する必要があるでしょう。
  * `while`の条件部と、途中の`if`文の両方でループ終了を判定するのは冗長で間違いやすいので判定は1ヵ所に絞りましょう。
  * `appen()`というメソッドはありません。`append()`のtypoですね。
  * 最後の`.`を入力したら、結果を出力せずにプログラムを終了する形になっています。
  * `mean()`メソッドは`statistics`を`import`しないと使えるようにはなりません。
  * `mean()`メソッドは数値の平均を計算するものなので、`res`リストには文字列ではなくintの数値が入っていなければなりません。  
`res`に`append`する際に`int`に変換しておくか、`mean`を計算する際または直前に`int`に変換する必要があります。

  * 数値を繰り返し入力出来るようになったとしても今の`print(mean(res))`の位置では数値を入力する毎に平均値を表示することになります。平均値表示の処理はどこで行うのが良いか考え直してください。

[5.1.
リスト型についてもう少し](https://docs.python.org/ja/3/tutorial/datastructures.html#more-
on-lists)

> list.append(x)  
>  リストの末尾に要素を一つ追加します。a[len(a):] = [x] と等価です。

[statistics ---
数理統計関数](https://docs.python.org/ja/3.9/library/statistics.html)  
[Pythonで平均、中央値、最頻値、分散、標準偏差を算出](https://note.nkmk.me/python-statistics-mean-
median-mode-var-stdev/)

[数値型 int, float,
complex](https://docs.python.org/ja/3/library/stdtypes.html#numeric-types-int-
float-complex)

> 演算 結果  
>  int(x) x の整数への変換

* * *

`mean`を使わずに済ませるなら、直接の答えは提示していませんが、こんな記事もあります。  
[無限ループからの平均値を出したい](https://ja.stackoverflow.com/q/70598/26370)




質問の直接の答えは`比較演算子が違う`からです。以下2つの記事を良く見てください。  
問題の箇所は`==`が正しく、つまり`=`が一つ足らないことが原因です。

[4.1. if 文](https://docs.python.org/ja/3/tutorial/controlflow.html#if-
statements)  
[6.10.
比較](https://docs.python.org/ja/3/reference/expressions.html#comparisons)

* * *

他にはこれらの課題があります。

  * 数値を入力できるのが先頭行の1回だけで、複数の数値を繰り返し入力出来るようになっていません。ループの中(の先頭)に移動する必要があるでしょう。
  * `while`の条件部と、途中の`if`文の両方でループ終了を判定するのは冗長で間違いやすいので判定は1ヵ所に絞りましょう。
  * `appen()`というメソッドはありません。`append()`のtypoですね。
  * 最後の`.`を入力したら、結果を出力せずにプログラムを終了する形になっています。
  * `mean()`メソッドは`statistics`を`import`しないと使えるようにはなりません。
  * `mean()`メソッドは数値の平均を計算するものなので、`res`リストには文字列ではなくintの数値が入っていなければなりません。  
`res`に`append`する際に`int`に変換しておくか、`mean`を計算する際または直前に`int`に変換する必要があります。

  * 数値を繰り返し入力出来るようになったとしても今の`print(mean(res))`の位置では数値を入力する毎に平均値を表示することになります。平均値表示の処理はどこで行うのが良いか考え直してください。

[5.1.
リスト型についてもう少し](https://docs.python.org/ja/3/tutorial/datastructures.html#more-
on-lists)

> list.append(x)  
>  リストの末尾に要素を一つ追加します。a[len(a):] = [x] と等価です。

[statistics ---
数理統計関数](https://docs.python.org/ja/3.9/library/statistics.html)  
[Pythonで平均、中央値、最頻値、分散、標準偏差を算出](https://note.nkmk.me/python-statistics-mean-
median-mode-var-stdev/)

[数値型 int, float,
complex](https://docs.python.org/ja/3/library/stdtypes.html#numeric-types-int-
float-complex)

> 演算 結果  
>  int(x) x の整数への変換

* * *

`mean`を使わずに済ませるなら、直接の答えは提示していませんが、こんな記事もあります。  
[無限ループからの平均値を出したい](https://ja.stackoverflow.com/q/70598/26370)

