Примечание: это не такая сложная игра в гольф; это больше так просить предложения по игре в гольф.
Недавно у меня было задание 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:")
while 'r' in l:
random.shuffle(l); r=l.pop(); s+=r
for j in c:
if j[0] == r:print(j.capitalize())
print("You purchased %i gumballs, for a total of $%.2f \nMost common gumball(s):" % (len(s),len(s)*25/100))
a=Counter(s).most_common()
m=[x[1] for x in a]
while m[0] == m[i]:
for j in c:
if j[0] == a[i][0]:print(j.capitalize(), end=" ")
if(i<(len(m)-1)):i+=1
else:break
Также: извините, если этот вопрос не подходит для страницы кода гольфа, так как это не проблема, и удалит его по запросу.
print
, но только для проверки)Ответы:
Вот целая куча микрооптимизаций, которые вы можете сделать:
Используйте
.split()
для создания длинного списка (-17 байт):Удалить посторонние скобки (-2 байта):
Используйте сплат (-2 байта):
Используйте расширенную повторяемую распаковку, чтобы превратить что-то в список (-4 байта):
Импортировать все вещи (-15 байт):
Используйте другие функции, которые могут выполнять ту же работу здесь (-5 * 2 = -10 байт):
print
по умолчанию разделяется пробелом (-11 байт):Больше распаковки (-3 байта):
Побочные эффекты злоупотребления (-1 байт, плюс отступы):
Все, что используется повторно и более 5 символов, возможно, стоит сохранить как переменную (-1 байт):
Упростить дроби (-5 байт):
Одинарное злоупотребление (-4 байта):
Или самый большой из всех ...
Посмотрите на ваш алгоритм и посмотрите, нужно ли вообще его менять
(Если вам когда-нибудь придется импортировать
Counter
код-гольф, вы, вероятно, делаете что-то очень неправильное ...)источник
.title()
путем докапитализации всего. Также присвойтеs.count
переменную.