Feather233 发表于 2018-11-20 16:39:54

各位大佬Python课后题求助,看代码!

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

i = 10
while i:
    print("233")
    i = i-1
这个为啥是输出十次,而 我改为i+1就是无限循环了 i-5只有2次了
求解!!!

Long-Ju 发表于 2018-11-20 16:51:09

输出10 次是因为 while i 这个i只要不为0(也就是不为假) while这个循环里的print就一直输出
改为i+1后 i就一直为真 肯定就是无限循环了,

爱鱼ning 发表于 2018-11-20 18:08:20

借帖子问一个问题015讲中的flag con和flag len分别是什么意思

heidern0612 发表于 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了,所以跳出了!

heidern0612 发表于 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 。就这个意思。

其实你可以随便取名。

Dipson淡水 发表于 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,不再进入循环,因此只输出两次。

Feather233 发表于 2018-11-21 11:47:47

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

谢谢大佬   我后面自己想同了不过解释的很到位!

Feather233 发表于 2018-11-21 11:48:36

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

谢谢{:5_108:}

Feather233 发表于 2018-11-21 12:19:06

Dipson淡水 发表于 2018-11-20 20:55
while是否进入循环的条件是while后的值为ture(非0),i初始值为10,进入循环后,i的值-1,变为9;第二次进入 ...

谢谢{:5_108:}

Feather233 发表于 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!")

heidern0612 发表于 2018-11-21 16:44:15

本帖最后由 heidern0612 于 2018-11-21 17:36 编辑

Feather233 发表于 2018-11-21 16:31
大佬 你好 我有个问题麻烦一下 关于第六节课的课后题,对于判断闰年的代码
问题是我写出来的这个如果 ...

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

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

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

我给你举个例子:


while True:
        temp = input('请输入一个年份:')
        if temp == "Q":
                print("程序退出,谢谢使用。")
                break
        else:
                if not temp.isdigit():
                        print("抱歉,您的输入有误,请输入一个整数:")
                else:
                        year = int(temp)
                        if year/400 == int(year/400):
                                print(temp + ' 是闰年!')
                        else:
                                if (year/4 == int(year/4)) and (year/100 != int(year/100)):
                                        print(temp + ' 是闰年!')
                                else:
                                        print(temp + ' 不是闰年!')


用户只有输入了Q才能退出。

Feather233 发表于 2018-11-22 10:14:16

heidern0612 发表于 2018-11-21 16:44
我也不是大佬,我也是新人,刚学没多久。我可以给你个思路:

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

牛逼!(破音)谢谢!~

Feather233 发表于 2018-11-22 10:20:39

heidern0612 发表于 2018-11-21 16:44
我也不是大佬,我也是新人,刚学没多久。我可以给你个思路:

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

我找到了一个韩信点兵的题目   就和第七节课后题爱因斯坦的数学题一样。题目如下:
韩信点兵,命令士兵每3人站一组,结果多出2名;接着命令士兵5人一组,结果多出3名;他又命令士兵7人一组,结果又少了2名,问总共有最少有多少兵?
最后这个命令士兵7人一组,结果又少了2名,怎样判定呀

heidern0612 发表于 2018-11-22 13:34:56

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


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

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



根据范围的不同,这个数字可以更大。

Feather233 发表于 2018-11-22 15:59:43

heidern0612 发表于 2018-11-22 13:34
根据范围的不同,这个数字可以更大。

哇谢谢!{:5_108:}信息量有点多好多新的内容 我研究一下 谢谢!

爱鱼ning 发表于 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 == substr:
                if destr == substr:
                  count +=1
      print('子字符串在目标字符串中共出现%d次'% count)
destr = input("请输入目标字符串;")
substr = input("请输入子目标字符串;")
findstr(destr,substr)
其中 for each1 in range(length-1):
            if destr == substr:
                if destr == substr:
不明白这是什么意思,怎么寻找的,尤其是[]是什么意思

Feather233 发表于 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)
mon = s
day = s
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()

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

Feather233 发表于 2018-12-3 15:37:57

Feather233 发表于 2018-12-3 15:37
兄弟 又来麻烦你了

#coding:utf-8


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

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

s = data.split("-")#以-为标志切割
if(len(s == 3)):
    #赋值
    year = int(s)
    mon = s
    day = s
    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)

Feather233 发表于 2018-12-3 15:42:28

heidern0612 发表于 2018-11-22 13:34
根据范围的不同,这个数字可以更大。

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

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

s = data.split("-",1)#以-为标志切割
if(len(s == 3)):
    #赋值
    year = int(s)
    mon = s
    day = s
    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)

Feather233 发表于 2018-12-3 16:47:50

heidern0612 发表于 2018-11-22 13:34
根据范围的不同,这个数字可以更大。

解决啦 不好意思
页: [1]
查看完整版本: 各位大佬Python课后题求助,看代码!