3より一般的な初心者パイソン間違い


もう一年、明るい目の熱心な学生のもう一つのセット.
今私たちは最初の学期の終わりに来ている、ここで私は初心者を教える中に遭遇した3つのより一般的な間違いです.

コードのコピーと貼り付け
これは何よりもバグベアですしかし、それはいくつかの潜在的に深刻な副作用があります.これは、古典的なコピーとは、ソースから何をしているかを理解せずに貼り付けるとは少し異なります
間違いなく毎年この作物は、完全にランダムなコードで完全にランダムなエラーが発生します.
以下を見てください.
x ‏‏‎= 100

print(x)
スニペットをビジュアルコードにコピーして貼り付けてみると、以下のようになります.
    x ‏‏‎= 100
      ^
SyntaxError: invalid syntax
ええ、何?変数に値を割り当てる方法です.
では、なぜ失敗するのですか?私はそれに隠し文字を追加したので.
ここでの問題は、私は新しい開発者が座っていると彼らは彼らがどのようにコードのこの一見単純な作品が実行されていない理由を把握することはできませんので、彼らが認めるのを気にするよりも長い欲求不満の画面を見つめています.
ただ、頻繁にあなたがランダムなエラーに実行されますが、より重要なことにも何かをコピーしてしまう可能性がありますので、しばしばPDFファイル、オンライン、またはどこからコードをコピーするときに注意してくださいmalicious .
もちろん、大学でやってきたある講師のように、誰かがコードを書くようにという目的でそれをやっている誰かと一緒に終わることができました.

変数
このスニペットは何を印刷しますか.
x = 5

def foo():
    x = 20

    print(x)

foo()
print(x)
言ったこと20 then 5 自分で背中を軽くたたく.
我々は、学生のための機能の概念を導入していたとどのようにコードの繰り返し部分を排除するためにそれらを使用して、突然、それは奇妙な行動だった.
上記のスニペットを示すのは、ローカル関数V . S .グローバルスコープです.x ここでは、関数の内部変数shadows グローバル変数名x .
Pythonでは、変数スコープを解決する際に、Legb(Local,Closed,Global,Builder)規則を使用します.これは、学生がどのようにスコープが泡になるかを示すために使用するスニペットです.
from math import pi

#pi = 10

def foo():
    #pi = 20
    print("local: ", pi)

    def bar():
        #pi = 30
        print("enclosed: ", pi)

    bar()
foo()

print("global: ", pi)
どれが
local:  3.141592653589793
enclosed:  3.141592653589793
global:  3.141592653589793
またはpi 変数宣言
local:  20
enclosed:  30
global:  10
それで、私がこの次のスニペットを試みるとき、出力は何ですか?
x = 5

def foo():
    x = x + 2

    print(x)

foo()
2 .いいえ.…UnboundLocalError ? うん.
でもどうして?もう一つの例は、とても嬉しく私たちを与えました10 ちょうど印刷するとき!
いくつかあるgood and in-depth なぜこれがケースであるかについて説明して、私がここでそうすることができたより、理由を説明することのより良い仕事をしてください.
それにもかかわらず、この解決策はglobal Pythonがその値を見つける場所を知っているようにx 課題の前に
x = 5

def foo():
    global x
    x = x + 2

    print(x)

foo()

組み込み関数の再定義
これは実際の範囲については、以前の点からどのように他の場所で作物をすることができますフォローアップです.
... snip...

input = ("Continue? (Y/N): ")

... snip...
彼らが誤ってプログラムの入力関数を再定義して、それから後でそれを使用しようとした彼らのコードで、何人かの学生は、これを持ちました.
としてpi 例は何が起こったかを示すinput 現在、その文字列の値はinput 関数.