我已经编写了这段代码,以使其生成4个随机整数(范围为1-6),然后删除最小的数字并将其添加到返回的列表中。
我在阅读,发现列表推导是更“ pythonic”的解决方案,而不是较小的范围循环。我想知道如何以列表理解的方式编写此代码,对您的帮助将不胜感激。
stats = []
for stat in range(6):
score = [random.randint(1, 6) for n in range(4)]
score.remove(min(score))
stats.append(sum(score))
return stats
答案 0 :(得分:0)
在Python 3.7或更低版本中,您可以使用列表推导和生成器表达式的以下组合来做到这一点:
stats = [sum(score := [random.randint(1, 6) for n in range(4)]) - min(score) for stat in range(6)]
在Python 3.8(仍处于beta版)中,借助新的walrus
赋值运算符,您可以以更简单的方式实现它:
<=
您可以here试试。
测试两种方法:
import random
random.seed(1)
stats = [sum(score) - min(score) for score in ([random.randint(1, 6) for n in range(4)] for stat in range(6))]
print(stats)
Python 3.7):[10, 12, 12, 12, 15, 14]
输出:
import random
random.seed(1)
stats = [sum(score := [random.randint(1, 6) for n in range(4)]) - min(score) for stat in range(6)]
print(stats)
[10, 12, 12, 12, 15, 14]
输出:
0
答案 1 :(得分:0)
这是我的尝试:
我定义了一个在使用列表推导之前生成得分的函数。
def old_macdonald(name):
firstLetter = name[0].capitalize()
fourthLetter = name[3].capitalize()
inBetween = name[1:3]
last = name[4:]
newName = firstLetter + inBetween + fourthLetter + last
if len(newName) < 4:
print("name is too short.")
else:
print(newName)
old_macdonald("mac")
答案 2 :(得分:-1)
尝试一下:
from random import randint
[min([randint(1, 6) for _ in range(4)]) for _ in range(6)]
但是,这变得有些复杂且难以阅读,因此也许不是最佳解决方案。