鱼C论坛

 找回密码
 立即注册
查看: 2329|回复: 2

[学习笔记] 新手鱼的大神梦(python笔记009)

[复制链接]
发表于 2018-6-10 21:04:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 圣剑三刀。abx 于 2018-6-28 15:46 编辑

嗯第九篇了,坚持要学下去,虽然要中考了,但还是一无既往的浪hhh。
这一篇动动手板块较难会慢慢更新,对就是这样啦。
还有这篇已经搁置一段时间了,因为学校挺忙的。。。会努力回忆一下。
先是笔记啦:
1、这节课的内容为主要为循环语法
2、while循环:(1)语法:while  条件:
                                                     循环体
3、for 循环:(1)语法:for 目标 in 表达式:
                                                    循环体
                        (2)注意:字符串变量会打印一个字母然后自动换行:
                                              那个目标的值是for循环打印出来的最后一个数据的值                  
4、新学bif:(1)len()  #计算参数长度并返回,数字类型无长度而言。
                       (2)range() #range([start,]stop[,step=1])不包含stop值!
                       (3)list()#把数据变成列表显示出来
5、两个关键语句:(1)break  #终止当前循环
                                  (2)continue  #终止本轮循环并开始下一轮循环。
6、效率改进:循环体内的内容尽量简要,能提前搞定能提高不少效率。

动动手思路:
0、break & continue的运用
1、%10提取末尾数字,配合//接着提取倒数第二位
2、for套for适用排列组合
                        

动动手板块:
1、密码检验
先看看我自己写的:
times = 4
answer = 'FishC.com'
print('请输入密码:',end='')
while True:
    i = input(' ')
    if '*' in i:
        print('密码中不能含有“*”!您还有' , times , '次机会!请输入密码:',end=' ')
        continue
    elif i != answer:
        times -= 1
        if times == 0:
            print('机会用完啦!')
            break
        print('密码输入错误!您还有' , times , '次机会!请输入密码:',end=' ')
    else:
        print('答案正确,进入程序......')
        break
然后是正确答案:
times= 3
answer = 'FishC.com'

while times:
    i = input('请输入密码:')
    if i == answer:
        print('密码正确,进入程序......')
        break
    elif '*' in i:
        print('密码中不能含有“*”!您还有' , times , '次机会!',end=' ')
        continue
    else:
        print('密码输入错误!您还有' , times-1 , '次机会!',end=' ')
    times -= 1
相比之下肯定是标准答案比较简洁,当时自己写的纠结于机会用完后要打印一个“机会用完了”,所以比较烦,然后也有一些显示次数和程序布局的问题,最后还不错吧,嗯。
这道题的目的呢是练习continue和break语法的具体应用,看出来还是很妙的吧。

2、水仙花数
a = 1
b = c = 0
while True:
    if c == 10:
        c = 0
        b += 1
        if b == 10:
            b = 0
            a += 1
            if a == 10:
                break
    i = a*100 + b*10 + c
    if i == a**3 + b**3 + c**3:
        print(i)
    c += 1
这个是我自己写的。然后有点烦是吧hh。当时看到题目,其实也很快想到了用for和range的那一对好基友搭档,但问题就在于,我发现我没办法单独把每一位的数字提取出来,然后再作处理。这题是要求我们把每一位数字都提取出来然后**3再加起来一个处理。那怎么办呢。所以我当时换了个思路,决定舍弃for循环,而是单独把三位用abc来赋值,这样就可以轻松处理计算比较的过程,问题就在于还要设置一个让它每一次都变大的代码,所以就有了后面一大段,还是可以的吧。虽然烦了些。
下面我们来看答案
for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10   
    if sum == i:
        print(i)
    
可以看出答案是相当相当简洁,精妙。用了前面我放弃的for循环,用sum来作为中转站,temp=i 让temp相当于i的一个副本,在上面修改就不会有什么问题了。最重要的是%10能提取出数字的末位,//10能砍掉最后一位,再%10就能求出原数倒数第二位。接着因为三次操作都是一样,在把它们放入一个循环中,处理好了以后,再和i做比较,哇简直完美!

3、三色球问题
print('red\tyellow\tgreen')
for red in range(0, 4):
    for yellow in range(0, 4):
        for green in range(2, 7):
            if red + yellow + green == 8:
                # 注意,下边不是字符串拼接,因此不用“+”哦~
                print(red, '\t', yellow, '\t', green)
这题我思路有的,操作不会。也没勇气风骚的for循环套for循环,大开眼界。这里三色球的主体思路就是红0黄0绿0,如果所有球加起来8个就对了,然后再红0黄0绿1这样下去,交给计算机,很快解决hhh。所以就用for套for来实现啦,先是最内层的2~7再慢慢变上一层的,至于为什么最后一个是2~7,其实你0~7也行啊,但经过分析,发现绿球至少2个,所以2~7就节省了程序时间啦,一点点时间也好,好多一点点不就甜死了吗。咳咳。不扯那个奶茶了。。。反正变成越简单越好。之后说实话我在运行前真没看懂,第一行和最后一行代码是什么意思。运行时惊爆眼球,原来,原来是
红   黄   绿
0     1    7
。。。。。。
这样的形式
也就是说,\t就是空开一段距离的意思喽?!!!!
啊。。。。。

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
morningmao + 1 + 1 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-25 23:17:26 | 显示全部楼层
自己写的很好啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-28 15:47:26 | 显示全部楼层

谢谢支持^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 21:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表