gpt4 book ai didi

Python:为什么这个元组打印结果和 "None"?另外:有没有更好的方法来实现结果?

转载 作者:行者123 更新时间:2023-12-01 05:40:06 26 4
gpt4 key购买 nike

我需要计算给定的数字,这些数字可以包含多少个“五”、“二”和“一”。抱歉,我的英语对于这种解释有点有限:)也许举个例子更好:

练习:打印邮票(8)结果应为:(1, 1, 1)(一张 5p 邮票、一张 2p 邮票和一张 1p 邮票)

我已经找到了实现这一目标的方法,但是 tuple() 正在打印结果和“无”,我不知道为什么。我还想知道是否有更好、更短的方法来获得正确的结果。

这就是我所做的:

def stamps(dinero):
p5=dinero/5
p5a=p5*5
resultado1=dinero-p5a
dinero=resultado1
p2=dinero/2
p2a=p2*2
resultado2=dinero-p2a
dinero=resultado2
p1=dinero/1
p1a=p1*1
resultado3=dinero-p1a
dinero=resultado3
print tuple([p5,p2,p1])

我得到的结果是:print stamps(8)(1, 1, 1)无

更新: I´ve found a better solution ,我将其发布在这里,以防万一有人想知道更好的解决方案:

def stamps(n):
#Basically, thats the same as return n/5, n%5/2, n%5%2
return n/5, (n-5*(n/5))/2, (n-5*(n/5))-2*((n-5*(n/5))/2)

最佳答案

正如人们所说,您可以将打印更改为返回,但是对代码的重大改进是使用 % (或模)运算符。

def stamps(dinero):
p5=dinero/5
dinero=dinero%5
p2=dinero/2
dinero=dinero%2
p1=dinero/1
return tuple([p5,p2,p1])

print stamps(8)
>>> (1,1,1)

在您的代码中这一行:

p5=dinero/5

进行整数除法,下面通过将原数与除数的倍数相乘并减去它来得到余数:

p5a=p5*5
resultado1=dinero-p5a
dinero=resultado1

大多数语言都提供modulo function只需一步即可执行此操作:

dinero=dinero%5

这对于除以 3 的部分是相同的,而当除以 1 时,永远不会有整数余数,因此您可以完全删除该代码。

Python 还有一种方法可以使用 divmod() 再次缩短它它返回除数和模数:

def stamps(dinero):
p5,dinero=divmod(dinero,5)
p2,dinero=divmod(dinero,2)
p1=dinero
return tuple([p5,p2,p1])

print stamps(8)
>>> (1,1,1)

最后,您可以通过让另一个函数同时获取金额和邮票值数组并调用它来完全通用化它:

def stamps(dinero):
return allStamps(dinero,[5,2,1])

def allStamps(dinero=1,stamps=[]):
vals = []
for stamp in sorted(list(set(stamps)), reverse=True):
val,dinero=divmod(dinero,stamp)
vals.append(val)
return tuple(vals)

print stamps(8)
>>> (1,1,1)
print allStamps(8,[5,3,1])
>>> (1,1,0)

关于代码执行速度:

我运行了 timeit在某些选项上,对 /% 的调用甚至比对 divmod() 的单个调用还要快:

> python -m timeit 'a=1000;b=a/5;c=b*5;d=a-c;a=d'
10000000 loops, best of 3: 0.156 usec per loop
> python -m timeit 'a=1000;b=a/5;a=a-b*5;'
10000000 loops, best of 3: 0.127 usec per loop
> python -m timeit 'a=1000;a=a-(a/5)*5;'
10000000 loops, best of 3: 0.121 usec per loop
> python -m timeit 'a=1000/13;b=1000%13;'
10000000 loops, best of 3: 0.0755 usec per loop
root@meteordev:~# python -m timeit 'a,b=divmod(1000,13);'
10000000 loops, best of 3: 0.183 usec per loop

关于Python:为什么这个元组打印结果和 "None"?另外:有没有更好的方法来实现结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17778626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com