有没有办法将这个 'while' 循环转换为 python 中的 'for' 循环?
Is there a way to translate this 'while' loop into a 'for' loop in python?
我有一个十进制到任意基数的转换器,如下所示:
import string
digs = string.digits + string.ascii_letters
def int2base(x, base):
if x < 0:
sign = -1
elif x == 0:
return digs[0]
else:
sign = 1
x *= sign
digits = []
while x:
digits.append(digs[x % base])
x = x // base
if sign < 0:
digits.append('-')
digits.reverse()
return ''.join(digits)
print(int2base(51363,64))
... 我想用 for
循环替换这里的 while
循环,但我已经尝试过但没有成功。
感谢帮助(•‿•)
对愚蠢问题的愚蠢回答:-)
而不是
while x:
你可以这样做:
for _ in iter(lambda: x, 0):
感谢 Pychopath 的回答:
i2b = lambda x,base,res=0:[[(x<0and[sign:=-1])or(x>0and[sign:=1])or(x==0and[res:=digs[0]])]and res][0]or[x:=x*sign,digits:=[]]and([[digits.append(digs[x%base]),x:=x//base]for _ in iter(lambda:x,0)])and[digits.append('-') if sign<0 else 0]and(res:=''.join(digits[::-1]))
我有一个十进制到任意基数的转换器,如下所示:
import string
digs = string.digits + string.ascii_letters
def int2base(x, base):
if x < 0:
sign = -1
elif x == 0:
return digs[0]
else:
sign = 1
x *= sign
digits = []
while x:
digits.append(digs[x % base])
x = x // base
if sign < 0:
digits.append('-')
digits.reverse()
return ''.join(digits)
print(int2base(51363,64))
... 我想用 for
循环替换这里的 while
循环,但我已经尝试过但没有成功。
感谢帮助(•‿•)
对愚蠢问题的愚蠢回答:-)
而不是
while x:
你可以这样做:
for _ in iter(lambda: x, 0):
感谢 Pychopath 的回答:
i2b = lambda x,base,res=0:[[(x<0and[sign:=-1])or(x>0and[sign:=1])or(x==0and[res:=digs[0]])]and res][0]or[x:=x*sign,digits:=[]]and([[digits.append(digs[x%base]),x:=x//base]for _ in iter(lambda:x,0)])and[digits.append('-') if sign<0 else 0]and(res:=''.join(digits[::-1]))