鱼C论坛

 找回密码
 立即注册
查看: 4164|回复: 19

[已解决]各位大佬Python课后题求助,看代码!

[复制链接]
发表于 2018-11-20 16:39:54 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Feather233 于 2018-11-20 16:44 编辑

i = 10
while i:
    print("233")
    i = i-1
这个为啥是输出十次,而 我改为i+1就是无限循环了 i-5只有2次了  
求解!!!
最佳答案
2018-11-20 18:17:11
while i的 意思就相当于 while i 不等于0 ,i从你赋值10开始,不停的自减1(i =i-1),减到零的情况下,whie 就等于 0 ,0的话也就是False,当然就跳出咯~  

i+1的情况下,i往上增长,永远不为零,所以无限循环了。  

i-5类似,第一次能输出是因为10-5 =5 ,第二次输出是因为5-5 =0 ,没有第三次是因为while i =0了,所以跳出了!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-11-20 16:51:09 | 显示全部楼层
输出10 次是因为 while i 这个i只要不为0(也就是不为假) while这个循环里的print就一直输出
改为i+1后 i就一直为真 肯定就是无限循环了,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-11-20 18:08:20 | 显示全部楼层
借帖子问一个问题015讲中的flag con和flag len分别是什么意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-20 18:17:11 | 显示全部楼层    本楼为最佳答案   
while i的 意思就相当于 while i 不等于0 ,i从你赋值10开始,不停的自减1(i =i-1),减到零的情况下,whie 就等于 0 ,0的话也就是False,当然就跳出咯~  

i+1的情况下,i往上增长,永远不为零,所以无限循环了。  

i-5类似,第一次能输出是因为10-5 =5 ,第二次输出是因为5-5 =0 ,没有第三次是因为while i =0了,所以跳出了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-11-20 18:20:00 | 显示全部楼层
爱鱼ning 发表于 2018-11-20 18:08
借帖子问一个问题015讲中的flag con和flag len分别是什么意思

flag con  和 flag len 两个变量本身没什么含义。

但是作者这里用这两个变量的意思,一个是用来统计字符串长度,一个是用来计算是否包含特征库用的。

字符串长度符合了,就len +1 ;字符串符合特征库了,就 con +1 。就这个意思。

其实你可以随便取名。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-20 20:55:24 | 显示全部楼层
while是否进入循环的条件是while后的值为ture(非0),i初始值为10,进入循环后,i的值-1,变为9;第二次进入循环...依次下去一直到i的值变为0后,不进循环了,期间一共执行了10次循环内的输出语句,所以输出十次。改为i+1,i的值始终为ture(非0),所以是个无限循环。改为i-5,第一次循环输出后,i的值变为5,进入第二次循环,输出后i的值变为0,while后的条件变为0,不再进入循环,因此只输出两次。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-21 11:47:47 | 显示全部楼层
heidern0612 发表于 2018-11-20 18:17
while i的 意思就相当于 while i 不等于0 ,i从你赋值10开始,不停的自减1(i =i-1),减到零的情况下,whie ...

谢谢大佬   我后面自己想同了  不过解释的很到位!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-21 11:48:36 | 显示全部楼层
Long-Ju 发表于 2018-11-20 16:51
输出10 次是因为 while i 这个i只要不为0(也就是不为假) while这个循环里的print就一直输出
改为i+1后 i ...

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-21 12:19:06 | 显示全部楼层
Dipson淡水 发表于 2018-11-20 20:55
while是否进入循环的条件是while后的值为ture(非0),i初始值为10,进入循环后,i的值-1,变为9;第二次进入 ...

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-21 16:31:41 | 显示全部楼层
heidern0612 发表于 2018-11-20 18:17
while i的 意思就相当于 while i 不等于0 ,i从你赋值10开始,不停的自减1(i =i-1),减到零的情况下,whie ...

