अजगर में खेल छद्म कोड रूपांतरण

वोट
1

कंप्यूटर एक नंबर है कि उपयोगकर्ता कोई 10 से अधिक guesses.This काम एक एल्गोरिथ्म एक द्विआधारी खोज कहा जाता है का उपयोग करता है में 1 और 1000 के बीच चुनता है लगता है कि सुनिश्चित करें। प्रत्येक अनुमान के बाद, एल्गोरिथ्म छमाही में खोज करने के लिए संभव जवाब की संख्या में कटौती। पूरा कार्यक्रम के लिए स्यूडोकोड नीचे दी गई है; अपने कार्य को वह किसी कार्यशील अजगर कार्यक्रम में बदलने के लिए है। कार्यक्रम स्क्रीन पर दिए गए निर्देशों का मुद्रण, यह बताता है कि उपयोगकर्ता के पास कोई 10 से अधिक की कोशिश करता में 1 और 1000 और कंप्यूटर उसका अनुमान लगाना होगा के बीच संख्या लेने चाहिए द्वारा शुरू कर देना चाहिए। यह तो अनुमान लगाने शुरू होता है, और प्रत्येक अनुमान के बाद यह प्रतिक्रिया के लिए उपयोगकर्ता पूछता है। उपयोगकर्ता 1 में प्रवेश के लिए -1 अगर अनुमान कम होने की जरूरत है, 0 अगर यह सही था निर्देश दिया जाना चाहिए, और अगर यह higher.When कार्यक्रम सही ढंग से अनुमान लगा लेता है, यह रिपोर्ट करना चाहिए कि कितने अनुमान के लिए आवश्यक थे की जरूरत है। उपयोगकर्ता अमान्य प्रतिक्रिया में प्रवेश करती है, तो निर्देशों दोहराया जाना चाहिए और उपयोगकर्ता फिर से कोशिश करने की अनुमति दी।

स्यूडोकोड

- Print instructions to the user  
-Start with high = 1000, low = 1, and tries = 1 
- While high is greater than low   
  - Guess the average of high and low  
  - Ask the user to respond to the guess  
  - Handle the four possible outcomes:  
    - If the guess was right, print a message that tries guesses were required and quit the program
    - If the guess was too high, set high to one less than the guess that was displayed to the user and increment tries  
    - If the guess was too low, set low to one more than the guess that was displayed to the user and increment tries
    - If the user entered an incorrect value, print out the instructions again
- high and low must be equal, so print out the answer and the value of tries

मैं कुछ गंभीर मदद की जरूरत है! मैं सब पर इस सामग्री के किसी भी समझ में नहीं आता! यह सब मेरे पास है है

def main(x, nums, low, high):
        input(Enter -1 if the guess needs to be lower, 0 if the guess was right, or 1 if the guess needs to be higher: )
    for i in range (1, 1001):

main()

और मैं भी नहीं जानता कि अगर यह सही है है!

14/06/2009 को 04:28
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


7 जवाब

वोट
4

आप स्पष्ट रूप से बहुत प्रोग्रामिंग करने के लिए नए हैं, और मुझे लगता है कि समुदाय से एक देरी प्रतिक्रिया के लिए कारणों में से एक है। यह कहां से शुरू है और कैसे इस पूरी कवायद के माध्यम से आपका मार्गदर्शन करने के लिए तय करने के लिए कठिन है।

तो, मैं आप वास्तविक समस्या खुद की समझ प्राप्त करने की कोशिश करने के लिए इस पृष्ठ पर जाएँ सुझाव है कि इससे पहले कि आप यहाँ एक अच्छा जवाब मिल आप समझते हैं कि वहाँ क्या हो रहा है बनाना शामिल है, और अपने आप समाधान के निर्माण के माध्यम से मार्गदर्शन कि (आदर्श!)।

http://www.openbookproject.net/pybiblio/gasp/course/4-highlow.html

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

14/06/2009 को 04:37
का स्रोत उपयोगकर्ता

वोट
1

ठीक है, अजगर का उपयोग कर के बारे में अच्छा हिस्सा है कि यह वैसे भी लगभग स्यूडोकोड है।

