【Python基礎講座】(2):選択構造とループ構造

お問い合わせQQ: 970586718

ブログアドレス: https://blog.csdn.net/m0_46521785

構造の選択

多分岐構造

if (条件A):
	pass
elif (条件B):
	pass
elif (条件C):
	pass
elif ...:
    pass
else:
	pass

複数の分岐を必要とするプログラムを作成する場合は、複数の if 置換を使用しないでください。変数の値が最初の if で変更され、2 番目の if につながる可能性があるためです。

実装プロセス

if文を実行すると、最初に条件を計算して最終結果がTrueかFalseかを判定し、Trueの場合はif文のプログラムブロックに入り、そうでない場合は次の条件を判定します。

条件付きネスト

インデントが確保されていれば、if ステートメントのレベルごとに別の if ステートメントを作成できます。Python では、インデントは階層関係です。

a = 1
b = 2
if a>0:
    if b<0:
        print(111)
    else:
        print(222)
else:
    if b<0:
        print(666)
    else:
        print(777)

練習問題

  • 倍数の判定

    程序的功能是判断一个整数是否能被711整除,若能被711整除,则输出"Yes",否则输出"No",请补充程序。
    
  • 素数判定

    输入一个数字判断它是不是素数(质数)
    
  • 整数 x、y、z を入力し、x 3+y 3+z^3 と 1000の関係を求めます。

    输入整数x,y,z,若x^3+y^3+z^3>1000,则输出x^3+y^3+z^3-1000的结果,否则输出三个数之和。
    注:用eval()函数结合input()函数同时输入3个整数,输入数字时用逗号分隔
    
  • 結婚に関する質問

    输入年龄和性别,判断你当前的个人情况!
    男性小于30岁显示:young,30岁到36岁之间显示:marriageable age,大于36岁显示:old。
    女性小于25岁显示:young,25岁到30岁之间显示:marriageable age,大于30岁显示:old。
    

ループ構造

for ループ (既知のループ数)

Xの私のために

ここの x は反復可能オブジェクトです。反復可能オブジェクトとは何ですか? それは、各要素を順番に表すことができることを意味します。

一般的な反復可能なオブジェクトには、文字列、タプル、リスト、辞書、セットが含まれます。

a = 'hzau'
for i in a:
    print(i)
print('#'*30)

b = list(a)  # 创建一个列表,同时学习一下,直接对字符串使用list强制转化的话,每一个字符都对应一个元素
print(b)
for i in b:
    print(i)

範囲(a,b)

Range はイテレータです。工場が製品を生産できるのと同じように、イテレータは反復可能なオブジェクトを生成できます。

得られる結果は範囲オブジェクトで、構築された内容は a (a が書かれていない場合はデフォルトで 0 から始まります) から b (b を除く) までの整数の擬似リストです (胡斌先生が命名)

これは何を意味するのでしょうか? 以下のコードを見ればわかります。

a = range(1,10)
print(a)
print(list(a))  # 看看a里到底包含什么东西

print(list(a)) を通して、 range(1,10) は要素が 1 ~ 9 であるリストを作成するのと同じであることを簡単に理解できます。

for i in range(1,10):
    print(i)

範囲(x)内のiの場合

よく for i in range(len(x)) と書かれるのですが、なぜこのように書かれるのでしょうか?インデックスと要素を1対1対応で書いているので。

a = 'hzau'
for i in range(len(a)):
    print(i,a[i])

for i in x でできることは、for i in range(x) でできることなので、for i in range(x) を使用することをお勧めします。その逆は間違っています。

(私が以下に言いたいことと同じように、この文についてよく考えてください。for ループで実行できることはすべて、while ループで実行できますが、その逆は間違っています)

for の 2 つの形式はどのような場合に使用されますか?

「それはトピック次第であり、特定の状況を詳細に分析する必要がある」ということは今でも古いことわざです。

最初にコードを書いて、最後に for i in x を書くことができないことがわかったら、それを for i in range(x) に変更できます。

頭を使いたくない場合は、for i in range(x) の形式で記述してください。for i in range(x) は、for i in x で実行できることすべてを実行できるからです。

while ループ (既知のループ条件)

構造は次のとおりです

while 条件:
    循环体

条件が満たされると、ループ本体の内容が実行されます。たとえば、

x=0
while x<=5:
	print(x)
    x+=1
#结果为0 1 2 3 4 5

無限ループ

while の判定条件が常に True の場合、プログラムは常にループ状態になり、次のコードを実行できません。

