鱼C论坛

 找回密码
 立即注册
查看: 6187|回复: 21

[已解决]代码求助

[复制链接]
发表于 2022-7-19 16:22:12 | 显示全部楼层 |阅读模式

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

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

x
想写个乘法表,写了一段代码,运行不出乘法表的效果,想了好久都没想出来哪里出问题了。代码如下:
x = 1
y = 0
for x in range(1,10):
    y += 1
    z = x*y
    print(x,"*",y,"=",z,end=" ")
    if x == y:
        print("\n")
        x += 1
        y = 0
    else:
        continue


问题出现在2*2的时候,不太理解为什么2*2直接就显示3*2了。理论上原本不应该x=2,y=1,不执行if语句,往下执行else语句重新回到for循环,然后y会+1变成2,然后显示2*2=4才对吗??为啥直接就3*2了,应该怎么改正呢??
最佳答案
2022-7-19 17:30:25
本帖最后由 青出于蓝 于 2022-7-19 17:33 编辑
赛酱想学编程 发表于 2022-7-19 17:26
还是不太理解为啥x经for循环+1会变成3,x+1执行的条件不是x==y吗,当时x=2,y=1,那它不符合x==y不就不会 ...

x = 1
y = 0
for a in range(1,46):
    y += 1
    z = x*y
    print(x,"*",y,"=",z,end=" ")
    if x == y:
        print("\n")
        x += 1
        y = 0
    else:
        continue
for x in range(1,10)
x=1
你用了两个x
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-19 16:50:18 | 显示全部楼层
本帖最后由 青出于蓝 于 2022-7-19 16:54 编辑

x经for循环+1为3
故显示 3*2

continue只能避免执行下面的代码,无法跳过for循环
建议通过两个for循环实现
欢迎追问~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-19 16:52:21 | 显示全部楼层
本帖最后由 jackz007 于 2022-7-19 16:54 编辑
for x in range(1 , 10):
    for y in range(1 , x + 1):
        print("%1dx%1d=%2d" % (y , x , x * y) , end = " ")
    print()
        运行实况:
D:\[00.Exerciese.2022]\Python>python x.py
1x1= 1
1x2= 2 2x2= 4
1x3= 3 2x3= 6 3x3= 9
1x4= 4 2x4= 8 3x4=12 4x4=16
1x5= 5 2x5=10 3x5=15 4x5=20 5x5=25
1x6= 6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7= 7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8= 8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9= 9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

D:\[00.Exerciese.2022]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-19 16:53:37 | 显示全部楼层
for x in range(1,10):
    for y in range(1,x+1):
       print(x,'*',y,'=',x*y,end='  ')
    print('\n')
       
逻辑有点问题...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-19 17:26:19 | 显示全部楼层
青出于蓝 发表于 2022-7-19 16:50
x经for循环+1为3
故显示 3*2

还是不太理解为啥x经for循环+1会变成3,x+1执行的条件不是x==y吗,当时x=2,y=1,那它不符合x==y不就不会执行if语句,而应该else语句吗???想问一下continue避免执行是怎么理解应该?还不是太明白!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-19 17:30:25 | 显示全部楼层    本楼为最佳答案   
本帖最后由 青出于蓝 于 2022-7-19 17:33 编辑
赛酱想学编程 发表于 2022-7-19 17:26
还是不太理解为啥x经for循环+1会变成3,x+1执行的条件不是x==y吗,当时x=2,y=1,那它不符合x==y不就不会 ...

x = 1
y = 0
for a in range(1,46):
    y += 1
    z = x*y
    print(x,"*",y,"=",z,end=" ")
    if x == y:
        print("\n")
        x += 1
        y = 0
    else:
        continue
for x in range(1,10)
x=1
你用了两个x
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-19 17:31:07 | 显示全部楼层
本帖最后由 jackz007 于 2022-7-19 17:33 编辑
赛酱想学编程 发表于 2022-7-19 17:26
还是不太理解为啥x经for循环+1会变成3,x+1执行的条件不是x==y吗,当时x=2,y=1,那它不符合x==y不就不会 ...


        如果一个循环块内的最后一条语句是 continue 那它就是一条多余的语句。因为,即使没有这条语句,也会立即返回循环头部。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-19 17:32:32 | 显示全部楼层
赛酱想学编程 发表于 2022-7-19 17:26
还是不太理解为啥x经for循环+1会变成3,x+1执行的条件不是x==y吗,当时x=2,y=1,那它不符合x==y不就不会 ...

你这个for循环已经有x了,两个x变量重复了!!
这是主要问题


楼主源代码也是可以的,不过f循环的次数应该是45
因为每次循环只能打印一条,而99乘法表45条,所以应循序45次

正确代码看楼上

如果问题已解决
请及时设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-19 17:32:41 | 显示全部楼层
jackz007 发表于 2022-7-19 17:31
如果一个循环块内的最后一条语句是 continue 那它就是一条多余的语句。

