这就是问题:
使用调试工具IDLE Debugger来纠正a中的逻辑错误 Python程序。该程序应该生成一行行的模式 偶数列中的星号和奇数列中的美元,数字 行和列的输入由用户输入。预期的输出是:
那么错误在哪里?我无法弄清楚逻辑错误。 代码是:
row = col = int(input("Enter number of row and column: "))
for row in range(row):
for col in range(col):
if row % 2 == 0 and col % 2 == 1:
print('*', end='')
elif row % 2 == 1 and col % 2 == 0:
print('$', end='')
else:
print(' ', end='')
print()
答案 0 :(得分:1)
您可以使用col和row作为循环步骤的输入和变量。
由于range
(和您的算法)基于零,因此在第一次运行内for
之后,col
的值将比原始所需输入小1。等等。
这将有效:
rows = columns = int(input("Enter number of row and column: "))
for row in range(rows):
for col in range(columns):
if row % 2 == 0 and col % 2 == 1:
print('*', end='')
elif row % 2 == 1 and col % 2 == 0:
print('$', end='')
else:
print(' ', end='')
print()
在python中,循环变量在循环运行的范围内定义,而不是在循环的内部范围内定义。所以他们都跑了过来。先前定义的变量并在循环结束后保持定义。
答案 1 :(得分:1)
您应该将用户输入的数字存储在与您用于迭代的变量不同的变量中。 这很有效:
num = int(input("Enter number of row and column: "))
for row in range(num):
for col in range(num):
if row % 2 == 0 and col % 2 == 1:
print('*', end='')
elif row % 2 == 1 and col % 2 == 0:
print('$', end='')
else:
print(' ', end='')
print()
答案 2 :(得分:0)
作为一般规则:太多的逻辑条件会导致调试困难,并且太多的划分会导致代码速度变慢(每个循环执行一次除法操作最多4次!)并且for
循环嵌套,所以你和#39; ve平方所需的迭代次数。
在循环开始之前尽可能多地设置逻辑,这简化了事情。
rows = cols = int(input("Enter number of row and column: "))
isAsterix = True
extraColumns = cols % 2 # 1 if odd; 0 otherwise
numDoubleColumns = int(cols / 2) # rounds down
for _ in range(rows):
if isAsterix:
bigCol = ' *' # will be multiplied up to column full width
pad = ' ' # used if odd number of columns
else:
bigCol = '$ ' # will be multiplied up to column full width
pad = '$' # used if odd number of columns
# yes you can multiply and add strings together...
print(bigCol*numDoubleColumns + pad*extraColumns)
isAsterix = not isAsterix # print the other symbol next time
我很欣赏这个例子,速度提升可以忽略不计,但要记住可以删除for
循环的方法仍然是好的做法。简化if
陈述绝对不错。