Python中的一个简单程序。涉及数字的位数

Python中的一个简单程序。涉及数字的位数,python,algorithm,Python,Algorithm,所以基本上,这个程序读取5个数字: 十、 Y,开始,跳跃,直到 用空格分隔每个数字。例如: 3 4 1 1 14 X = 3 Y = 4 1 = startFrom jump = 1 until = 14 为此,我使用了: #get X, Y, startFrom, jump, until parameters = raw_input() parametersList = parameters.split() X = int(parametersList[0

所以基本上,这个程序读取5个数字: 十、 Y,开始,跳跃,直到

用空格分隔每个数字。例如:

3 4 1 1 14
X = 3
Y = 4
1 = startFrom
jump = 1
until = 14
为此,我使用了:

    #get X, Y, startFrom, jump, until
    parameters = raw_input()

    parametersList = parameters.split()

    X = int(parametersList[0])
    Y = int(parametersList[1])
    #start from startFrom 
    startFrom = int(parametersList[2])
    #jumps of <jump>
    jump = int(parametersList[3])
    #until (and including) <until>
    until = int(parametersList[4])
另一个例子:

-4 -3 4 0 19
输出:

X and Y must be between 1 and 9
juump can't be 0
BOOZ,677,BANG,691
X and Y must be between 1 and 9
can't jump from 4 to 24
BOOZ-BANG,BOOZ,BANG,BOOZ-BANG,BANG,BANG,BANG,55,58,61,BANG
另一个:

5 3 670 7 691
0 3 4 -5 24
3 4 34 3 64
输出:

X and Y must be between 1 and 9
juump can't be 0
BOOZ,677,BANG,691
X and Y must be between 1 and 9
can't jump from 4 to 24
BOOZ-BANG,BOOZ,BANG,BOOZ-BANG,BANG,BANG,BANG,55,58,61,BANG
另一个:

5 3 670 7 691
0 3 4 -5 24
3 4 34 3 64
输出:

X and Y must be between 1 and 9
juump can't be 0
BOOZ,677,BANG,691
X and Y must be between 1 and 9
can't jump from 4 to 24
BOOZ-BANG,BOOZ,BANG,BOOZ-BANG,BANG,BANG,BANG,55,58,61,BANG
另一个:

5 3 670 7 691
0 3 4 -5 24
3 4 34 3 64
输出:

X and Y must be between 1 and 9
juump can't be 0
BOOZ,677,BANG,691
X and Y must be between 1 and 9
can't jump from 4 to 24
BOOZ-BANG,BOOZ,BANG,BOOZ-BANG,BANG,BANG,BANG,55,58,61,BANG
我的程序太乱了(我用很多ifs做了一个while循环..包括if
currentPos==直到
,所以在这一原因中它不会打印逗号(
)对于最后一个打印的项目,等等。但就像我说的,所有这些都是如此混乱,ifs的条件是如此漫长和混乱,我只是把它们全部删除,并决定在这里要求一个更好的解决方案

谢谢各位
我希望它足够清楚

我的版本没有
如果
:)

获取逗号的最简单方法是将循环移动到生成器中

def generator():
    for i in range(startfrom, until+jump, jump):
        si = str(i)
        booz = sx in str(i) or i%x == 0
        bang = sy in str(i) or i%y == 0
        yield [[si, 'BANG'],['BOOZ','BOOZ-BANG']][booz][bang]

print ",".join(generator())

样本输出

$ echo 3 4 1 1 14 | python2 boozbang.py
1,2,BOOZ,BANG,5,BOOZ,7,BANG,BOOZ,10,11,BOOZ-BANG,BOOZ,BANG
$ echo 5 3 670 7 691 | python2 boozbang.py 
BOOZ,677,BANG,691
$ echo 3 4 34 3 64 | python2 boozbang.py 
BOOZ-BANG,BOOZ,BANG,BOOZ-BANG,BANG,BANG,BANG,55,58,61,BANG
def检查条件(编号,xOrY):
返回(str中的xOrY(编号))或不返回(编号%xOrY)
定义方法(X、Y、开始、跳转、结束):
对于范围内的i(开始、结束、跳跃):
isPassX=检查条件(i,X)
isPassY=检查条件(i,Y)
如果是isPassX和isPassY:
打印“BOOZ-BANG”
elif isPassX:
打印“BOOZ”
elif isPassY:
打印“砰”
其他:
打印i
def YourMethod():
(X,Y,开始,跳跃,结束)=(3,4,1,1,14)
如果(X不在范围(1,10)内或Y不在范围(1,10)内):
打印“X和Y必须介于1和9之间”

如果我不清楚被问的问题。代码有问题吗?我看到的唯一一件事是,你的代码很乱,你想帮助清理它,但你需要发布代码来获得帮助。谢谢你的评论!我没有发布我的代码,因为(不仅是它不准确,而且大多数时候会产生不准确的结果)我知道这不是一种方法,我想看看你们会如何编写这样的代码。我有太多的“如果”什么的。。例如,对于第一部分,当我们只是检查是否可以从开始跳到<代码>直到<代码>,有很多事情需要检查,因为数字也可以是负数(如示例所示),如果这是负数,那是正数等等,我无法继续执行<代码>。。。太乱了,我都跟不上了:\天哪,你太快了。首先非常感谢!第二,该死。您使用了很多我不熟悉的东西,但在询问它们或试图搜索它们并理解它们之前,我尝试运行代码并测试它,但失败了——对于我的第一个示例,它会产生错误的结果,对于某些结果,它甚至返回一个error@user2997196,不知道为什么它不适合你。你能详细说明一下吗?我的错误消息不同,因为我让它抛出内置异常。带有负阶跃的没有任何输出,但您应该能够解决该问题是的,我一定是弄错了什么,它现在正在工作,但在需要时不会产生错误消息,而且对于某些示例,它会产生Pythonic错误消息,例如,
-4-34019
我得到:
回溯(最后一次调用):文件“D:\python\booz.py”,第3行,在x=“0123456789”中。index(sx)ValueError:substring not found
我将检查一下这段代码,希望在你们的帮助下试着理解它,这样我也可以相应地修复它并修改它(我是python D:新手)与我所做的有什么区别:
sx,sy,sstartfrom,sjump,suntil=parameters.split()
parametersList=parameters.split()X=int(parametersList[0])Y=int(parametersList[1])#从startFrom=int(parametersList[2])开始跳到(包括)直到=int(参数列表[4])
除了更短之外?@user2997196,为了方便起见,我保留了所有变量的str版本,尽管我后来只使用了
sx
sy
。非常感谢你的回答和你的努力,但很遗憾,我一次只能理解一个代码,所以我不想无缘无故地打扰你,所以我只是在尝试为了再次理解gnibbler的感谢,我真的很感激,我不希望你的帖子被忽视!