CからPython(一)へ
11079 ワード
10日以上pythonを勉強して、毛皮を習ったような気がしますが、深い勉強には十分なはずなので、勉強の心得を書いて、後で振り返るようにします.
以前はc/c++にしか触れていませんでしたが、以下はc言語とpythonを一緒に比較し、ついでにc言語を復習し、プログラム文では、書きやすいようにpythonの代わりにPを使います.パソコンは現在Cをコンパイルする環境がないため、PythonはAnacondaの下の3.6.3バージョンで、間違いがあれば皆さんのご指導を歓迎します.
基本入出力C:printf(「Hello World」);P: print(“Hello World”)
簡単な文字列出力printf()/print()関数にとって、CとPythonの差は大きくないようですが、注意深い読者は、Pythonの1つの文の後ろにセミコロンがないことに気づくかもしれません.実際には、Pythonでは、一般的に1行1つの文を2つ書くと、追加する必要があります.仕切りはありますが、普通はそうする人はいません.Cの中で何度もセミコロンを忘れてコンパイルを間違えたのではないかと思って、Pythonの中で、セミコロンを忘れたのではないでしょうか.しかし、複雑なフォーマット出力、例えば一定の精度の数字や文字列を印刷すると両者が異なりますC:
結果はa=1 b=1.000 str=abc Pであるべきである.
結果は a=1 b=1.000000 str=abc a=1 b=1.0 str=abc
PythonにもC言語のようなフォーマット出力があります.カンマを%に変え、変数をカッコで囲みます.それ以外にformatメソッドもあります.
Pythonでformatメソッドが行うことは,各パラメータ値をフォーマットの位置に置き換えることである.Python 3にはint,float,bool,complexの4種類があり,intはロング整数型でありpython 2のLongもchar型もない.
ご覧のように、Pythonの変数は宣言する必要はありませんが、各変数は使用前に値を付けなければなりません.変数が値を付けた後、変数が作成されます.この点はcとは異なり,他のエスケープシーケンスt...のような差は多くない.もう一つ、Pythonではprint()関数はデフォルトで改行を終了値とし、C言語ではprintf()関数が終了するには手動で改行する必要があります.Pythonで改行したくない場合は、用件を話した後にend="を付けて、カンマで区切るように注意すればいいです.
結果はa=1 b=1.0 str=abca=1 b=1.0 str=abc
Cを入力:
実行結果: 3 3つのデータを入力してください.入力した3つのデータはそれぞれa,b,strに割り当てられ、入力をカンマで区切る:1 2.0 gg出力:1 2.00000 gg P:
実行結果: 3 3つのデータを入力してください.入力した3つのデータはそれぞれa,b,strに割り当てられ、 をカンマで区切ります.入力:test 1 test 2.0 22 出力:a=test 1 b=test 2.0 str=22
input()関数は,ユーザからいくつかのテキストを取得するために用いられ,ユーザに情報の入力を促す文字列パラメータがあり,C言語では同様の機能を実現するにはprintf()が必要である.もちろんinputは1つの値しか受け入れられず、複数入力するにはinput()を用いる.split()は、前に任意のデータを追加することができます.
注目すべきは、inputは文字列を返します.数字を見ていますが、実は文字列です.int(input()で変換する必要があります.数字ではなく文字列を入力すると、この変換が間違ってしまいます.ユーザー入力と付き合っているところで、タイプが一致しているかどうかをチェックすることに注意してください.Try文を使って、後で話してください.
制御フロー文Pythonには、if forとwhileの3つの制御フロー文があります.以下、C言語との違いIfCを比較します.
p
実行結果と同じ数字を入力してください 23333 a>0本 C中:条件文の後に括弧で条件を含め、条件成立時のブロックを括弧{}で囲み、Pythonのif文に直接条件を付けてからコロンを追加し、条件成立時に実行するブロックはインデント一致を保ち、一般的に4つのスペースまたは1つのタブをインデントする.
しかし、Pythonはインデントレベルを使用してコンパイラにどの文がどのブロックに属しているかを教えてくれることを覚えておいてください.同じ文ブロックのインデントが一致しない場合、プログラムの結果は予想された結果とは異なり、直接報告が間違っている可能性があります.これは、括弧{}を使用しないことによる弊害です.
else if()がelifと略記されている場合、Pythonにはswitch文は存在しません.ifを使うことができますelif..else文は同じことを実現します.
while while文は、条件が真であることを前提として、ある文Cを繰り返し実行する.
P:
結果は次のとおりです. aはいくらに等しいか当てて、勝手に数字を入力して2は少し小さくなって3は少し小さくなって255は少し大きくなって233はゲームが終わったことを当て続けました.
whileはCとPythonで,判定条件の括弧()をコロンに変換することによって区別される:,括弧{}をインデントに変換すればよい,また,Pythonではwhileはelseと併用して使用することができ,elseコードブロックはwhileループの条件がFalseになったときに実行を開始し,else文を用いなくてもよい.その他の用法の違いは大きくない.for C:
P:
出力結果は以下の通りです. 0 1 2 3 4 5 6 7 8 9
Range()関数の最初のパラメータは開始位置を指定し、2番目のパラメータは範囲を制限し、3番目のパラメータはステップ長を指定します.range()は毎回1つの数字を生成する.
In演算子は、指定したシーケンスで値が見つかった場合にTrueを返します.そうでない場合はFalseを返します.したがって、文字列、リスト、メタグループなど、他の条件文でテストインスタンスに含まれる一連のメンバーを使用することもできます.リストやこのメタグループについては、後述します.
Python中のforとC中のforとPython中のwhileとC中のwhileの差は多くなく,いずれもC中の括弧()をコロンに変換し,循環体の{}を一致したインデントに変換すればよい.
以前はc/c++にしか触れていませんでしたが、以下はc言語とpythonを一緒に比較し、ついでにc言語を復習し、プログラム文では、書きやすいようにpythonの代わりにPを使います.パソコンは現在Cをコンパイルする環境がないため、PythonはAnacondaの下の3.6.3バージョンで、間違いがあれば皆さんのご指導を歓迎します.
基本入出力C:printf(「Hello World」);P: print(“Hello World”)
簡単な文字列出力printf()/print()関数にとって、CとPythonの差は大きくないようですが、注意深い読者は、Pythonの1つの文の後ろにセミコロンがないことに気づくかもしれません.実際には、Pythonでは、一般的に1行1つの文を2つ書くと、追加する必要があります.仕切りはありますが、普通はそうする人はいません.Cの中で何度もセミコロンを忘れてコンパイルを間違えたのではないかと思って、Pythonの中で、セミコロンを忘れたのではないでしょうか.しかし、複雑なフォーマット出力、例えば一定の精度の数字や文字列を印刷すると両者が異なりますC:
#include
int main(){
int a=1;
float b =1.0;
char str[10]="abc";
printf("a=%d\tb=%.3f\tstr=%s",a,b,str) ;
return 0;
}
結果はa=1 b=1.000 str=abc Pであるべきである.
b = 1.0
str="abc"
print ("a=%d\tb=%f\tstr=%s" % (a, b,str))
print('a={}\tb={}\tstr={}'.format(a, b,str))
結果は
PythonにもC言語のようなフォーマット出力があります.カンマを%に変え、変数をカッコで囲みます.それ以外にformatメソッドもあります.
Pythonでformatメソッドが行うことは,各パラメータ値をフォーマットの位置に置き換えることである.Python 3にはint,float,bool,complexの4種類があり,intはロング整数型でありpython 2のLongもchar型もない.
ご覧のように、Pythonの変数は宣言する必要はありませんが、各変数は使用前に値を付けなければなりません.変数が値を付けた後、変数が作成されます.この点はcとは異なり,他のエスケープシーケンスt...のような差は多くない.もう一つ、Pythonではprint()関数はデフォルトで改行を終了値とし、C言語ではprintf()関数が終了するには手動で改行する必要があります.Pythonで改行したくない場合は、用件を話した後にend="を付けて、カンマで区切るように注意すればいいです.
print('a={}\tb={}\tstr={}'.format(a,b,str),end ='')
print('a={}\tb={}\tstr={}'.format(a,b,str),end ='')
結果はa=1 b=1.0 str=abca=1 b=1.0 str=abc
Cを入力:
#include
int main()
{
int a=0;
float b=0;
char str[10];
printf(" , a,b,str,\
");
scanf( "%d%f%s",&a,&b,str);
printf( "%d\t%f\t%s\t ",a,b,str);
return 0;
}
実行結果:
a,b,str=input(" , a,b,str,\
").split()
print('a={}\tb={}\tstr={}'.format(a,b,str),end =' ')
実行結果:
input()関数は,ユーザからいくつかのテキストを取得するために用いられ,ユーザに情報の入力を促す文字列パラメータがあり,C言語では同様の機能を実現するにはprintf()が必要である.もちろんinputは1つの値しか受け入れられず、複数入力するにはinput()を用いる.split()は、前に任意のデータを追加することができます.
注目すべきは、inputは文字列を返します.数字を見ていますが、実は文字列です.int(input()で変換する必要があります.数字ではなく文字列を入力すると、この変換が間違ってしまいます.ユーザー入力と付き合っているところで、タイプが一致しているかどうかをチェックすることに注意してください.Try文を使って、後で話してください.
制御フロー文Pythonには、if forとwhileの3つの制御フロー文があります.以下、C言語との違いIfCを比較します.
#include
int main()
{
int a=0;
printf("
");
scanf("%d",&a);
if(a==0)
{
printf("a =0");
}
else if(a>0)
{
printf("a>0");
}
else if(a<0)
{
printf("a>0");
}
else
printf("a ");
return 0;
}
p
a=int(input("
"))
if a==0:
print("a =0")
elif a>0:
print("a>0")
else:
print("a<0 ")
実行結果と同じ
しかし、Pythonはインデントレベルを使用してコンパイラにどの文がどのブロックに属しているかを教えてくれることを覚えておいてください.同じ文ブロックのインデントが一致しない場合、プログラムの結果は予想された結果とは異なり、直接報告が間違っている可能性があります.これは、括弧{}を使用しないことによる弊害です.
else if()がelifと略記されている場合、Pythonにはswitch文は存在しません.ifを使うことができますelif..else文は同じことを実現します.
while while文は、条件が真であることを前提として、ある文Cを繰り返し実行する.
#include
int main()
{
int a=233,b;
bool flag=1;
printf(" a ,
");
scanf("%d",&b);
while(flag)
{
if(a==b)
{
printf("
");
flag=0;
}
else
{
if(a>b)
{
printf("
");
}
else
{
printf("
");
}
printf(" : ");
scanf("%d",&b);
}
}
return 0;
}
P:
a=233
flag=1
b=int(input(" a ,
"))
while flag:
if a==b:
print(" ")
flag=0
else:
if a>b:
print(" ")
else:
print(" ")
b=int(input(" "))
else:
print(' .')
結果は次のとおりです.
whileはCとPythonで,判定条件の括弧()をコロンに変換することによって区別される:,括弧{}をインデントに変換すればよい,また,Pythonではwhileはelseと併用して使用することができ,elseコードブロックはwhileループの条件がFalseになったときに実行を開始し,else文を用いなくてもよい.その他の用法の違いは大きくない.for C:
#include
int main()
{
int i;
for(i=0;i<10;i++)
{
printf("%d\t",i);
}
return 0;
}
P:
for i
in range(0,10,1):
print(i,"\t",end="")
出力結果は以下の通りです.
Range()関数の最初のパラメータは開始位置を指定し、2番目のパラメータは範囲を制限し、3番目のパラメータはステップ長を指定します.range()は毎回1つの数字を生成する.
In演算子は、指定したシーケンスで値が見つかった場合にTrueを返します.そうでない場合はFalseを返します.したがって、文字列、リスト、メタグループなど、他の条件文でテストインスタンスに含まれる一連のメンバーを使用することもできます.リストやこのメタグループについては、後述します.
Python中のforとC中のforとPython中のwhileとC中のwhileの差は多くなく,いずれもC中の括弧()をコロンに変換し,循環体の{}を一致したインデントに変換すればよい.