piton içine oyun sözde kodu Transform

oy
1

bilgisayar kullanıcısı atama bir ikili arama denilen bir algoritma kullanır en fazla 10 guesses.This içinde 1 ile 1000 arasında seçtiği bir sayı tahmin olun. Her tahmin sonra, algoritma yarısında aramak olası cevaplar sayısını keser. tam program için yalancı kod aşağıda verilmiştir; Görev çalışan bir piton programına çevirmek etmektir. Program kullanıcı en fazla 10 denemeden içinde 1 ile 1000 ve bilgisayar bunu tahmin edecek arasında bir sayı seçmenizi gerektiğini açıklayan ekrana talimatları yazdırarak başlamalıdır. Daha sonra tahminlerde bulunmak başlar ve her tahmin sonra geribildirim için kullanıcı sorar. o programın düzgün tahmin higher.When, birçok tahmin istendi nasıl bildirmelidir olması gerekiyorsa kullanıcı 1 girmek için -1 tahminim düşük olması gerekiyorsa, 0 doğru olup olmadığını talimat ve edilmelidir. Kullanıcı geçersiz bir yanıt girerse, talimatlar tekrarlanan ve kullanıcı tekrar denemek için izin verilmelidir.

pseudocode

- 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

Ben ciddi yardıma ihtiyacım var! Ben hiç bu şeylerin hiçbirini anlamıyorum! Bütün sahip olduğum bu

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()

Bunun doğru olmadığını ve ben bile bilmiyorum!

Oluştur 14/06/2009 saat 04:28
kaynak kullanıcı
Diğer dillerde...                            


7 cevaplar

oy
4

Belli ki programlama için çok yeni, ve ben o topluluktan gecikmiş bir yanıt nedenlerinden biridir sanırım. Başlangıç ​​ve nasıl bu bütün egzersiz boyunca size rehberlik etmek için karar vermek zor.

Burada iyi bir cevap almak orada neler olduğunu anlamaya yapma ve kendinizi çözüm oluşturma konusunda size yol gösterici içerir ki (ideal olarak!) önce Yani, gerçek problemin kendisinin kavramayaçalıştım denemek için bu sayfayı ziyaret öneririm.

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

Bu arada, bu iş parçacığı tüm yanıtlara bakmak ve biz bunu alıyoruz tarafından bilinmesi için yazı düzenlemeye devam.

Cevap 14/06/2009 saat 04:37
kaynak kullanıcı

oy
1

Tamam, Python kullanarak konuda güzel bir parçası zaten neredeyse yalancı kod olmasıdır.

Şimdi, bireysel adımlar hakkında düşünelim:

  1. Nasıl yüksek ve düşük arasındaki ortalama alabilirim?

  2. answerr doğru olup olmadığını kullanıcıya sor nasıl

  3. Ne ifadeleri Python benziyor ve nasıl ifadeleri sanki pseudocode dışarı yazardı "eğer"?

Burada başka bir ipucu - Eğer örneğin, yapabileceği, tercüman olarak python çalıştırmak ve birlikte bireysel ifadeleri denemek, bu yüzden olabilir

high=23
low=7

o zaman aralarındaki ortalama veya orta nokta olması gerektiğini düşündüğünü hesaplamak (ipucu: 15)

Cevap 14/06/2009 saat 04:42
kaynak kullanıcı

oy
11

Ben hiç bu şeylerin hiçbirini anlamıyorum!

Bu iyi, oldukça sorunlu, ama, haydi bir seferinde bir adım yapalım! Sizin ev ödevi başlar:

kullanıcıya Baskı talimatları

o ya bu bölümü anlamıyorum demektir böylece Yani, malzeme diyorsunuz HERHANGİ anlamıyorum. Eh: "kullanıcı" Programınızı yönetiyor kişidir. "Talimatlar" onu ya söyle İngiliz cümlelerdir Onu bu mükemmel açık ve ayrıntılı atama aşağıdaki alıntı gereği, oyunu oynamak için ne yapacağını:

Program kullanıcı en fazla 10 denemeden içinde 1 ile 1000 ve bilgisayar bunu tahmin edecek arasında bir sayı seçmenizi gerektiğini açıklayan ekrana talimatları yazdırarak başlamalıdır.

