Questions tagged «python»

这个挑战与Python语言有关。请注意,通常不建议要求答案使用特定语言的挑战。

4
抽象语法树高尔夫:FizzBu​​zz,Python
摘要 用最少的令牌在Python中实现FizzBu​​zz。 挑战 编写一个打印十进制数字(从1到100)的程序。但是,对于三倍打印“ Fizz”而不是数字,对于五倍打印“ Buzz”。对于三和五的倍数的数字,请打印“ FizzBu​​zz”。程序必须使用某些版本的Python编写。 有关更多详细信息,请参见1,2,Fizz,4,Buzz 计分 您的分数将等于此程序针对Python 3或该程序针对Python 2报告的代码抽象语法树中的节点数。要运行程序,请提供代码的文件名作为程序的命令行参数。例如: python simple_counter.py fizzbuzz.py 这些程序基于Python的ast模块。如果您有任何困难,请告诉我。 为避免琐碎的解决方案,例如用实际程序执行长字符串或对输出进行硬编码,还有一些其他限制: 您的代码中的令牌不得超过15个字符。以上程序将为您检查此要求。注意,为了易于实施,上述程序将注释计为标记。 代码执行/评估被禁止。 如果您对是否允许某些物品有疑问,请问我。 计分启发法 以下规则通常足以计算程序的分数: 语句块是1分:if,for ... in ...,while,else,等。 独立语句是1点:print在Python 2, break,pass等。 变量是2分 单令牌面值为1点:2131,"Hello, world!",True 函数是3点(使用变量需要2点,额外需要1点):print在Python 3中range,等等。 运营商有2点:+,*,%,and,not,等。 = 是1分 增量赋值为二点:+=,|=,等。 括号,缩进等为0点。 与赋值或表达式相反,包含表达式的行为+ 1点。 完全有代码是1点。 挑战: 最低分获胜。祝好运!

12
最小的python脚本,可打印偶数0到100
我正在研究一个让自己很有趣的问题,即创建一个Python脚本,该脚本打印从0到100的偶数。挑战是使脚本尽可能小。这是我到目前为止所拥有的: for x in range(0, 101): if (x % 2 == 0): print x 当前是60个字节。谁能想到缩小尺寸的方法? 编辑:print(*range(2,101,2),sep='\n')这是30个字节。较小吗?
11 code-golf  tips  python 

9
白象交换
现在是七月的圣诞节,所以有什么比虚拟的白象礼物交换更好的庆祝方式! 对于这次的“山丘之王”挑战,您必须创建一个在“白象”交流模拟中发挥作用的机器人,力争获得最高价值的礼物。 游戏规则 游戏将进行很多回合,每个回合由不同的回合数组成。 回合设置:游戏中会出现与玩家人数一样多的礼物,每个礼物在[0 ... 1)范围内均一地随机赋值,直到“打开”礼物时该值才是未知的。玩家将被随机排列在队列中。第一个玩家将从队列的前面弹出。 轮到一个玩家时,他们可以打开礼物或偷走另一个玩家的礼物,然后将回合传递给被盗礼物的玩家。 每个礼物最多可被盗3次。 您不能从刚刚从您身上偷走的玩家那里窃取钱财。 每个玩家一次只能有一个礼物。 打开礼物后,播放前进到从队列前面弹出的下一个播放器。这将是下一个尚未转牌的玩家。 回合结束:打开所有礼物后,回合结束,每个玩家持有的礼物的价值将添加到该玩家的分数中。新一轮比赛开始,每个玩家现在都没有礼物,而玩家的顺序也被打乱了。 游戏结束:当至少一名玩家获得100 500分时,游戏将结束,并以最高总礼物价值授予该玩家胜利。 编码 所有提交都应与Python 3.7兼容。您必须编写一个直接继承自的类WhiteElephantBot。例如: class FooBot(WhiteElephantBot): # Your implementation here 您可以在bot类中提供必须调用的__init__方法(采用一个参数name)super().__init__(name)。您的类必须具有take_turn按以下顺序期望以下参数的方法: players:依次列出所有尚没有礼物的球员的球员名称。 presents:将玩家名称映射到2元组的字典,其中包含该玩家所拥有的当前值以及当前被盗的次数。这仅包括当前持有礼物的其他玩家。 just_stole:如果最后采取的动作是抢断,这将是刚偷走的玩家的名字。如果不是,它将为None。 每个参数都是不可变的,也可以是新的对象,因此,对它们进行任何更改都不会影响游戏。如果您愿意,可以保留任何参数的副本。 的示例值presents: { 'Alice': (0.35, 0), 'Bob': (0.81, 2), 'Charlie': (0.57, 1) } 您的take_turn方法应返回您想从中窃取或None打开礼物的玩家的名字。如果引发异常,返回str或以外的值None,或者返回您不能从中窃取的玩家的姓名,则默认情况下将打开礼物。 您的构造函数将在每个回合开始时被调用,因此您不会记​​住每个回合的状态。 通过继承自WhiteElephantBot,您将可以访问一种steal_targets方法,该方法将使用present dict just_stole并返回可以从中窃取的玩家的姓名列表。 您脚本所需的任何模块都必须在条目顶部导入。 测试驱动 可以在这里找到测试驱动程序。您无需from white_elephant …

