条件分支判断和循环
-
分支结构: 缩进决定从属关系
if-elif条件判断
1)If condition:
Statement(s)
2)if condition:
Statement(s)
else:
Statement(s)
3)if condition1:
Statement(s)
elif condition2:
Statement(s)
elif condition3:
Statement(s)
…
4)if condition1:
Statement(s)
elif condition2:
Statement(s)
elif condition3:
Statement(s)
…
else:
Statement(s)
条件成立时执行的语句 if condition else 条件不成立时执行的语句
Eg:
score = int(input("Input your score here: "))
level = (
'D' if 0 <= score < 60 else
'C' if 60 <= score < 80 else
'B' if 80 <= score < 90 else
'A' if 90 <= score <100 else
'S' if score == 100 else
'please input the score in range 0-100'
)
print(level)
分支结构的嵌套
跳出循环:
-
Break – 直接跳出循环体
-
Continue – 还没完我还会回来的, 跳到循环体开头
-
无论是break还是continue只能作用于一层循环体
i = 0 while i <= 10: i += 1 if i % 2 == 0: continue print(i)
- else – 跳出循环仅当循环条件为假时
day = 0
while day < 7:
answer = input("Do you study day day up? ")
if answer == "no":
print("Come on! you can do it!")
break
day += 1
else:
print("Congratulation! you keep signing up 7 days!")
- 嵌套循环 nested loop
Eg. 乘法表
i = 1
while i < 10:
j = 1
while j <= i:
print(j, "x", i, "=", j * i, end=' ')
j += 1
print()
i += 1
好兄弟: range()
Range(start, stop, [step]) (指定跨度)
Eg. 倒序排列:
For i in range(10, 3, -2):
Print(i)
Eg: 质数/素数: 大于1自然数, 除了被1和本身整除,不能被替他数整除的数.
嵌套for循环, else用来打印不满足内层循环的值
""" 求一个范围内的素数 """
prime = int(input("Please input a number here, we will list what prime in it: "))
for i in range(2, prime):
for j in range(2, i):
if i % j == 0:
print(i, "=", j, "*", i // j)
break
else:
print(i, "是素数")
Eg.求解水仙花数: 如果一个 3 位数等于其各位数字的立方和,153 = 1^3 + 5^3 + 3^3
for i in range(100, 1000):
sum = 0
temp = i
#先得到个位数的3次方,然后底板除得到前两位, 123 // 10 就变成12了,然后12再去求个位3次方,然后底板除得到1,再去求3次方,累加.
while temp:
sum = sum + (temp % 10) ** 3
temp //= 10
if sum == i:
print(i)
Eg. 回文数:
x = int(input("请输入一个正整数:"))
if x < 0 or (x % 10 == 0 and x != 0):
print("不是回文数。")
else:
revertedNumber = 0
while x > revertedNumber:
revertedNumber = revertedNumber * 10 + x % 10
x //= 10
if x == revertedNumber or x == revertedNumber // 10:
print("是回文数。")
else:
print("不是回文数。")
注:
难点一:循环应该在什么时候结束?
答:常规的想法是搭配使用求余数运算符(%)和整除运算符(//),将 x 每一位都进行对应的前后翻转,即将 12345 依次变为 54321……但真的有必要吗?我们只需要反转一半即可,因为如果该数字是回文数,那么其后半部分翻转后应该与原始数字的前半部分相同。例如:输入 1221,我们可以将数字后半部分从 21 翻转为 12,并将其与前半部分 12 进行比较,因为二者相同,我们得知数字 1221 是回文。
难点二:如果该数字的位数是奇数,那么反转后的数字位数会比原来的一半多一位。
所以,if x == revertedNumber
or x == revertedNumber // 10
才对两种情况(左侧是当 x 的位数是偶数时;右侧是当 x 的位数是奇数时)进行判断。