अब, चलो अलग-अलग चरणों के बारे में सोचते हैं:

  1. आप उच्च और निम्न के बीच औसत कैसे मिलता है?

  2. यदि answerr सही है आप कैसे उपयोगकर्ता पूछते हैं

  3. क्या करें "अगर" बयान पायथन में की तरह लग रही है, और आप स्यूडोकोड बाहर लिखते थे के रूप में बयान करता है, तो?

यहाँ एक और संकेत है - आप एक दुभाषिया के रूप में अजगर चला सकते हैं और साथ अलग-अलग बयानों की कोशिश है, तो उदाहरण के लिए, तुम कर सकते हो

high=23
low=7

तो गणना आप क्या सोचते औसत या उन दोनों के बीच मध्य होना चाहिए (संकेत: 15)

14/06/2009 को 04:42
का स्रोत उपयोगकर्ता

वोट
11

मैं सब पर इस सामग्री के किसी भी समझ में नहीं आता!

यही कारण है कि बहुत समस्याग्रस्त ठीक है, लेकिन, के एक समय में एक कदम करते हैं! आपका होमवर्क असाइनमेंट शुरू होता है:

उपयोगकर्ता के लिए निर्देश प्रिंट

तो अगर आप सामान, आप कह के किसी भी समझ में नहीं आता है, तो इसका मतलब है कि आप या तो इस हिस्से को नहीं समझते। खैर: "उपयोगकर्ता" जो व्यक्ति अपने कार्यक्रम चल रहा है है। "निर्देश" अंग्रेजी वाक्य है कि उसे या बता रहे हैं उसे क्या प्रति इस उत्कृष्ट स्पष्ट और विस्तृत काम से निम्नलिखित उद्धरण के रूप में, खेल खेलने के लिए करना है:

कार्यक्रम स्क्रीन पर दिए गए निर्देशों का मुद्रण, यह बताता है कि उपयोगकर्ता के पास कोई 10 से अधिक की कोशिश करता में 1 और 1000 और कंप्यूटर उसका अनुमान लगाना होगा के बीच संख्या लेने चाहिए द्वारा शुरू कर देना चाहिए।

" print" एक अजगर अनुदेश कि जानकारी का उत्सर्जन करता है है; उदाहरण के लिए, केवल युक्त एक कार्यक्रम की कोशिश

print "some information"

यह कैसे काम करता है देखने के लिए। ठीक है, आप कृपया हमें पता चलता है कि आप इस बिंदु मिल गया है अपने जवाब संपादित कर सकते हैं, तो हम अगले एक करने के लिए ले जा सकते हैं? आगे के प्रश्न यदि कोई शब्द या अवधारणाओं मैं उपयोग कर रहा हूँ अभी भी आप के लिए भी उन्नत कर रहे हैं के साथ यहाँ टिप्पणी करने के लिए स्वतंत्र महसूस, और मैं स्पष्ट करने की कोशिश करता हूँ!

14/06/2009 को 04:43
का स्रोत उपयोगकर्ता

वोट
14

कैसे अजगर (या किसी भी भाषा) में इस लागू करने के बारे में सोच से पहले की सुविधा देता है स्यूडोकोड है, जो समस्या को हल करने के लिए एक बहुत अच्छी योजना की तरह दिखता है पर नजर डालें।

मुझे लगता है कि होता है कि एक बात आप पर अटक हो सकता है जिस तरह से स्यूडोकोड संदर्भ देता है चर , जैसे highऔर low। चर को समझने के लिए जिस तरह से उन्हें उस मान संग्रहीत किया जा सकता स्लॉट्स विचार करना है। किसी भी समय, एक चर संख्या 5, या एक खुले फ़ाइल का संदर्भ जैसे कुछ मूल्य, है। यही कारण है कि मूल्य अपने नाम का उपयोग करके किसी भी समय बुलाया जा सकता है, या यह यह करने के लिए बताए द्वारा एक नया मान दिया जा सकता है, और पुराने मूल्य इसकी जगह ले जा नए मान के साथ भुला दिया जाएगा।

