पायथन 3 - मेरी असाइनमेंट की कोशिश की


9

नोट: यह एक गोल्फ चुनौती के रूप में ज्यादा नहीं है; यह इतना अधिक गोल्फ सुझाव के लिए पूछ रहा है।

हाल ही में मैंने अपने वेब डेवलपमेंट क्लास के लिए पायथन असाइनमेंट किया था, ताकि हम यह जांच सकें कि हम कोड कर सकते हैं। चूंकि मैं पहले से ही पायथन में सहज महसूस करता हूं, इसलिए मैंने इसे आजमाने और गोल्फ खेलने का फैसला किया, और मैं सोच रहा था कि क्या लोग उन चीजों को इंगित कर सकते हैं जिन्हें मैंने याद किया था।

मुझे पहले से ही पता है कि कुछ स्थानों पर अतिरिक्त स्थान हैं, लेकिन मैं वैचारिक चीजों में अधिक रुचि रखता हूं, जैसे कि while 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
पार्न्स के

5
क्या आपने इसे अभी तक गोल्फ करने का प्रयास किया है?
feersum

2
इस कोड में बहुत सारे सरल गोल्फ सुधार शेष हैं। मुझे लगता है कि आप बेहतर सीखेंगे यदि आपने गोल्फ सुझावों की समीक्षा की और अन्य पायथन गोल्फों को देखा, और इसे अपने कोड को अपने दम पर छोटा करने के लिए अधिक किया। फिर, यदि आप जो प्राप्त करते हैं उसे पोस्ट करते हैं, तो लोग अधिक व्यावहारिक सलाह दे सकते हैं।
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को एक कोड-गोल्फ में आयात करते हैं, तो आप शायद कुछ गलत कर रहे हैं ...)


वाह!! यही वह है जिसकी तलाश में मैं हूं। आपकी मदद के लिए बहुत धन्यवाद!
अक्स

आप शायद .title()हर चीज को पहले से तय करके उसकी जरूरत को कम कर सकते हैं। इसके अलावा, s.countएक चर के लिए असाइन करें।
isaacg

@isaacg मुझे लगा कि मैं मूल कार्यक्रम की कार्यक्षमता को बनाए रखने की कोशिश करूंगा। यदि कल्पना थी कि सभी की गिनती की गई है, तो मैं तकनीकी रूप से असाइनमेंट की आवश्यकता नहीं है, क्योंकि मैं लंबे प्रिंट स्टेटमेंट में से कुछ को छोड़ दूंगा;)
Sp3000

@ Sp3000 उस स्थिति में, प्रारंभिक स्ट्रिंग पर .title () क्यों नहीं लगाया जाता है? एक .title () का उपयोग करता है।
isaacg

@ आइसाकग इसके अलावा, मैंने इसे शुरुआती अक्षरों में से प्रत्येक की एक सरणी से बाहर निकालकर किया था, और 'बी' का प्रतिनिधित्व नीला और 'बी' का प्रतिनिधित्व किया था
अक्स।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.