2
骆驼杯:AI棋盘比赛
骆驼杯2k18 在这个挑战中,我们将玩半受欢迎的桌游Camel Up。 骆驼起来!是一种棋盘游戏,有玩家押注骆驼以赢得回合,赢得游戏或输掉游戏,设置陷阱以影响移动或移动骆驼。这些决定中的每一个都会奖励您获得一些钱的机会,这才是决定赢家的原因。玩家应使用概率,游戏状态考虑因素和对手的租约来做出决定。这是一个简短的视频,向玩家展示如何玩。 怎么玩 这是玩法的粗略构想。观看其中一部视频可能会更有帮助,因为它们具有视觉效果:) 轮到您有4个选择。 移动骆驼。这会从尚未移动的人中选取骆驼,并在1-3个空格之间移动。您会得到1个硬币。当所有五个骆驼都移动时,回合结束,然后它们就可以全部移动 放置一个陷阱。这会一直持续到董事会结束。您选择+ 1 / -1陷阱。如果骆驼或骆驼叠落在上面,它们会移动+ 1 / -1,您会得到一个硬币。您不能在正方形0上放置陷阱。可以将陷阱放置在骆驼所在的位置,尽管它只会影响落在其后的骆驼。 回合赢家投注。您下注一个回合赢家。他们赢了您会得到5/3/2/1,具体取决于您是该骆驼的第一/第二/第三。 游戏赢家/输家。您押注谁将在比赛结束时排在第一或最后。根据您是否是1st / 2nd / 3rd / etc赌那只骆驼,您会得到8/5/3/1/1(我认为) 笔记: 有5只骆驼。它们从0-2随机开始。 当骆驼移动时(参见上面的触发方式),它们移动1-3格。如果将它们与另一个骆驼放在一个正方形上,则将它们放在另一个骆驼的“顶部”,从而创建一个骆驼堆栈。如果要移动骆驼,它将所有骆驼移动到骆驼堆栈上。栈顶的骆驼被认为是领先 如果您落在+1陷阱上(请参见上文,触发此陷阱),您将向前移动一格。适用标准堆叠规则。 但是,如果您遇到-1陷阱,则会向后移动一个方块。你去下,是在该广场上,如果任何骆驼的堆栈。 骆驼碰到正方形16时游戏结束。这立即调用回合结束和游戏结束触发器 每个骆驼只能进行一次获胜/失败者下注。也就是说,您不能押注骆驼来赢得或输掉比赛 挑战 在此挑战中,您将编写一个Python 3程序来扮演四人游戏,获胜者将赢得Camel Up的所有荣耀游戏 您的程序将收到gamestate,其中包含: camel_track:骆驼的位置 trap_track:陷阱的位置(格式为[trap_type(-1,1),播放器]的条目) player_has_placed_trap:一个数组,告诉您玩家是否在本回合放置了陷阱 round_bets:本轮下注的数组。形式为[骆驼,玩家] game_winner_bets / game_loser_bets:玩家为骆驼赢得或输掉游戏而进行的一系列下注。您将只能看到下注的玩家的价值,而不是下注的玩家的价值。您可以知道您的赌注。#形式[骆驼,玩家] player_game_bets:game_winner_bets / game_loser_bets的另一种表示形式。同样,仅查看您的机器人所下的赌注。 player_money_values:一个数组,显示每个玩家的钱数。 camel_yet_to_move:一个数组,显示骆驼是否已移动到这一轮。 除了游戏状态外,您还可以获得: 玩家:一个整数,告诉您您是哪个玩家号码(0-3)。 玩家应该返回的语法是: …

2
使用numpy,scipy或pylab打高尔夫球的技巧
还有已经为Python技巧的完整列表在这里,所以我要问的是专门适用于使用技巧numpy,scipy或pylab库。 这些既可以是已经使用缩短代码的方法,也可以是numpy通过使用这些库缩短常用python操作的方法。 请给每个答案一个提示。
10 code-golf  tips  python 

1
最短的python A + B程序,带有输入和输出
你们当中有些人可能会说我在浪费时间,但是这项任务并没有给我带来500天以上的和平。需要使用Python 3.x编写一个程序,该程序将两个数字作为输入并显示其总和。数字以以下格式给出: a b 一些示例测试用例: 100 500 -> 600 3 4 -> 7 代码长度通过公式max(没有空格,制表符或换行符的代码长度,代码长度/ 4)计算得出。我只知道2个解决方案,每个解决方案都有36个字符的长度: print(sum(map(int, input().split()))) 和: print(eval(input().replace(' ', '+'))) 我也知道,存在的解决方案的长度为34个符号。您可以在此网站上进行检查。
10 code-golf  tips  python 