" print" Bilgisini yayar bir Python talimatıdır; örneğin, sadece bir program esnasında deneyin

print "some information"

Nasıl çalıştığını görmek için. Tamam, bu noktaya attığınıza bize göstermek için cevabınızı düzenleyin olabilir, bu yüzden bir sonrakine taşıyabilirim? Daha fazla soru herhangi bir kelime veya hala senin için fazla ileri kullanıyorum kavramlar eğer burada yorum yapmaktan çekinmeyin, ben açıklığa kavuşturmak için çalışacağım!

Cevap 14/06/2009 saat 04:43
kaynak kullanıcı

oy
14

piton (veya herhangi bir dilde) Bu nasıl uygulanacağına düşünmeye önce sorunu çözmek için oldukça iyi bir plan gibi görünüyor pseudocode, bakalım.

Sana üzerinde sıkışmış olabilir bir şey pseudocode başvuran yolu olduğunu tahmin ediyorum değişkenleri gibi highve low. Değişkenleri anlamak için bir yol onlara değerleri saklanabilir yuvaları dikkate almaktır. Herhangi bir zamanda, değişken sayıda 5 veya açık bir dosya için bir referans gibi bazı değere sahiptir. Bu değer adını kullanarak herhangi bir zamanda davet edilebilir, ya da kendisine atayarak yeni bir değer verilebilir ve eski değer yerini alarak yeni bir değerle unutulacak.

Yalancı kod üç değişken, başvuran high, lowve tries. Aynı zamanda onların ilk değerler ne olması gerektiğini söyler. İkinci satır yürüttü sonra, bu değerler sırasıyla 1000, 1 ve 1, ayarlanır, ancak program ilerledikçe yeni değerler alabilir.

Pseudocode bir başka özelliği, bir koşullu döngü ve kullanıcı girişine bir durumda analizidir. Sözdekod en döngünün Kişisel çeviri yanlıştır. Senin durumda, yeni bir değişken yarattık, ive Açıkçası bu pseudocode ile yapmak için bir sürü yok, 1 ile 1000 arası i her değerle döngü gövdesini çalıştırmak için programı talimat gelmiş.

(Döngü gövdesinde değiştirir) bazı koşul yanlış olana kadar yerine ne yapmak istediğiniz sonsuza döngü vardır. Python'da, whiledeyim yapar. Bir aşina iseniz ifaçıklamada, whileaynı görünüyor, ama vücut yapıldıktan sonra, durum yeniden değerlendirilir ve hala doğru ise gövdesi tekrar yürütülecektir.

Son olarak, döngü gövdesinde vaka analizi değerlerini beklenen karşılaştırarak şey gerektirir. Bazı diğer diller bu ifade edilme yollarına bir dizi olmasına rağmen, Python sadece var if- elif- elsecümlecikleri.


kod çalışmaya pseudocode dönüştürülmesi dışında, program aslında ne yaptığını anlamak için muhtemelen yararlıdır. Burada önemli olan program iki değerlerin ortalamasını tahmin hattı 4, üzerindedir. Bundan sonra programın tahmin çalıştı ne kadar iyi davranır.

Ile döngü içinde ilk çalıştırma, In high1000 ihtiva ve low1 içeren, ortalama 500 (aslında ortalama 500,5 olmakla biz tamsayılar, biz de bir tamsayı olmak bölünme sonucu istediğiniz piton tahmin ortalamasını ediyoruz beri ). Açıkçası bu tahminim doğru olma yalnızca% 0,1'lik bir şansı var, ama yanlış, kullanıcı çok yüksek veya çok düşük olup olmadığını bize bekleniyor. Her iki şekilde de, bu cevabı tamamen mümkün tahminlerde% 50 ortadan kaldırır.

Örneğin, kullanıcı bir düşük sayıda düşünüyordum, o zaman programı 500 tahmin zaman, 500 çok yüksek olduğunu programını ve ardından programın şimdiye numara olduğunu tahmin etmek olmazdı söylerdim kullanıcı bilgisayarı bir sürü iş kaydedebilirsiniz 1000'de aracılığıyla 501 aralığı.

