python条件和循环

举报
芒果_Mango 发表于 2022/04/30 23:06:21 2022/04/30
【摘要】 大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流作者简介:CSDN C/C++领域新星创作者https://blog.csdn.net/chuxinchangcun?type=blog掘金LV3用户 https://juejin.cn/us...

大家好,我是芒果,一名非科班的在校大学生。对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')
    
# elseif 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:   #elsefor配合
        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
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。