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

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

ただいまの
回答率

88.63%

プログラムを実行したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 418

こんにちは。
・以下のコードを実行入力したところうまく実行されません。
どういったエラーなのかわかりません。
教えてください。よろしくお願いします。

・実行結果

Traceback (most recent call last):
  File "pyroad.py", line 40, in <module>
    pyroadCount = sum(1 for line in open('pyroad.py'))  # pyroad.pyの行数は除外
  File "pyroad.py", line 40, in <genexpr>
    pyroadCount = sum(1 for line in open('pyroad.py'))  # pyroad.pyの行数は除外
UnicodeDecodeError: 'cp932' codec can't decode byte 0x96 in position 927: illegal multibyte sequence

です。

・ちなみにソースコードは以下になります。
https://pycarnival.com/pyroad/
このサイトの一つ目をそのままコピペしました。

・コード

import os
import datetime


def allFileListGet():
    path = '.'
    file_list = []
    for root, dirs, files in os.walk(path):
        for file in files:
            file_list.append(os.path.join(root, file))

    return file_list


def pyFileListGet(allFileList):
    pyFileList = []
    for file_name in allFileList:
        if file_name[-3:] == '.py':
            pyFileList.append(file_name)

    return pyFileList


def returnLines(pyList):
    line_sum = 0
    for file_name in pyList:
        lines_count = sum(1 for line in open(f'{file_name}'))
        line_sum += lines_count

    return line_sum


def fileWrite(data):
    f = open('pyroad.txt', 'a')
    now = datetime.datetime.now()
    f.write(f'{data},{now.year},{now.month},{now.day},{now.hour},{now.minute},{now.second}\n')
    f.close()


pyroadCount = sum(1 for line in open('pyroad.py'))  # pyroad.pyの行数は除外
allLines = returnLines(pyFileListGet(allFileListGet())) - pyroadCount

rankList = ['二等兵', '一等兵', '上等兵', '伍長', '軍曹', '曹長', '准尉',
            '少尉', '中尉', '大尉', '少佐', '中佐', '大佐', '准将',
            '少将', '中将', '大将', '元帥']
levelLinesList = [1000, 2000, 3000, 5000, 6000, 7000, 8000, 9000, 10000,
                  12000, 14000, 16000, 18000, 20000, 25000, 30000, 50000]

if allLines < levelLinesList[0]:
    print(f'{allLines}行Pythonを書いているぞ!')
    print(f'お前は{rankList[0]}でまだ新米パイソニスタだ。\n書け!書けば分かる!')
    print('ごちゃごちゃ考えるな。1行でもコードを書け!')
elif allLines > levelLinesList[-1] - 1:
    print(f'{allLines}行もPythonを書いているとは...')
    print(f'あなた様は{rankList[-1]}です。')
    print('その調子でがんばってください。')
else:
    for i, _ in enumerate(levelLinesList):  # 小さいほうから総当りの方法
        if allLines > levelLinesList[i] - 1 and allLines < levelLinesList[i+1]:
            print(f'{allLines}行Pythonを書いているぞ!')
            print(f'お前は{rankList[i+1]}パイソニスタだ!')
            print('ごちゃごちゃ考えるな。1行でもコードを書け!')
            break

# データの書き込み
fileWrite(allLines)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • ozwind918

    2019/02/20 09:12 編集

    コードは<code>を使用してください。

    キャンセル

回答 1

checkベストアンサー

+1

記載のコードで問題なく動作しました。
name 'os' is not definedというのは、osという名前が定義されていないということです。
1行目のimport osの記載があれば本来動くはずなので、実行したファイルの1行目が欠けていないか確かめてみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/02/20 09:47

    あらゆるエラーについて人に訊くわけにはいきません。
    まずは「UnicodeDecodeError: 'cp932' codec can't decode byte 0x96 in position 927: illegal multibyte sequence」で検索してみましょう。

    キャンセル

  • 2019/02/20 09:55

    firedflyさんのアドバイスとおり検索すると文字コードに関する記述がされた記事が見つかると思います。
    ヒントはopen()の部分に少しだけ追記すれば動作すると思います!

    キャンセル

  • 2019/02/20 10:06

    回答ありがとうございます。
    調べて、encoding="utf-8" を追加したところうまく動作しました!

    キャンセル

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

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

同じタグがついた質問を見る