鱼C论坛

 找回密码
 立即注册
查看: 1344|回复: 11

[已解决]零基础学习python第9讲求解

[复制链接]
发表于 2022-3-21 21:34:31 | 显示全部楼层 |阅读模式

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

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

x
0.为什么以下代码没限制count>=0,却能限制用户次数为3次
count = 3
password = 'FishC.com'

while count:
    passwd = input('请输入密码:')
    if passwd == password:
        print('密码正确,进入程序......')
        break
    elif '*' in passwd:
        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
        continue
    else:
        print('密码输入错误!您还有', count-1, '次机会!', end=' ')    
    count -= 1

1.求解释解题思路以及代码编写思路: 编写一个程序,求 100~999 之间的所有水仙花数。
for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
        print(i)

2.求解释解题思路以及代码编写思路:有红、黄、蓝三种颜色的求,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配
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)

共三个问题,麻烦都解答一下,谢谢
最佳答案
2022-3-21 22:24:21
第一个问题
为啥有三次?因为3 -3 =0,每循环一次减一
如果你输入带有 * 号,你甚至可以进行100次,因为有个continue 就不会让count-1
如果每人只有三次输入机会,可以把count变成2
count = 2
password = 'FishC.com'
while count:
    passwd = input('请输入密码:')
    if passwd == password:
        print('密码正确,进入程序......')
        break
    elif '*' in passwd:
        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
        # continue
    else:
        print('密码输入错误!您还有', count, '次机会!', end=' ')
    count -= 1

如果是第一次输入错误后还有三次机会可以这样改
count = 3
password = 'FishC.com'
print("只有三次机会!")
while count:
    passwd = input('请输入密码:')
    if passwd == password:
        print('密码正确,进入程序......')
        break
    elif '*' in passwd:
        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
        # continue
    else:
        print('密码输入错误!您还有', count, '次机会!', end=' ')
    count -= 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-21 22:24:21 | 显示全部楼层    本楼为最佳答案   
第一个问题
为啥有三次?因为3 -3 =0,每循环一次减一
如果你输入带有 * 号,你甚至可以进行100次,因为有个continue 就不会让count-1
如果每人只有三次输入机会,可以把count变成2
count = 2
password = 'FishC.com'
while count:
    passwd = input('请输入密码:')
    if passwd == password:
        print('密码正确,进入程序......')
        break
    elif '*' in passwd:
        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
        # continue
    else:
        print('密码输入错误!您还有', count, '次机会!', end=' ')
    count -= 1

如果是第一次输入错误后还有三次机会可以这样改
count = 3
password = 'FishC.com'
print("只有三次机会!")
while count:
    passwd = input('请输入密码:')
    if passwd == password:
        print('密码正确,进入程序......')
        break
    elif '*' in passwd:
        print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
        # continue
    else:
        print('密码输入错误!您还有', count, '次机会!', end=' ')
    count -= 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-21 22:35:04 | 显示全部楼层
第二个代码
水仙花数就是 判断这个数的个位三次方 + 十位三次方 + 百位三次方的和是否为该数
一个数 % 10 相当于取这个数的个位值
而地板除 // 10 就时去掉这个数的个位

按照水仙花的判定标准,我们可以对一个数 % 10,取它的个位的三次方,然后// 10将个位去掉,然后又取它的新个位也就是原来的十位,接着再去掉...
最后我们就可以获得这个数的 个 十 百位的三次方和,然后和原来的数据一比较就好
本代码就是这个思路

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

使用道具 举报

发表于 2022-3-21 22:44:44 | 显示全部楼层
第三就是简单的组合排序
题目说任取8个球,统计出现的可能,那你就一个个带进去就好
就比如没有红球的情况 说明绿 蓝要有8个 ,那就是 0 3 5 和 0 2 6,依次类推。
可能你对代码不理解
for red in range(0, 4): #range(0,4) 相当于一个左闭右开区间[0,4) 取值0,1,2,3
    for yellow in range(0, 4): # 同上
        for green in range(2, 7): # 同理 取值 2,3,4,5,6, 为啥是(0,7)? 因为假设红三 黄三,那最起码也要绿二,说明不存在只有一个绿球的情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-22 08:57:01 | 显示全部楼层
while count就是一个限制,当while条件为True时才能运行循环代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-23 20:40:35 | 显示全部楼层
大马强 发表于 2022-3-21 22:35
第二个代码
水仙花数就是 判断这个数的个位三次方 + 十位三次方 + 百位三次方的和是否为该数
一个数 % 10 ...

0.为什么count等于0的时候就会退出循环,而不会继续减下去呢
第一次输入错误后还有三次机会的代码好像还是一共三次机会~
1.代码里取十位数是temp //= 10,为什么不是temp = temp // 10呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-23 20:47:00 | 显示全部楼层
大马强 发表于 2022-3-21 22:35
第二个代码
水仙花数就是 判断这个数的个位三次方 + 十位三次方 + 百位三次方的和是否为该数
一个数 % 10 ...

水仙花:代码中if与while平行,代码是怎么个执行顺序?将if变成while的下一级怎么就答案不对了
for i in range(100,1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10
        if sum == i:
            print(i)

在每次循环中都会给sum赋值,为什么不会影响下一个循环中的sum
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-23 21:04:59 | 显示全部楼层
65655797 发表于 2022-3-23 20:40
0.为什么count等于0的时候就会退出循环,而不会继续减下去呢
第一次输入错误后还有三次机会的代码好像还 ...

while语句判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。

当判断条件假 false 时,循环结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-23 21:10:57 | 显示全部楼层
gtkwidget 发表于 2022-3-23 21:04
while语句判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。

当判断条件假 false 时 ...

明白了,虽然负数也是true,但是会先到0为false时就结束了,不再往下减
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-23 22:51:41 | 显示全部楼层
65655797 发表于 2022-3-23 21:10
明白了,虽然负数也是true,但是会先到0为false时就结束了,不再往下减

是的,当temp = 0时就跳出循环了
第二个问题
因为 temp //= 10 就是 temp = temp // 10


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

使用道具 举报

发表于 2022-3-23 22:57:40 | 显示全部楼层
65655797 发表于 2022-3-23 20:47
水仙花:代码中if与while平行,代码是怎么个执行顺序?将if变成while的下一级怎么就答案不对了

首先你要知道 【i】 是待判断的数
而判断的规则是 个 十 百位的三次方和是否等于【i】
而while循环就是实现 个 十 百位的三次方相加,所以必须等到while结束才能再判断

赋值就是后面的值来覆盖前面的值,那下一次的循环当然不会被上一次循环影响
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-24 10:26:13 | 显示全部楼层
0.因为0在python中代表False,while在条件为False是停止。这是一个小技巧,我编程时经常用,如:
while not life:
    sys.exit(0)#退出程序

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 01:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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