स्यूडोकोड तीन चर, का संदर्भ high, lowऔर tries। यह भी बताता है कि उनकी प्रारंभिक मान होना चाहिए। बाद दूसरी पंक्ति निष्पादित किया गया है, उन मूल्यों को 1000, 1 और 1, के लिए क्रमश: स्थापित कर रहे हैं, लेकिन वे नए मूल्यों पर ले के रूप में कार्यक्रम की प्रगति।

स्यूडोकोड की एक अन्य विशेषता एक सशर्त पाश, और उपयोगकर्ता इनपुट के एक मामले विश्लेषण है। स्यूडोकोड के पाश की आपके अनुवाद सही नहीं है। आपके मामले में, आप एक नया चर बनाया है, iऔर 1 और 1000 के बीच मैं के हर मूल्य के साथ पाश शरीर को चलाने के लिए अपने कार्यक्रम निर्देश दिए हैं जाहिर है इस स्यूडोकोड से कोई लेना देना एक पूरी बहुत कुछ नहीं है।

इसके बजाय आप क्या करना चाहते हैं, पाश हमेशा के लिए है जब तक कुछ हालत (जो पाश शरीर में आने वाले बदलाव) झूठे हो जाता है। अजगर में, whileबयान करता है। आप एक से परिचित हैं, ifबयान, whileएक ही है, लेकिन बाद शरीर से किया जाता है, हालत फिर से मूल्यांकन किया जाता है और यदि यह अभी भी सच है शरीर फिर से मार डाला जाता है।

अंत में, लूप के शरीर में मामला विश्लेषण कुछ की तुलना मूल्यों की उम्मीद की आवश्यकता है। हालांकि कुछ अन्य भाषाओं इस व्यक्त करने के तरीके की एक संख्या है, अजगर में हम केवल if- elif- elseखंड।


कोड काम करने के लिए स्यूडोकोड बदलने के बाहर, यह शायद समझने के लिए कार्यक्रम वास्तव में क्या कर रही है उपयोगी है। यहाँ मुख्य लाइन 4, जहां कार्यक्रम दो मानों का औसत अनुमान लगा लेता है पर है। उसके बाद कार्यक्रम पर कितनी अच्छी तरह अनुमान बाहर काम किया कार्य करता है।

लूप के माध्यम से पहली बार चलाने, साथ में high1000 से युक्त और low1 युक्त, औसत 500 (वास्तव में औसत 500.5 है, लेकिन है कि हम पूर्ण संख्याओं, अजगर अनुमान है कि हम विभाजन का परिणाम चाहते भी एक पूर्णांक होना करने के लिए औसत रहे हैं के बाद से )। जाहिर है कि अनुमान सही होने का केवल एक 0.1% मौका है, लेकिन अगर यह गलत है, उपयोगकर्ता हमें बताने के लिए अगर यह बहुत अधिक है, या बहुत कम था की उम्मीद है। किसी भी तरह से, कि इस सवाल का जवाब पूरी तरह से संभव अनुमान का 50% समाप्त करता है।

, तो उदाहरण के लिए, उपयोगकर्ता एक कम संख्या के बारे में सोच रहा था, तो जब कार्यक्रम अनुमान लगाया 500, उपयोगकर्ता प्रोग्राम है जो 500 बहुत अधिक थी, और उसके बाद प्रोग्राम कभी लगता है कि संख्या में था नहीं होगा कहते थे 1000 के माध्यम से 501 की सीमा यह है कि कंप्यूटर बहुत काम बचा सकता है।

उपयोग करने के लिए है कि जानकारी रखने के लिए, कार्यक्रम संभावित मान लक्ष्य नंबर हो सकता है की सीमा का ध्यान रखती है। जब संख्या अनुमान लगाया बहुत अधिक है, कार्यक्रम को समायोजित कर इसकी ऊपरी सीमा नीचे, बस अनुमान नीचे है, और अगर अनुमान बहुत कम थी, इस कार्यक्रम को समायोजित कर इसकी कम ऊपर की ओर बंधे हुए सिर्फ अनुमान से ऊपर है।

