小北要努力 发表于 2021-8-6 15:51:07

关于for循环的问题

程序目的是查找输入的字符串的重复次数
为了防止重复查找,所以选择判断之后each值发生改变 但是为什么改变后的each值传递不进去呢?
def count(zifu):
    str1=zifu
    str2=zifu
    i=0
    long=len(zifu)
    for each1 in range(long):
      print(each1)
      for each2 in range(long):
            if str2==str1:
                i+=1
      print('出现',str1,'%d次'% i)
      if str1==str1:
            print(each1)
            each1=2+each1
            print(each1)
    return

这是输入和运行的结果:
count('!!!!')
0
出现 ! 4次
0
2
1
出现 ! 8次
1
3
2
出现 ! 12次
2
4
3
出现 ! 16次
如果我输入的位数够多就会一直以几何倍增长,为什么修改后的each值传递不进去呢

逃兵 发表于 2021-8-6 16:02:36

def count(zifu):
    for i in set(zifu):
      print(f'{i}出现{zifu.count(i)}次')

灰晨 发表于 2021-8-6 16:19:31

本帖最后由 灰晨 于 2021-8-6 16:21 编辑

if str1==str1:
            print(each1)
            each1=2+each1
            print(each1)
虽然,这里修改each1后,each1等于2
但是,第二次循环for each1 in range(long): ,又重新将each1赋值为1了

直接像楼上一样用count就能解决的问题

小北要努力 发表于 2021-8-6 23:18:17

灰晨 发表于 2021-8-6 16:19
if str1==str1:
            print(each1)
            each1=2+each1


就是想问一下 单纯用我的方法是无解的吗

小北要努力 发表于 2021-8-6 23:19:03

逃兵 发表于 2021-8-6 16:02


好的 谢谢大佬

小北要努力 发表于 2021-8-6 23:36:21

逃兵 发表于 2021-8-6 16:02


可以再问一下为什么这里要用set吗 目前还没有学到这个函数 谢谢

逃兵 发表于 2021-8-7 09:44:28

小北要努力 发表于 2021-8-6 23:36
可以再问一下为什么这里要用set吗 目前还没有学到这个函数 谢谢

set是集合函数
一般用来去重保留唯一
后面会学到

拉普赛高 发表于 2021-8-7 11:47:04

逃兵 发表于 2021-8-6 16:02


问一下大佬,这个print是什么用法,应该怎么去理解

逃兵 发表于 2021-8-7 12:08:41

拉普赛高 发表于 2021-8-7 11:47
问一下大佬,这个print是什么用法,应该怎么去理解

你是指这段代码吗
print(f'{i}出现{zifu.count(i)}次')

这不是print的用法

是f字符串 f-string ,是python3.6以后引入的格式化字符串方法

简单来说在字符串前面加个f,然后字符串中的{}内可以替换掉变量或者常量


name = 'Tom'
age = 18
tell = 123456789

s = f'name:{name}\nage:{age}\ntell:{tell}'

print(s)



https://docs.python.org/zh-cn/3/library/string.html
页: [1]
查看完整版本: 关于for循环的问题