পাইথন 3 - আমার নিয়োগের চেষ্টা করা গল্ফিং


9

দ্রষ্টব্য: এটি ততটা গল্ফ চ্যালেঞ্জ নয়; এটি আরও তাই গল্ফিং পরামর্শ জিজ্ঞাসা।

আমরা কোড করতে পারি কিনা তা পরীক্ষা করার জন্য সম্প্রতি আমার ওয়েব ডেভলপমেন্ট ক্লাসের জন্য পাইথন অ্যাসাইনমেন্ট ছিল। যেহেতু আমি ইতিমধ্যে পাইথনে স্বাচ্ছন্দ্য বোধ করছি, তাই আমি চেষ্টা করেছি এবং এটি গল্ফ করব এবং আমি ভাবছিলাম যে লোকেরা আমার হাতছাড়া হওয়া জিনিসগুলি উল্লেখ করতে পারে কিনা।

আমি ইতিমধ্যে জানি যে কিছু জায়গায় অতিরিক্ত স্থান রয়েছে, তবে আমি ধারণামূলক বিষয়গুলিতে আরও আগ্রহী, যেমন 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
পেরেনগুলির

5
আপনি কি এখনও এটি গল্ফ করার চেষ্টা করেছেন?
শুক্রবার 24'15

2
এই কোডটিতে সরল গল্ফের অনেকগুলি উন্নতি রয়েছে। আমি মনে করি আপনি গল্ফ টিপস পর্যালোচনা করে এবং অন্য পাইথন গল্ফগুলির দিকে নজর দিলে আপনি নিজেরাই আরও শিখতে পারবেন এবং নিজের কোডটি নিজের হাতে ছোট করার জন্য আরও কিছু করেছেন did তারপরে, আপনি যা পান তা পোস্ট করলে লোকেরা আরও অন্তর্দৃষ্টিপূর্ণ পরামর্শ দিতে পারে।
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()

বহির্মুখী বন্ধনী (-২ বাইট) সরান:

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

স্প্ল্যাট (-২ বাইট) ব্যবহার করুন:

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)

আরও আনপ্যাকিং (-৩ বাইট):

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

@ আইসাকজি আমি ভেবেছিলাম যে আমি মূল প্রোগ্রামটির কার্যকারিতা ধরে রাখার চেষ্টা করব। যদি অনুমানটি সবই গণনা করা হত তবে আমি দীর্ঘ প্রিন্টের কয়েকটি বিবৃতি ছেড়ে দেব কারণ প্রযুক্তিগতভাবে অ্যাসাইনমেন্টটি তাদের প্রয়োজন হয় না;)
Sp3000

@ Sp3000 সেক্ষেত্রে প্রাথমিক স্ট্রিংয়ে .title () রাখবেন না কেন? একটি .title () ব্যবহার সংরক্ষণ করে।
isaacg

@ আইসাকগ এছাড়াও, আমি শুরুর প্রতিটি অক্ষরের একটি অ্যারে বাছাই করে এটি করেছি এবং 'বি' নীল এবং 'বি' উপস্থাপন করে কালো
আকসকে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.