kullanmak için bu bilgileri koymak için, programın hedef sayısı olabilir olası değerler aralığında izler. tahmin sayısı çok yüksek olduğunda, program ayarlar onun aşağı doğru bağlı, tahmin çok düşük hemen tahmin altında ve, program, alt hemen tahmin üzerinde yukarı doğru bağlanmış ayarlar üst.

Program tekrar tahmin zaman sanırım bir daha ikiye aralık kesme, sağ mümkün aralığın ortasında. olası tahminlerde iki numaralı tahmin olarak 250, bir tahmin 500 orijinal 1000 den gitti. Program korkunç şans vardır ve üçte bir oranında daha sonra, (aslında oldukça muhtemeldir ki) burayı ikisini alamıyorsanız, sadece 125 sayı hakkında endişe bıraktı vardır. Dördüncü tahmin sonra yalnızca 62 sayı aralığında kalır. Bu devam eder ve sekiz tahminden sonra, sadece 3 sayı kalır ve program dokuzuncu tahmin için orta numarasını çalışır. Bu yanlış olduğu ortaya çıkarsa, sadece bir sayı bırakılır ve program bunu tahmin!

Yarısında bir dizi bölme ve sonra daha yakın yarısına devam etme Bu teknik denir olduğu İkiye bölme ve bilgisayar bilimine ilgi geniş bir yelpazede konular görünür.


Biraz KODU hakkında! i öğrenme deneyimi mahrum etmek istemiyorum, ben sadece sayfada size yardımcı olabilecek bazı parçacıkları vereceğiz. piton interaktif keşif için tasarlanmış bir dildir, bu nedenle tercüman ateşlemek ve bu bir deneyin. Ben gösterilen istekleri ile örnekler, aslında bu yazmayın gönderme olacak.

İşte kullanıldığı bir örnek whilemaddesini:

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

Kullanıcıdan alınıyor konsol girişi yoluyla yapılmalıdır raw_input()fonksiyonu. Sadece ne olursa olsun kullanıcı türleri döndürür. Bu göstermek için biraz daha zordur. Ben yazacağım girdisi gerektirmektedir piton her satırdan sonra, işleri basitleştirmek için "Merhaba Dünya!" (tırnaklar olmadan)

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

Nasıl bazı kavramların birleştirerek hakkında!

>>> 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
>>> 

Hata. Orada bir hata biraz. bunu düzeltmek varsa görün!

Cevap 14/06/2009 saat 05:17
kaynak kullanıcı

oy
0

İşte başlamak için bir kaç ipucu var:

Ortalama = Değer + Değeri + Değeri [...] Değerlerin / sayısı; (Örneğin, ((2 + 3 + 5) / (3))

Birçok programlama dilleri farklı operatör öncelik kullanın. Ben programlama am zaman operatör önceliği emin olduğumda, hep parantezleri kullanabilirsiniz. Yukarıdaki benim örnekte, sadece yapsam 2 + 5 + 3/3, ilave edilmeden önce bölme işlemlerini yapacağını programı - bu kadar değerlendiririz diye 2 + 5 + (3/3) veya 2 + 5 + 1 == 7 .

İkincisi piton kullanıcıları / * bu atla: Lütfen en kısa programlar const doğruluğu yararlanabilir ( burada ne olduğunu iyi bir açıklama olduğunu ve son derece iyi bir uygulamadır neden). O okunması ve (piton eşdeğerdir ya neyse) sabitlerini kullanmak niye anlayın. Ayrıca sabit kullanılır büyük bir alandır "sihirli numaralar" bakın. * /

matematiksel operatörleri ile bu sadece fırsatları ve çoğunlukla programlama dilleri için de geçerlidir; operatör öncelik daha kapsamlı çalışma için, önceliği için seçtiğiniz dilin belgelerine bakmak - aynı zamanda en programları olduğuna dikkat: Google (NOT "My Dear Sally teyze bağışlayın lütfen" do) güç operatörleri inşa, ancak çoğu standart kütüphaneler pow işlevlere sahip değil.

Standart kütüphanenin Konuşma: (Ben Python, ben bir SL uygulayan bilmiyorum hiç kullanılmamış, ancak bir dil popüler İyi gelişmiş SL olmadığını eğer ben son derece sürpriz olurdu) standart kütüphane fonksiyonları tanıyın. Bunun ne olduğunu bilmiyorum ve kitap / öğretici buna sahip değilse, yeni bir tane almak. Standart bir kütüphane başvuruda bulunmadığı kaynak zamanı değmez.

Son olarak: Ben neden bahsettiğimi biliyorum gibi bu yayını görünse, gerçekten sizin gibi, öğrenmenin erken aşamalarında hala duyuyorum. referanslar ve işaretçiler kullanılması (yorumlar için Q: Python işaretçileri vardır?), veri arasındaki farkı birkaç nokta erken (Ben bu parçaları atlanır zaman, benim çok şey öğreniyorum yavaşlattı) üzerinde alışması isteyebilirsiniz bir bellek konumu ve gerçek bellek konumuna (çoğu kez, bellekte değerinin konumu, en azından veri yapıları yazarken değeri kendisinden daha faydalı olacaktır). Özellikle standart kütüphanesine alışması; vb, kopya için bakmak bulmak dize manipülasyon kolaylığı tip fonksiyonlar.

Aslında, orijinal yayını yeniden okuma, bunun ödev tipi bir atama olduğunu fark etmedi. Eğlenmek için bu yapmıyor, muhtemelen benim tavsiye almak asla. Sadece bunu bir angarya yapmazsanız, son derece eğlenceli olabilir programlamayı unutmayın - ve kod derlemek (veya ... yorumlamak) vermediğinde sinirli alamadım veya vb beklenmeyen sonuçlar almak

Cevap 14/06/2009 saat 05:24
kaynak kullanıcı

oy
1

Taşması Stack hoş geldiniz!

Burada hüner Python programı neredeyse pseudocode gibi görünmelidir fark etmektir.

İlk önce pseudocode yaptığını tam olarak ne olduğunu anlamaya çalışalım. Biz pseudocode tarafından açıklanan programla etkileşim olsaydı, böyle bir şey görünecektir:

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.

vb.

Biz öncelikle bizim sayının düşündüğümüzde, programın O 1'e 'düşük' değişken ve 1000 İlk tahmine 'yüksek' değişkeni ayarlayarak bu bilgiyi temsil 1 ile 1000 o olduğunu bilir bu ortalamasıdır 500 sayı,.

Bizim sayı 500'den büyük olan programa anlatmak sonra, program daha sonra Daha sonra 501 ve 1000 ortalamasını tahmin 501 ila 1000 numaralı olduğunu bilir başka deyişle 501 için 'düşük' değerini günceller 750. Biz programı 749 için 'yüksek' değerini günceller ve sonraki 501 ve 749 ortalamasını tahmin ve benzeri doğru tahmin kadar, ya da olası aralığı daralmış nedenle sayı düşük olduğu söylemek hangi tek bir numaraya aşağı (bir sonraki tahminim doğru olacaktır anlamına gelir).

Yani geri Python programı yazmaya: Temelde sadece hat için yalancı kod satırı çevirir. Örneğin program döngü sadece pseucode yaptığı gibi görünmelidir:

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

kodunuzda olduğu gibi bir for döngüsü için gerek yoktur.

girişini çekmek için böyle bir şey yapabilirsiniz:

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.')

Şimdi kullanıcı girişi değişken 'tepkisi' depolanır ve biz birlikte olanaklarını işleyebilir eğer gibi ifadeler 'eğer cevap == -1:' Örneğin.

Sadece talimatları yazdırmak ve while döngüsü girmeden önce başlangıç ​​değerlerine 'yüksek' ve 'alçak' ayarlamayı unutmayın ve tüm set olmalıdır.

İyi şanslar!

Cevap 14/06/2009 saat 06:59
kaynak kullanıcı

oy
2

Tam olarak psudocode maç ama işe yarıyor vermez. ); Lol

Ben bu kötü eski bir yazı olduğunu ama bu da var aynı atama olduğunu biliyoruz. İşte ben ile sona budur:

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
Cevap 25/09/2010 saat 20:02
kaynak kullanıcı

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