while 1:
    print(666)

ただし、無限ループに判定条件を追加すると、for ループの代わりに while ループを使用するなど、良い役割を果たします。

mystr = 'hzau'
index = 0
while True:  # 创建死循环
    if index >= len(mystr):  # 设置跳出循环的条件
        break
    print(mystr[index])
    index += 1

一部の学生は、これが実際には次と同等であることがわかります。

mystr = 'hzau'
index = 0
while index >= len(mystr):  # 创建死循环
    print(mystr[index])
    index += 1

はい、その通りですが、明らかに最初のコード部分に必要な頭脳とロジックはより少なくなります。

継続と休憩

  • continue は、現在のサイクルを終了し、現在のサイクルのループ本体の背後でコードを実行せず、次のサイクルの実行を継続することです。
  • ブレークはループ全体を終了します
for i in range(3):
    if i==1:
        continue
    print(i,666)
print('###########################')
for i in range(3):
    if i==1:
        break
    print(i,777)

これは試験中によく説明されますが、ブレークは最も内側のループから抜け出すために使用され、ループから抜け出した後、プログラムはループ コードの後に​​実行を続けます。[この文は正しいです]

Break は最も内側のループからのみ飛び出すことができ、つまり、それに最も近いループ構造を終了することしかできません。ループは入れ子にすることもできるので、次の例を見るとよくわかります。

for i in range(3):
    for j in range(3):
        if j==1:
            break
        print('i=%d,j=%d'%(i,j))

では、外層から飛び出したい場合はどうすればよいでしょうか? フラグを作成するという方法が使えます フラグの作成とは 条件を作成し、その条件の状態に基づいて後からコードを書く方法を判断することです. この機能は理解するしかありません。

flag = 1
for i in range(3):
    if not flag:  # 这么写为什么是对的呢?起到的作用和 if flag==0 一样吗?
        break
    for j in range(3):
        if j==1:
            flag = 0
            break
        print('i=%d,j=%d'%(i,j))

for ループと while ループの選択

多くの学生は、プログラムで for ループと while ループのどちらを使用するかについて非常に混乱していますが、実際には 1 つの文を覚えておくだけで大丈夫です。

  • for ループを使用してループの数を知る
  • while ループを使用したループ条件のみがわかります

for ループでできることは while ループでもできますが、その逆は間違っています (注意深く経験してください)

実際、プログラムを書くときは for ループをよく使いますが、それに比べて while ループはあまり使われません。

for-else ループと while-else ループ

有个了解就可以了,知道有这么种形式,考的不是很多

ループ本体の実行後、ループ本体が壊れていない場合は、else の内容が引き続き実行されます。

x=0
while x<=5:
	print(x)
    x+=1
else:
    print('进入else啦')
###########################
x=0
while x<=5:
	if x==1:
        print(i)
        break
	print(x)
    x+=1
else:
    print('进入else啦')

練習問題

問題を解く前に、一定回数ループするのか、ループ条件を知っているのかを考えて、どのループ方法を使用するかを決めてください。

  • 算数

    已知y=1+1/3+1/5++1/2n-1:
    求y<3时的最大n值以及最大n值对应的y值(y值保留小数点后2)
  • 小栗水泳

    小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。
    现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。
    
  • 猿が桃を食べる

    猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第n天吃以前发现只剩下一个桃子。
    编写程序实现:据输入的天数计算并输出猴子共摘了几个桃子
    
  • 输入一个数,判断哪三个正整数的和与这个数字相等
    

問題について考える

  • True を表すものは何でしょうか? 1 は True を表すことができますか? 他に表現方法はありますか?

  • 以下のコードに何か問題があると思いますか?

    a = 1
    print(a+True)
    
  • for ループをいつ使用するか、while ループをいつ使用するか

  • continueとbreakの機能をはっきり覚えていますか?

  • for-else ループと while-else ループ構造について聞いたことがありますか?

  • 次の問題を解決するコードを記述してください

    输入一个数字n,返回n以内的斐波那契数列。
    注:斐波拉契数列由01开始,之后的数就是由之前的两数相加而得出:0, 1, 1, 2, 3, 5, 8, 13, 21
    【样例输入】(输入大于3的整数值)
    input a number please:200
    【样例输出】
    1,1,2,3,5,8,13,21,34,55,89,144,
    

おすすめ

転載: blog.csdn.net/m0_46521785/article/details/110914686#comments_28568636