大佬 你好 我有个问题麻烦一下 关于第六节课的课后题,对于判断闰年的代码
问题是我写出来的这个  如果用户输入 0  那这个代码就结束了 怎么才能做到完全的循环起来,代码如下:
temp = input("plese enter a year:")
year = int(temp)
while year != 0:
    temp = input("is not leap year,try again!")
    while not temp.isdigit():
        temp = input("sorry,your input is incorrect,please enter an integer")
    year = int(temp)
    if year/400 == int(year/400):
            print(temp + "is a leap year!")
    else:
        if(year/4 == int(year/4))and(year/100 != int(year/100)):
            print(temp + "is a leap year!")
        else:
            print(temp + "is not leap year!")
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-21 16:44:15 | 显示全部楼层
本帖最后由 heidern0612 于 2018-11-21 17:36 编辑
Feather233 发表于 2018-11-21 16:31
大佬 你好 我有个问题麻烦一下 关于第六节课的课后题,对于判断闰年的代码
问题是我写出来的这个  如果 ...


我也不是大佬,我也是新人,刚学没多久。我可以给你个思路:

1、如果你想一直循环不退出的话,就直接while True就可以了,把所有的判断条件和用户交互步骤都包含在内。

2、如果你厌倦了无限循环,直接把while条件换了,换成用户输入特定字符退出,如用户输入Q退出,用户不输入的话就不退出就可以咯。

我给你举个例子:


  1. while True:
  2.         temp = input('请输入一个年份:')
  3.         if temp == "Q":
  4.                 print("程序退出,谢谢使用。")
  5.                 break
  6.         else:
  7.                 if not temp.isdigit():
  8.                         print("抱歉,您的输入有误,请输入一个整数:")
  9.                 else:
  10.                         year = int(temp)
  11.                         if year/400 == int(year/400):
  12.                                 print(temp + ' 是闰年!')
  13.                         else:
  14.                                 if (year/4 == int(year/4)) and (year/100 != int(year/100)):
  15.                                         print(temp + ' 是闰年!')
  16.                                 else:
  17.                                         print(temp + ' 不是闰年!')
复制代码


用户只有输入了Q才能退出。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-11-22 10:14:16 | 显示全部楼层
heidern0612 发表于 2018-11-21 16:44
我也不是大佬,我也是新人,刚学没多久。我可以给你个思路:

1、如果你想一直循环不退出的话,就直 ...

牛逼!(破音)谢谢!~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-22 10:20:39 | 显示全部楼层
heidern0612 发表于 2018-11-21 16:44
我也不是大佬,我也是新人,刚学没多久。我可以给你个思路:

1、如果你想一直循环不退出的话,就直 ...

我找到了一个韩信点兵的题目   就和第七节课后题爱因斯坦的数学题一样。题目如下:
韩信点兵,命令士兵每3人站一组,结果多出2名;接着命令士兵5人一组,结果多出3名;他又命令士兵7人一组,结果又少了2名,问总共有最少有多少兵?
最后这个命令士兵7人一组,结果又少了2名,怎样判定呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-22 13:34:56 | 显示全部楼层
Feather233 发表于 2018-11-22 10:20
我找到了一个韩信点兵的题目   就和第七节课后题爱因斯坦的数学题一样。题目如下:
韩信点兵,命令士兵每 ...

  1. def test(people):
  2.     if people % 3 == 2 and people % 5 == 3 and people % 7 == 2:
  3.         return True
  4.     else:
  5.         return False

  6. for i in range(1,300):
  7.     if test(i) == True:
  8.         print(f"应有兵{i}名" )
  9.     else:
  10.         pass

复制代码


根据范围的不同,这个数字可以更大。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-11-22 15:59:43 | 显示全部楼层
heidern0612 发表于 2018-11-22 13:34
根据范围的不同,这个数字可以更大。

哇  谢谢!信息量有点多  好多新的内容 我研究一下 谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-22 16:54:15 | 显示全部楼层
借帖子再问一个019讲
def findstr(destr,substr):
    count = 0
    length = len(destr)
    if substr not in destr:
        print('在目标字符串中未找到字符串')
    else:
        for each1 in range(length-1):
            if destr[each1] == substr[0]:
                if destr[each1+1] == substr[1]:
                    count +=1
        print('子字符串在目标字符串中共出现%d次'% count)