那这样的话不就应该不执行吗而回到for循环吗?回到for循环之后也会按乘法表走吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-19 17:34:07 | 显示全部楼层
本帖最后由 jackz007 于 2022-7-19 17:36 编辑
赛酱想学编程 发表于 2022-7-19 17:32
那这样的话不就应该不执行吗而回到for循环吗?回到for循环之后也会按乘法表走吧?


         什么叫"按乘法表走",一切按循环走!
         你应该尝试理解正确有效的代码,你自己的代码逻辑复杂混乱,应该直接放弃!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-19 17:44:49 | 显示全部楼层
jackz007 发表于 2022-7-19 17:34
什么叫"按乘法表走",一切按循环走!
         你应该尝试理解正确有效的代码,你自己的代码 ...

角度不同而已,lz代码意思明显是循环一次打印一条,并且x定义重复,所以问题只是出现在for循环一行
至于else分支,全当pass,不影响
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-19 17:59:50 | 显示全部楼层
jackz007 发表于 2022-7-19 17:34
什么叫"按乘法表走",一切按循环走!
         你应该尝试理解正确有效的代码,你自己的代码 ...

那请教一下应该怎么学呢?我一个刚入门的萌新,您让我写出非常有逻辑的代码我确实是实力有限写不出来。但是您让我光看别人写的代码我能推敲出执行效果,但是自己上手确实是写不出来。。我光看别人的代码不上手操作估计也还是学不来啊这。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-19 18:03:20 | 显示全部楼层
青出于蓝 发表于 2022-7-19 17:44
角度不同而已,lz代码意思明显是循环一次打印一条,并且x定义重复,所以问题只是出现在for循环一行
至于 ...

那请问else分支是可以删掉的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-19 18:11:11 | 显示全部楼层
青出于蓝 发表于 2022-7-19 17:32
你这个for循环已经有x了,两个x变量重复了!!
这是主要问题

前辈就是想问一下如果两个x是会相互影响的吗?我的代码for x in range(1,10),进入for循环之后,x=1是不会再影响代码的吧?(我认为)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-19 20:42:31 | 显示全部楼层
赛酱想学编程 发表于 2022-7-19 18:11
前辈就是想问一下如果两个x是会相互影响的吗?我的代码for x in range(1,10),进入for循环之后,x=1是不会 ...

是呀,可是x=1就被for循环覆盖了啊.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-19 21:42:03 | 显示全部楼层
青出于蓝 发表于 2022-7-19 20:42
是呀,可是x=1就被for循环覆盖了啊.....

我想要的效果就是x=1被for覆盖哇,for循环里的x覆盖了原本的x=1,这样运行出来不才是想要的效果吗?麻烦您按我的代码看看我这描述有没有错误:
1.一开始x=1,y=0,先把x=1弄进for循环里,x在(1-10)这个循环体内进行
2.x=1在(1-10)内,执行循环,此时因为y+=1,y的值变为1,z=x*y=1,然后打印出来1*1=1
3.现在进入if,此时x==y成立,执行循环,\n进行换行,x+=1得此时x=2,y重新赋值为0,然后重新进入for循环
4.此时x=2,y=0,经过y+=1后y=1,然后与上面同理推得z=2*1=2,然后进入下面if和else那里,此时x不等于y,进入else,重新回到for循环
5.然后第三轮循环,x没有受到其他条件影响现在还是2吧,然后y又通过y+=1值增加变成2,现在不应该为2*2吗?怎么会是3*2嘞??

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

使用道具 举报

 楼主| 发表于 2022-7-19 21:44:33 | 显示全部楼层
赛酱想学编程 发表于 2022-7-19 21:42
我想要的效果就是x=1被for覆盖哇,for循环里的x覆盖了原本的x=1,这样运行出来不才是想要的效果吗?麻烦 ...

这时x=2覆盖了x=1,不才是想要的效果吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-20 06:44:08 | 显示全部楼层
赛酱想学编程 发表于 2022-7-19 18:03
那请问else分支是可以删掉的吗?

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

使用道具 举报

发表于 2022-7-20 06:46:59 | 显示全部楼层
赛酱想学编程 发表于 2022-7-19 21:42
我想要的效果就是x=1被for覆盖哇,for循环里的x覆盖了原本的x=1,这样运行出来不才是想要的效果吗?麻烦 ...

第5条,x经过第三轮循环,因为 每次循环x+1,那x肯定为3,所以打印3乘2


那这样你的错误就很明显了,只循环10次,且每次循环只打印一条乘法表,怎么可能打出45条完整乘法表呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-7-20 17:15:12 | 显示全部楼层
青出于蓝 发表于 2022-7-20 06:46
第5条,x经过第三轮循环,因为 每次循环x+1,那x肯定为3,所以打印3乘2

不是吧?第二轮for循环结束的时候x=2,y=1,然后进入if的判断,因为此时x是不等于y的,所以if是不执行的,x就不会执行x+=1,直接回到第三轮for循环,y+=1然后y=2,此时x仍=2,执行print不是x*y=2*2=4吗?(这个不才是第三轮for循环吗?这样逻辑上打印出来是2*2吧)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 10:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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