Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python循环中生成具有特定编号的编号_Python_Loops - Fatal编程技术网

在python循环中生成具有特定编号的编号

在python循环中生成具有特定编号的编号,python,loops,Python,Loops,在python中生成时,我想将arg1添加到一系列数字中: for arg in sys.argv[1]: for i in xrange(0,200000): print "%s%05d"%(arg, i) 但这不起作用 我想要argv[1]只是一个数字 例如: python script.py 012345 01234500000 01234500001 01234500002 . . . 下面的代码应该可以做到这一点。sys.argv[1]包含字符串值“1234

在python中生成时,我想将
arg1
添加到一系列数字中:

for arg in sys.argv[1]:
    for i in xrange(0,200000):
        print "%s%05d"%(arg, i)
但这不起作用

我想要
argv[1]
只是一个数字

例如:

python script.py 012345
01234500000
01234500001
01234500002
.
.
.

下面的代码应该可以做到这一点。sys.argv[1]包含字符串值“123456”,第一个for循环迭代字符串的不同部分

def isint(s):
    try: 
        int(s)
        return True
    except ValueError:
        return False

arg = sys.argv[1]
if isint(arg):
    for i in xrange(0,200000):
        print "%s%05d"%(arg, i)

检查argv长度是一种很好的做法

编辑

我修改了解决方案,只允许数值参数,但保留前导零

if len(sys.argv) == 2 and str(sys.argv[1]).isdigit():
    for i in xrange(0,200000):
        print "%s%05d"%(str(sys.argv[1]), i)
elif len(sys.argv) == 2 and not str(sys.argv[1]).isdigit():
    print ("Given argument must be digit!")
else:
    print ("Wrong number of arguments")

您可以使用try/except块来确保参数既存在又是有效的整数,然后从那里继续

import sys

try:
    base = int(sys.argv[1])
# Handle where argument is not present or not an integer
# Either exit, set a default value or whatever
except (ValueError, IndexError):
    raise SystemExit('must supply an integer value as first argument')

# Do whatever
N = 20
for num in xrange(N):
    print '{0:05}{1:05}'.format(base, num)
  • 当我们接受
    string
    作为
    number
    时,如果用户给出错误的输入字符串(例如0112eweee),则执行
    类型转换
    string
    int
    ,并处理
    异常
  • 如果我们希望输出为
    字符串
    ,并且不希望从字符串(开始)中剥离
    0
    ,则使用
    字符串格式
    方法
  • 如果我们想要在
    int
    中输出,那么使用数学过程来创建数字。函数
    addByMath()
    执行数学运算
  • 代码:

    import sys
    def addByMaths(arg):
        arg *= 100000
        print "=========Maths========"
        for i in xrange(0,10):
            print arg+i
    
    def appendByString(arg):
        print "=========String========"
        tmp = arg+"%05d"
        for i in xrange(0,10):
            print tmp%(i)
    try:
        arg_o = sys.argv[1]
        arg_i = int(arg_o)
        #- Add according to maths.
        addByMaths(arg_i)
        #- Append by String method 
        appendByString(arg_o)
    except:
        print "Invalid input."
    
    输出:

    python test.py 01
    =========Maths========
    100000
    100001
    100002
    100003
    100004
    100005
    100006
    100007
    100008
    100009
    =========String========
    0100000
    0100001
    0100002
    0100003
    0100004
    0100005
    0100006
    0100007
    0100008
    0100009
    

    如果
    argv[1]
    只是一个数字,您将如何迭代它。因为在python中,迭代只能在序列上进行。整数不是序列。你的问题不清楚:第一个参数应该是范围的偏移量吗?@Evert请看我的问题被更新了<代码>argv[1]可以以
    0开头,也可以不以
    0开头。。。但关键是sys.argv[1]必须是唯一的数字,但您想将其添加到
    i
    ,还是想附加到(字符串版本的)
    i
    ?您的第一句话是“我想添加…”,但您的代码显示“追加”。原因是如果是前者,您的代码可能会非常不同。@Evert。。。我想追加我的意思是///那么我如何才能得到我想要的输出…我只想要数字..但是当我使用以
    0
    开头的数字时,它不会显示我,因为int类型…如果我使用str。。。所以,如果我说
    0123dd
    为arg 1,它也会为我生成结果…这不是我想要的谢谢你。。。回答得很好,但当我设置0123456。。它不会在结果中打印
    0
    。如果用户字符串值为
    “012345”
    ,并且您不想剥离
    0
    ,则不要将
    字符串
    值转换为
    整数
    值。就像
    arg=sys.argv[1]
    @Vivek Sable好的..但是你看我可以说
    0123dd
    ,脚本工作正常。。。我只想接受这个号码是的,对。很好使用类型转换。如果您接受的是数字串。但最后的代码是打印字符串。它有一个问题。。。当我说
    0123dd
    as sys.argv[1]时,它正在工作。。。但我不想要它@Duncanuse int(sys.argv[1])表示整数否..我只想得到数字您的输入是固定长度的吗?如果是这样,您也可以填充它,打印“%05d%05d”%(int(sys.argv[1]),i)请查看更新的答案,它应该足够了。