destr = input("请输入目标字符串;")
substr = input("请输入子目标字符串;")
findstr(destr,substr)
其中 for each1 in range(length-1):
            if destr[each1] == substr[0]:
                if destr[each1+1] == substr[1]:
不明白这是什么意思,怎么寻找的,尤其是[]是什么意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-3 15:37:23 | 显示全部楼层
heidern0612 发表于 2018-11-22 13:34
根据范围的不同,这个数字可以更大。

兄弟 又来麻烦你了

#coding:utf-8
#题目:输入某年某月某日,判断这一天是这一年的第几天?
data = input('输入年月份,格式2016-05-12:')
#字符串切割
s = data.split("-")#以-为标志切割
if(len(s == 3)):
#赋值
year = int(s[0])
mon = s[1]
day = s[2]
print (mon)
# python没有switch case 用字典方式
else:
print('输入有误')
da={'1':0,'2':31,'3':59,'4':90,'5':120,'6':151,'7':181,'8':212,'9':243,'10':273,'11':304,'12':334}
def f(x):
return da.get(x)
sum = int(f(mon)) + int(day)
if(year %400 == 0 or (year %4 == 0 and year %100 != 0)):
if(int(mon) >= 3):
sum += 1
print(sum)
运行然后报错
Traceback (most recent call last):
File "G:/小甲鱼教程/算法题/求第几天.py", line 8, in
if(len(s == 3)):
Type Error: object of type 'bool' has no len()

说布尔类型没有长度 但是我已经切割了呀  这个 是怎么回事 求解!

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-3 15:37:57 | 显示全部楼层
Feather233 发表于 2018-12-3 15:37
兄弟 又来麻烦你了

#coding:utf-8
  1. #coding:utf-8
  2. #题目:输入某年某月某日,判断这一天是这一年的第几天?

  3. data = input('输入年月份,格式2016-05-12:')
  4. #字符串切割

  5. s = data.split("-")#以-为标志切割
  6. if(len(s == 3)):
  7.     #赋值
  8.     year = int(s[0])
  9.     mon = s[1]
  10.     day = s[2]
  11.     print (mon)

  12.     # python没有switch case 用字典方式
  13. else:
  14.     print('输入有误')

  15. da={'1':0,'2':31,'3':59,'4':90,'5':120,'6':151,'7':181,'8':212,'9':243,'10':273,'11':304,'12':334}
  16. def f(x):
  17.     return da.get(x)
  18. sum = int(f(mon)) + int(day)
  19. if(year %400 == 0 or (year %4 == 0 and year %100 != 0)):
  20.     if(int(mon) >= 3):
  21.         sum += 1
  22. print(sum)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-3 15:42:28 | 显示全部楼层
heidern0612 发表于 2018-11-22 13:34
根据范围的不同,这个数字可以更大。
  1. #coding:utf-8
  2. #题目:输入某年某月某日,判断这一天是这一年的第几天?

  3. data = input('输入年月份,格式2016-05-12:')
  4. #字符串切割

  5. s = data.split("-",1)#以-为标志切割
  6. if(len(s == 3)):
  7.     #赋值
  8.     year = int(s[0])
  9.     mon = s[1]
  10.     day = s[2]
  11.     print (mon)

  12.     # python没有switch case 用字典方式
  13. else:
  14.     print('输入有误')

  15. da={'1':0,'2':31,'3':59,'4':90,'5':120,'6':151,'7':181,'8':212,'9':243,'10':273,'11':304,'12':334}
  16. def f(x):
  17.     return da.get(x)
  18. sum = int(f(mon)) + int(day)
  19. if(year %400 == 0 or (year %4 == 0 and year %100 != 0)):
  20.     if(int(mon) >= 3):
  21.         sum += 1
  22. print(sum)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-3 16:47:50 | 显示全部楼层
heidern0612 发表于 2018-11-22 13:34
根据范围的不同,这个数字可以更大。

解决啦 不好意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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