python条件和循环

104 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情

大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

关于除法运算的坑:

相除的得到的是浮点数,

x = 3
count = x/3
print(count)    #1.0
print(type(count))  #<class 'float'>

如果想要得到整数,需要类型转化!

count = (int)(x/3)
#或者:
count = x/3
count = (int)(count)

条件和循环

缩进和悬挂的else

首先看一段C语言的代码(Java等其他语言也存在类似的问题).

if (x > 0)
    if (y > 0)
        printf("x and y > 0\n");
else
    printf("x <= 0\n");

我们期望 else 对应的代码, 执行 x <= 0 的逻辑.

在C语言中, 如果不使用{ }来标明代码块, else会和最近的if匹配. 就意味着上面的else, 执行的逻辑其实是 y <= 0 .


在Python中, 就需要使用不同级别的缩进, 来标明, 这个else和哪个if是配对的.

# 和 if x > 0 配对
if x > 0:
    if y > 0:
        print('x and y > 0')
else:
    print('x <= 0')
    
# else和if y > 0 配对
if x > 0:
    if y > 0:
        print('x and y > 0')
    else:
        print('x > 0 and y <= 0')

条件表达式

  • Python中并没有 ? : 这样的三目运算符, 理由是Python设计者觉得这个玩意太丑 T_T
  • 取而代之的是, 一种叫做条件表达式的东西. PS: 私以为, 这玩意更丑~ 但是预防同学们笔试面试被问到, 还是稍微提一下.
x, y, smaller = 3, 4, 0
if x < y:
    smaller = x
else:
    smaller = y

上面这一段代码, 用条件表达式写作

smaller = x if x < y else y     #如果x<y,值就是x,否则就是y

和循环搭配的else

  • else不光可以和if搭配, 还能和while, for搭配

例子:

# 实现一个函数, 从列表中查找指定元素, 返回下标.
def Find(input_list, x):
    #在input_list中查找x,遍历input_list
    for i in range(0, len(input_list)):
        if input_list[i] == x:
            return i
    else:   #else和for配合
        return None

实现一个函数, 打印出一个数的最大因子

bug代码:

# 实现一个函数, 打印出一个数的最大因子
def ShowMaxFactor(x):
    count = x / 2
    #试除法
    while count > 1:
        if x % count == 0:
            print('largest factor of %d is %d' % (x, count))
            break
        count -= 1
    else:
        print(f"{x} is prime")  #素数for i in range(10, 20):
    #打印10-19每个数对应的最大因子
    ShowMaxFactor(i)

image-20220320222800288


错误原因: 因为没有声明类型, 所以count = x / 2得到的是浮点数!!!!

for i in range(0,5):
    print(i/5)
#执行结果:
0.0
0.2
0.4
0.6
0.8

解决办法:把count的类型强转: || 计算结果强转为int

#方法1:
count = (int)(x / 2)    #强转类型
#方法2:
count = x / 2
count = (int)(count)    #强转类型

# 实现一个函数, 打印出一个数的最大因子
def ShowMaxFactor(x):
    count = (int)(x / 2)    #强转类型
    #试除法
    while count > 1:
        if x % count == 0:
            print('largest factor of %d is %d' % (x, count))
            break
        count -= 1
    else:
        print(f"{x} is prime")  #素数for i in range(10, 20):
    #打印10-19每个数对应的最大因子
    ShowMaxFactor(i)

image-20220320223013450


  • 注意, 和循环搭配的else子句, 只会在循环条件不满足的时候才会执行(对于for来说就是整个序列遍历完成). 如果循环中途break了, 仍然会跳过else