代码求助
想写个乘法表,写了一段代码,运行不出乘法表的效果,想了好久都没想出来哪里出问题了。代码如下: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 16:54 编辑
x经for循环+1为3
故显示 3*2
continue只能避免执行下面的代码,无法跳过for循环
建议通过两个for循环实现
欢迎追问~ 本帖最后由 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:\\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:\\Python> for x in range(1,10):
for y in range(1,x+1):
print(x,'*',y,'=',x*y,end='')
print('\n')
逻辑有点问题... 青出于蓝 发表于 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语句吗???想问一下con{:10_250:}tinue避免执行是怎么理解应该?还不是太明白! 本帖最后由 青出于蓝 于 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 本帖最后由 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 那它就是一条多余的语句。因为,即使没有这条语句,也会立即返回循环头部。 赛酱想学编程 发表于 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次
正确代码看楼上
如果问题已解决
请及时设置最佳答案 jackz007 发表于 2022-7-19 17:31
如果一个循环块内的最后一条语句是 continue 那它就是一条多余的语句。
那这样的话不就应该不执行吗而回到for循环吗?回到for循环之后也会按乘法表走吧?{:10_250:} 本帖最后由 jackz007 于 2022-7-19 17:36 编辑
赛酱想学编程 发表于 2022-7-19 17:32
那这样的话不就应该不执行吗而回到for循环吗?回到for循环之后也会按乘法表走吧?
什么叫"按乘法表走",一切按循环走!
你应该尝试理解正确有效的代码,你自己的代码逻辑复杂混乱,应该直接放弃! jackz007 发表于 2022-7-19 17:34
什么叫"按乘法表走",一切按循环走!
你应该尝试理解正确有效的代码,你自己的代码 ...
角度不同而已,lz代码意思明显是循环一次打印一条,并且x定义重复,所以问题只是出现在for循环一行
至于else分支,全当pass,不影响 jackz007 发表于 2022-7-19 17:34
什么叫"按乘法表走",一切按循环走!
你应该尝试理解正确有效的代码,你自己的代码 ...
那请教一下应该怎么学呢?我一个刚入门的萌新,您让我写出非常有逻辑的代码我确实是实力有限写不出来。但是您让我光看别人写的代码我能推敲出执行效果,但是自己上手确实是写不出来。。我光看别人的代码不上手操作估计也还是学不来啊这。 青出于蓝 发表于 2022-7-19 17:44
角度不同而已,lz代码意思明显是循环一次打印一条,并且x定义重复,所以问题只是出现在for循环一行
至于 ...
那请问else分支是可以删掉的吗? 青出于蓝 发表于 2022-7-19 17:32
你这个for循环已经有x了,两个x变量重复了!!
这是主要问题
前辈就是想问一下如果两个x是会相互影响的吗?我的代码for x in range(1,10),进入for循环之后,x=1是不会再影响代码的吧?(我认为) 赛酱想学编程 发表于 2022-7-19 18:11
前辈就是想问一下如果两个x是会相互影响的吗?我的代码for x in range(1,10),进入for循环之后,x=1是不会 ...
是呀,可是x=1就被for循环覆盖了啊..... 青出于蓝 发表于 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嘞??
麻烦您了! 赛酱想学编程 发表于 2022-7-19 21:42
我想要的效果就是x=1被for覆盖哇,for循环里的x覆盖了原本的x=1,这样运行出来不才是想要的效果吗?麻烦 ...
这时x=2覆盖了x=1,不才是想要的效果吗?? 赛酱想学编程 发表于 2022-7-19 18:03
那请问else分支是可以删掉的吗?
是的 赛酱想学编程 发表于 2022-7-19 21:42
我想要的效果就是x=1被for覆盖哇,for循环里的x覆盖了原本的x=1,这样运行出来不才是想要的效果吗?麻烦 ...
第5条,x经过第三轮循环,因为 每次循环x+1,那x肯定为3,所以打印3乘2
那这样你的错误就很明显了,只循环10次,且每次循环只打印一条乘法表,怎么可能打出45条完整乘法表呢? 青出于蓝 发表于 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吧)
页:
[1]
2