Python 3-시도한 내 골프 연습


9

참고 : 이것은 골프 도전만큼 크지 않습니다. 더 골프 제안을 요구하고 있습니다.

최근에 코딩 할 수 있는지 확인하기 위해 웹 개발 클래스에 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

또한 : 이것은 골프 골프 페이지에 대한 적절한 질문이 아닌 경우 미안합니다. 왜냐하면 도전이 아니며 요청시 제거 할 것입니다.


주제에 관한 문제를 제쳐두고 (확실하지 않기 때문에) Python 골프 팁 페이지를 살펴보십시오 . 또한 어떤 파이썬 버전입니까? (나는 주변의 괄호로 인해 3을 가정 print하고 있지만 확인
— 만한다

5
당신은 아직 골프를 시도 했습니까?
— feersum

2
이 코드에는 간단한 골프 개선이 많이 남아 있습니다. 골프 팁을 검토하고 다른 Python 골프를 살펴보고 코드를 직접 줄이려면 더 많이 배우는 것이 좋습니다. 그런 다음 얻은 내용을 게시하면 사람들이 더 통찰력있는 조언을 줄 수 있습니다.
— xnor

답변:


20

수행 할 수있는 마이크로 최적화는 다음과 같습니다.

.split()긴 목록 (-17 바이트)을 작성하는 데 사용하십시오 .

c=['yellow','blue','white','green','Black', 'purple', 'silver', 'cyan', 'magenta', 'red']
c='yellow blue white green Black purple silver cyan magenta red'.split()

불필요한 괄호 (-2 바이트)를 제거하십시오.

l+=y[0]*(random.randint(n[o],n[o+1]))
l+=y[0]*random.randint(n[o],n[o+1])

스 플랫 (-2 바이트)을 사용하십시오.

random.randint(n[o],n[o+1])
random.randint(*n[o:o+2])

확장 가능한 반복 가능한 압축 풀기를 사용하여 무언가를 목록 (-4 바이트)으로 바꾸십시오.

l=list(l)
*l,=l

모든 것을 가져옵니다 (-15 바이트).

import random;random.randint;random.shuffle;random.shuffle
from random import*;randint;shuffle;shuffle

여기서 동일한 작업을 수행 할 수있는 다른 기능을 사용하십시오 (-5 * 2 = -10 바이트).

j.capitalize()
j.title()

print 기본적으로 공백으로 구분합니다 (-11 바이트).

print(str(l.count(b[0])) + " "+b)
print(l.count(b[0]),b)

더 풀기 (-3 바이트) :

r=l.pop()
*l,r=l

악용 사례 부작용 (-1 바이트 및 들여 쓰기) :

if j[0]==r:print(j.capitalize())
r!=j[0]or print(j.capitalize())

재사용하고 5자를 초과하는 것은 변수 (-1 바이트)로 저장할 가치가 있습니다.

len(s);len(s)
L=len(s);L;L

분수 (-5 바이트)를 단순화하십시오.

len(s)*25/100
len(s)/4

단항 남용 (-4 바이트) :

if(i<(len(m)-1)):i+=1
if~-len(m)>i:i+=1

아니면 가장 큰 것 ...

알고리즘을보고 완전히 변경해야하는지 확인하십시오

from random import*
*s,P,S=print,shuffle
P("Welcome to the CIMS Gumball Machine Simulator\nYou are starting with the following gumballs:")
*l,c,C='yellow blue white green Black purple silver cyan magenta red'.split(),s.count
for x,y,z in zip(c,[10,1,6,10,1,5,4,5,0,1],[15,10,15,25,12,10,6,12,10,1]):n=randint(y,z);l+=[x]*n;P(n,x)
S(l)
P("Here are your random purchases:")
while'red'in l:S(l);*l,r=l;s+=r,;P(r.title())
L=len(s)
P("You purchased %i gumballs, for a total of $%.2f\nMost common gumball(s):"%(L,L/4))
for x in c:C(x)!=max(map(C,c))or P(x.title())

( Counter코드 골프에서 가져 오는 것을 발견 하면 아마도 매우 잘못된 일을하고있을 것입니다 ...)


와!! 이것이 바로 내가 찾던 것입니다. 도와 주셔서 감사합니다!
— aks.

.title()모든 것을 사전 자본화 하여 필요를 피할 수 있습니다. 또한 s.count변수에 할당 하십시오.
— isaacg

@isaacg 나는 원래 프로그램의 기능을 유지하려고한다고 생각했습니다. 사양이 모두 세어 졌다면 기술적 으로 할당에 필요하지 않기 때문에 긴 글씨를 몇 개 삭제하겠습니다 .)
— Sp3000

@ Sp3000이 경우 .title ()을 초기 문자열에 넣지 않겠습니까? 하나의 .title () 사용을 저장합니다.
— isaacg

@isaacg 또한, 나는 시작 문자의 각각의 배열 골라하여했고, B는 파란색과 'B'는 블랙 표현 표현
— AKS합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.