1
如何在f(item)最小的列表中找到该项目?
我有一个清单l和一个函数f。f不是严格增加或减少。如何在列表中找到f(item)最小的项目?例如,假设列表为: l = [1, 2, 3, 4] 并且list(f(x)for x in l)是: [2, 9, 0, 3] f(3)小于其他任何一个的f,因此应打印“ 3”。最简单的方法是什么?我最初尝试: min(f(x) for x in l) 但是,这0不能3。如果我是为了提高可读性而不是为了简洁起见,我会这样做: index = 0 smallest = f(l[0]) for i in range(len(l)): value = f(l[i]) if value < smallest: smallest = value index = i 很好,但是对于代码高尔夫球来说太可怕了。即使打了高尔夫球 i,s=0,f(l[0]) for x …
10 code-golf  tips  python 

7
非幂等Python
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 4年前关闭。 编写几行Python代码,X其中没有引用任何全局变量,例如 def method(): X print(a) method() 打印1但 def method(): X X print(a) method() 版画2。 所以,我讨厌被坚持己见,但看起来vars和locals实际上是在Python全局变量: def test_global_1(): global vars, locals vars = lambda: 2 locals = lambda: 3 def test_global_2(): print(vars()) print(locals()) test_global_1() test_global_2() 同样,人们似乎希望看到像这样的难题的客观获胜标准。代码长度在这里并不真正合适,所以也许我们可以为代码的各种新颖功能建立一个布朗尼积分系统?我不确定这些可能是什么,但这是一个开始: +1代表真正没有全局变量(否vars或locals) +1是第一个发布特定技术的人 +1为发布的最短解决方案 +1为仅涉及一条Python语句的解决方案 +1有趣的“ hacks”,例如加入词法非边界 +1不使用例外 …

2
Python:交错插入两个列表中项目的最短方法
我正在尝试以最短的方式(可能的字符)获得清单3。 清单1和清单2已作为参数提供给我,并且长度相同。 l1 = [1, 2, 3, 4, 5] l2 = ['a', 'b', 'c', 'd', 'e'] 清单3应该看起来像(是的,它必须是一个清单): l3 = ['a', 1, 'b', 2, 'c', 3, 'd', 4, 'e', 5]

1
Python 3-尝试打高尔夫球我的作业
注意:这并不是打高尔夫球的挑战;因此,更需要打高尔夫球的建议。 最近,我为我的Web开发类分配了Python作业,以检查是否可以编码。由于我已经对Python感到很自在,因此我决定尝试打高尔夫球,并且我想知道人们是否可以指出我错过的事情。 我已经知道某些地方有多余的空格,但是我对概念性的东西更感兴趣,例如使用while r:r为变量时,然后等待其“耗尽”! 那作业 import random from collections import Counter s=l='' c=['yellow','blue','white','green','Black', 'purple', 'silver', 'cyan', 'magenta', 'red'] n=[10,15,1,10,6,15,10,25,1,12,5,10,4,6,5,12,0,10,1,1] o=i=0 for y in c:l+=y[0]*(random.randint(n[o],n[o+1]));o+=2 l=list(l) print("Welcome to the CIMS Gumball Machine Simulator\nYou are starting with the following gumballs:") for b in c:print(str(l.count(b[0])) + " "+b);random.shuffle(l) print("Here are your random purchases:") …

3
部分可观察的Connect-4
游戏 您将玩(几乎)Connect-4的标准游戏。不幸的是,这是一个对应游戏,有人从底部开始在第二行上放了黑色胶带,因此您在这些行中看不到对手的任何举动。 在已经满满的栏中进行的任何移动都将视为您的回合,如果游戏进行的时间超过6 * 7回合,则将其视为平局。 挑战规格 您的程序应实现为Python 3函数。第一个参数是棋盘的“视图”,代表已知棋盘的状态,是从下到上的2D行列表,其中1第一个玩家2移动,第二个玩家移动,0空位置或隐藏被你的对手移动。 第二个参数是从索引的转码0,其奇偶性告诉您您是哪个玩家。 最后一个参数是任意状态,初始化为None每个游戏开始时的状态,您可以使用该状态来保留回合之间的状态。 您应该返回要播放的列索引的2元组,并在下一轮返回新状态。 计分 胜利计为+1,平局计为,0损失计为-1。您的目标是在循环锦标赛中获得最高的平均分数。我会尝试根据需要进行尽可能多的比赛,以确定明确的获胜者。 规则 任何竞争者一次最多只能拥有一个竞争机器人,但是如果您进行了改进,可以更新您的参赛作品。请尝试将您的漫游器限制为每转大约1秒的思考时间。 测试中 这是控制器的源代码,以及一些非竞争性示例bot供参考: import itertools import random def get_strides(board, i, j): yield ((i, k) for k in range(j + 1, 7)) yield ((i, k) for k in range(j - 1, -1, -1)) yield ((k, j) for …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.