जब कार्यक्रम फिर से लगा ले, अनुमान सही संभव सीमा के बीच में है, फिर छमाही में सीमा काटने। संभव अनुमान की संख्या मूल 1000 से 500 एक अनुमान में, 250 के लिए दो अनुमान में चला गया। कार्यक्रम भयानक भाग्य है, और न यह दो (जो वास्तव में बहुत संभावना है) तो तिहाई से प्राप्त कर सकते हैं, तो यह केवल 125 संख्या के बारे में चिंता करने के लिए छोड़ दिया है। चौथे अनुमान के बाद, केवल 62 नंबर रेंज में रहते हैं। यह जारी है, और आठ अनुमान के बाद, केवल 3 संख्या रहते हैं, और कार्यक्रम नौवें अनुमान के लिए मध्य संख्या कोशिश करता है। अगर ऐसा पता चला है गलत हो सकता है, केवल एक संख्या छोड़ दिया है, और इस कार्यक्रम में यह अनुमान लगा लेता है!

छमाही में एक सीमा के बंटवारे और उसके बाद करीब आधे के लिए जारी रखने की इस तकनीक कहा जाता है द्विभाजन और कंप्यूटर विज्ञान के लिए ब्याज की एक विस्तृत श्रृंखला विषयों में प्रकट होता है।


कैसे कुछ कोड के बारे में! के बाद से मैं सीखने के अनुभव के वंचित नहीं करना चाहता, मैं सिर्फ तुम कुछ के टुकड़े है कि आप के साथ मदद कर सकता है दे देंगे। अजगर इंटरैक्टिव अन्वेषण के लिए बनाया गया एक भाषा है, इसलिए अपने दुभाषिया ऊपर आग और यह एक शॉट दे। मैं दिखाया संकेतों के साथ उदाहरण है, वास्तव में टाइप न करें कि पोस्ट करेंगे।

यहाँ का उपयोग कर एक उदाहरण है whileखंड:

>>> x = 1000
>>> while x > 1:
...     x = x/2
...     print x
...
500
250
125
62
31
15
7
3
1
>>> x
1

उपयोगकर्ता से सांत्वना इनपुट हो रही है के माध्यम से किया जाना चाहिए raw_input()कार्य करते हैं। यह सिर्फ जो कुछ उपयोगकर्ता प्रकार देता है। यह एक छोटे से दिखाने के लिए कठिन है। चीजों को आसान बनाने के लिए, कि इनपुट की आवश्यकता है, मैं टाइप करता हूँ अजगर के हर पंक्ति के बाद "नमस्ते दुनिया!" (बिना उद्धरण)

>>> raw_input()
Hello World!
'Hello World!'
>>> y = raw_input()
Hello World!
>>> print y
Hello World!
>>> 

कैसे अवधारणाओं में से कुछ के संयोजन के बारे में!

>>> myvar = ''
>>> while myvar != 'exit':
...     myvar = raw_input()
...     if myvar == 'apples':
...         print "I like apples"
...     elif myvar == 'bananas':
...         print "I don't like bananas"
...     else:
...         print "I've never eaten", myvar
...
apples
I like apples
mangoes
I've never eaten mangoes
bananas
I don't like bananas
exit
I've never eaten exit
>>> 

उफ़। वहाँ एक बग का छोटा सा। यदि आप इसे ठीक कर सकते हैं!

14/06/2009 को 05:17
का स्रोत उपयोगकर्ता

वोट
0

यहाँ कुछ संकेत आप कार्य आरंभ कर दिया गया है:

औसत = मूल्य + मूल्य + मूल्य [...] / मूल्यों की संख्या; (उदाहरण के लिए, ((2 + 5 + 3) / (3))

कई प्रोग्रामिंग भाषाओं अलग ऑपरेटर पूर्वता का उपयोग करें। जब मैं प्रोग्रामिंग कर रहा हूँ, मैं हमेशा कोष्ठक का उपयोग जब मैं ऑपरेटर पूर्वता लेकर अनिश्चित हूं। ऊपर मेरे उदाहरण में, यदि आप केवल किया 2 + 5 + 3/3, कार्यक्रम अलावा पहले विभाजन संचालन करना होगा - तो यह करने के लिए evaulate होगा 2 + 5 + (3/3), या 2 + 5 + 1 == 7 ।

अजगर उपयोगकर्ताओं / * दूसरे के लिए इसे छोड़ें: जल्द से जल्द कार्यक्रमों स्थिरांक शुद्धता से फायदा हो सकता ( यहाँ यह क्या है की एक अच्छी व्याख्या है और क्यों यह बेहद अच्छा अभ्यास है)। कृपया उस के माध्यम से पढ़ने और समझने तुम क्यों स्थिरांक का उपयोग करना चाहिए (या जो भी अजगर बराबर है)। इसके अलावा "जादू संख्या," जो एक बड़ा क्षेत्र है जहां स्थिरांक उपयोग किया जाता है को देखने के। * /

गूगल "माफ करें मेरे प्रिय चाची सैली" (नोट: गणितीय ऑपरेटरों के साथ यह केवल सौदों, और ज्यादातर प्रोग्रामिंग भाषाओं के लिए सच है, ऑपरेटर पूर्वता की और अधिक व्यापक अध्ययन के लिए, पूर्वता के लिए अपने चुने हुए भाषा के दस्तावेज़ को देखने - यह भी है कि ज्यादातर कार्यक्रमों ध्यान दें करते हैं) शक्ति ऑपरेटरों में निर्माण किया है नहीं, लेकिन ज्यादातर मानक पुस्तकालयों पॉव कार्य हैं।

मानक पुस्तकालय की बात हो रही: मानक पुस्तकालय कार्यों से परिचित हो (मैं कभी उपयोग नहीं किया अजगर, मैं नहीं जानता कि यह कैसे एक SL लागू करता है, लेकिन मैं अगर एक भाषा लोकप्रिय एक अच्छी तरह से विकसित SL नहीं था कि बेहद आश्चर्य होगा)। आपको लगता है कि क्या है पता नहीं है, और अपनी पुस्तक / ट्यूटोरियल यह नहीं है, एक नया बनाएँ। किसी भी संसाधन है कि एक मानक पुस्तकालय को संदर्भित नहीं करती समय के लायक नहीं है।

अन्त में: जबकि इस पोस्ट की तरह मैं जानता हूँ कि मैं क्या बात कर रहा हूँ देख सकते हैं, मैं वास्तव में अभी भी सीखने के प्रारंभिक चरणों में, ठीक वैसे ही जैसे हूँ। संदर्भ और संकेत के उपयोग:, डेटा के बीच अंतर (टिप्पणी के लिए प्रश्न: करता अजगर संकेत है?) कुछ बातें आप जल्दी पर (जब मैं इन भागों को छोड़ दिया है, यह मेरी एक बहुत सीखने धीमा) के लिए इस्तेमाल किया पाने के लिए चाहते हो सकता है एक स्मृति स्थान और वास्तविक स्मृति स्थान में (अक्सर बार, स्मृति में मूल्य का स्थान, मूल्य से भी ज्यादा उपयोगी होगा कम से कम जब डेटा संरचनाओं लेखन)। विशेष रूप से मानक पुस्तकालय आदत हो; , आदि की नकल के लिए देखो मिल जाए, स्ट्रिंग परिवर्तन में उपयोगी प्रकार कार्य करता है।

वास्तव में, अपने मूल पोस्ट फिर से पढाना, मुझे नहीं पता था कि यह एक होमवर्क प्रकार काम था। आप इस मनोरंजन के लिए नहीं कर रहे हैं, तो आप शायद कभी नहीं मेरी सलाह ले जाएगा। बस ऐसे ही प्रोग्रामिंग याद है, बेहद मजेदार हो सकता है अगर आप इसे एक घर का काम नहीं करते हैं - और निराश नहीं मिलता है जब अपने कोड संकलन नहीं करता है (या ... व्याख्या), या आप अप्रत्याशित परिणाम, आदि मिल

14/06/2009 को 05:24
का स्रोत उपयोगकर्ता

वोट
1

ओवरफ्लो स्टैक करने के लिए आपका स्वागत है!

चाल यहाँ एहसास है कि अपने अजगर कार्यक्रम लगभग स्यूडोकोड की तरह दिखना चाहिए है।

सबसे पहले समझने के लिए वास्तव में क्या स्यूडोकोड कर रही है कोशिश करते हैं। अगर हम कार्यक्रम स्यूडोकोड द्वारा वर्णित के साथ बातचीत करने के लिए किया था, यह कुछ इस तरह दिखेगा:

Think of a number between 1 and 1000 and press Enter.
>>> 
Is it 500? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.
>>> 1
Is it 750? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.
>>> -1
Is it 625? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.

आदि।

जब हम पहली हमारे संख्या के बारे में सोच, कार्यक्रम केवल जानता है कि यह है 1 और 1000 के बीच यह चर 'कम' 1 करने के लिए और चर 1000 इसका पहला अनुमान करने के लिए 'उच्च' की स्थापना करके इस ज्ञान का प्रतिनिधित्व करता है इन की औसत है संख्या है, जो 500 है।

के बाद हम प्रोग्राम है जो हमारे संख्या 500 से अधिक है बताओ, यह दूसरे शब्दों में कार्यक्रम तो जानता है हमारी संख्या है कि 501 और 1000 के बीच यह तो 501 और 1000 की औसत अनुमान लगा लेता है 501. करने के लिए 'कम' का मान अपडेट हो जाता है, है जो 750 हम यह बताना है कि हमारी संख्या कम है, इसलिए कार्यक्रम जब तक यह सही अनुमान लगा लेता है 749 करने के लिए 'उच्च' का मान अद्यतन करता है और अगले 501 और 749 की औसत अनुमान लगा लेता है, और इतने पर है, या यह संभव सीमा संकुचित है एक संख्या के लिए नीचे (जिसका अर्थ है अपनी अगली अनुमान सही हो जाएगा)।

तो अजगर में प्रोग्राम लिखने के लिए वापस: हम मूल रूप से बस लाइन के लिए स्यूडोकोड लाइन अनुवाद करते हैं। उदाहरण के लिए हमारे कार्यक्रम पाश जैसे यह pseucode में करता है दिखना चाहिए:

while high > low:
  # Guess (high + low) / 2 and ask user to respond
  # Handle user response

एक के लिए लूप आप अपने कोड में है के रूप में के लिए कोई जरूरत नहीं है।

इनपुट लेने के लिए हम कुछ इस तरह कर सकते हैं:

guess = (high + low) / 2
response = input('Is it ' + str(guess) + '? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.')

अब उपयोगकर्ता इनपुट चर 'प्रतिक्रिया' में जमा हो जाती है, और हम के साथ संभावनाओं संभाल कर सकते हैं, तो जैसे बयानों 'अगर प्रतिक्रिया == -1:' उदाहरण के लिए।

बस निर्देशों का प्रिंट और जबकि पाश प्रवेश करने से पहले 'उच्च' और उनके प्रारंभिक मान को 'निम्न' स्थापित करने के लिए याद है और आप पूरी तरह से तैयार किया जाना चाहिए।

सौभाग्य!

14/06/2009 को 06:59
का स्रोत उपयोगकर्ता

वोट
2

वास्तव में psudocode से मेल नहीं खाता है, लेकिन यह काम करता है। जबरदस्त हंसी ;)

मैं जानता हूँ कि यह एक दुष्ट पुराने पोस्ट है, लेकिन यह एक ही काम मैं भी मिल गया है। यहाँ है कि मैं क्या साथ समाप्त हो गया है:

high = 1000
low = 1
print "Pick a number between 1 and 1000."
print "I will guess your number in 10 tries or less."
print "Or at least i'll try to.  ;)"
print "My first guess is 500."
guess = 500
tries = 0
answer = 1
print "Enter 1 if it's higher."
print "Enter -1 if it's lower."
print "Enter 0 if I guessed it!"
print ""
while (answer != 0):
    answer = int(raw_input("Am I close?"))
    if answer == 1:
        tries = tries + 1
        low = guess
        guess = (high + low) / 2
        print "My next guess is:"
        print guess
    elif answer == -1:
        tries = tries + 1
        high = guess
        guess = (high + low) / 2
        print "My next guess is:"
        print guess
    elif answer == 0:
        tries = tries + 1
        print "Your number is:"
        print guess
        print "Yay! I got it! Number of guesses:"
        print tries
25/09/2010 को 20:02
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more