Trans Spiel Pseudo-Code in Python

stimmen
1

Machen Sie den Computer eine Zahl erraten, dass der Benutzer zwischen 1 und 1000 in nicht mehr als 10 guesses.This wählt Zuweisung eines Algorithmus eine binäre Suche aufgerufen verwendet. Nach jeder Vermutung, schneidet der Algorithmus die Anzahl der möglichen Antworten in Hälfte zu suchen. Pseudo-Code für das gesamte Programm steht unten; Ihre Aufgabe ist es, in ein Arbeits Python-Programm zu machen. Das Programm sollte durch Druck Anweisungen auf den Bildschirm zu starten, zu erklären, dass der Benutzer eine Zahl zwischen 1 und 1000 und der Computer wird es erraten, in nicht mehr als 10 Versuche holen sollte. Es beginnt dann Vermutungen zu machen, und nach jedem denke, es fragt den Benutzer, für Feedback. Der Benutzer sollte eingeben angewiesen werden, -1, wenn die Vermutung niedriger sein muss, 0, wenn es richtig war, und 1, wenn es sein muss higher.When das Programm richtig geraten, sollte es melden, wie viele Versuche erforderlich waren.

Pseudo-Code

- 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

Ich brauche einige ernsthafte Hilfe! Ich verstehe nichts von diesem Zeug überhaupt nicht! Das ist alles was ich habe

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

und ich weiß nicht einmal, ob es richtig ist!

Veröffentlicht am 14/06/2009 um 04:28
quelle vom benutzer
In anderen Sprachen...                            


7 antworten

stimmen
4

Sie sind offensichtlich sehr neu in der Programmierung, und ich denke, dass einer der Gründe für eine verzögerte Reaktion der Gemeinschaft ist. Es ist schwer zu entscheiden, wo ich anfangen soll und wie Sie durch diese ganze Übung zu führen.

Also, bevor Sie eine gute Antwort hier bekommen, dass Sie verstehen, beinhaltet machen, was dort passiert, und führen Sie durch den Aufbau der Lösung selbst (im Idealfall!) Ich würde Ihnen diese Seite vorschlagen besuchen, um zu versuchen ein Gespür für das eigentliche Problem selbst zu bekommen.

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

In der Zwischenzeit sehen Sie alle Antworten in diesem Thread und halten Sie Ihren Beitrag Bearbeitung, so dass wir wissen, dass Sie es bekommen.

Beantwortet am 14/06/2009 um 04:37
quelle vom benutzer

stimmen
1

Okay, der schöne Teil Python über ist, dass es ohnehin fast Pseudo-Code ist.

Nun lassen Sie uns darüber nachdenken, die einzelnen Schritte:

  1. Wie beurteilen Sie den Durchschnitt zwischen hohen und niedrigen bekommen?

  2. Wie fragen Sie den Benutzer, wenn die answerr korrekt ist

  3. Was tun „wenn“ Aussagen aussehen wie in Python, und wie werden Sie den Pseudo-Code aus, als ob Aussagen schreiben?

Hier ist ein weiterer Tipp - Sie können Python als Dolmetscher laufen und versuchen, einzelne Aussagen zusammen, so zum Beispiel, könnten Sie tun

high=23
low=7

dann berechnen, was Sie denken, sollte die mittlere oder Mittelpunkt zwischen ihnen sein (Tipp: 15)

Beantwortet am 14/06/2009 um 04:42
quelle vom benutzer

stimmen
11

Ich verstehe nichts von diesem Zeug überhaupt nicht!

Das ist ziemlich problematisch, aber fein, lassen Sie sich zu einem Zeitpunkt, einen Schritt tun! Ihre Hausaufgabe beginnt:

Druckanweisungen an den Benutzer

So verstehen Sie nichts von dem Zeug, sagen Sie, so dass bedeutet, dass Sie nicht diesen Teil verstehen auch nicht. Well: „der Benutzer“ ist die Person, die Ihr Programm läuft. „Anweisungen“ sind englische Sätze, die ihm oder ihnen sagen, was das Spiel zu tun, um zu spielen, wie in dem folgende Zitat aus dieser hervorragend klaren und detaillierten Zuordnung:

Das Programm sollte durch Druck Anweisungen auf den Bildschirm zu starten, zu erklären, dass der Benutzer eine Zahl zwischen 1 und 1000 und der Computer wird es erraten, in nicht mehr als 10 Versuche holen sollte.

print“ Ist eine Anweisung , die Python Informationen aussendet; nur zum Beispiel versuchen , ein Programm enthalten ,

print "some information"

um zu sehen, wie es funktioniert. OK, können Sie bitte bearbeiten Sie Ihre Antwort, uns zu zeigen, dass Sie diesen Punkt bekommen haben, so können wir zum nächsten bewegen? Fühlen Sie sich frei hier mit weiteren Fragen zu äußern, wenn alle Worte oder Begriffe verwende ich für Sie noch zu weit fortgeschritten sind, und ich werde versuchen zu klären!

Beantwortet am 14/06/2009 um 04:43
quelle vom benutzer

stimmen
14

Bevor darüber nachzudenken, wie dies in Python zu implementieren (oder einer beliebigen Sprache) können auf der Pseudo-Code aussehen, die wie ein ziemlich guter Plan sieht das Problem zu lösen.

Ich würde vermuten , dass eine Sache , die Sie die Art und Weise angesteckt werden könnten immer ist der Pseudo - Code verweist auf Variablen , wie highund low. Die Art und Weise Variablen zu verstehen , ist es, sie Schlitze zu berücksichtigen , die Werte gespeichert werden können. Zu jedem gegebenen Zeitpunkt besitzt eine Variable einen Wert, wie die Zahl 5, oder einen Verweis auf eine geöffnete Datei. Dieser Wert kann mit seinem Namen jederzeit einberufen werden, oder es kann mit dem neuen Wert an ihre Stelle durch die Zuordnung zu ihm, und der alten Wert wird vergessen , einen neuen Wert gegeben werden.

Der Pseudo - Code verweist auf drei Variablen high, lowund tries. Es sagt Ihnen auch , was ihre Anfangswerte sein sollte. Nachdem die zweite Zeile ausgeführt wurde, werden diese Werte auf 1000 gesetzt, 1 bzw. 1 sind, aber sie nehmen auf neue Werte , während das Programm fortschreitet.

Ein weiteres Merkmal des Pseudo - Code ist eine bedingte Schleife, und eine Fall - Analyse der Benutzereingabe. Ihre Übersetzung der Schleife des Pseudo - Code ist falsch. In Ihrem Fall haben Sie eine neue Variable erstellt, iund haben Ihr Programm angewiesen , den Schleifenkörper mit jedem Wert von i zwischen 1 und 1000. Offensichtlich ist dies nicht eine ganze Menge zu tun mit dem Pseudo - Code auszuführen.

Stattdessen , was Sie tun wollen , ist eine unendliche Schleife, bis eine bestimmte Bedingung (die in der Schleife ändert) falsch wird. In Python, der whiletut dieser Aussage. Wenn Sie mit einer vertraut sind ifAnweisung, whilesieht gleich aus , aber nachdem der Körper fertig ist, wird die Bedingung erneut ausgewertet und der Körper wird wieder ausgeführt , wenn es immer noch wahr ist.

Schließlich erfordert die Fallanalyse im Körper der Schleife Vergleich etwas Wert zu erwarten. Obwohl einige andere Sprachen eine Reihe von Möglichkeiten haben , dies auszudrücken, in Python haben wir nur if- elif- elseKlauseln.


Außerhalb von Pseudo-Code zu arbeiten Code Transformation, ist es wahrscheinlich sinnvoll, zu verstehen, was das Programm eigentlich tut. Der Schlüssel hier ist in Zeile 4, wobei das Programm den Durchschnitt der beiden Werte Vermutungen. nach, dass das Programm wirkt, wie gut die Vermutung ausgearbeitet.

Im ersten Durchlauf durch die Schleife, mit high1000 enthalten , und low1 enthalten, ist die durchschnittliche 500 (eigentlich der Durchschnitt liegt bei 500,5, aber da wir durchschnittlich ganze Zahlen, Python Vermutungen , dass wir das Ergebnis der Division wollen eine ganze Zahl auch sein ). Offensichtlich , dass Vermutung hat nur eine 0,1% ige Chance, richtig zu sein, aber wenn es falsch ist, wird der Benutzer erwartet , uns zu sagen , wenn es zu hoch ist, oder zu niedrig. So oder so, diese Antwort vollständig eliminiert 50% der möglichen Vermutungen.

Wenn, zum Beispiel, wurde der Benutzer einer geringen Zahl denkt, dann, wenn das Programm erraten 500, der Benutzer das Programm würde sagen, dass 500 zu hoch war, und dann würde das Programm nicht immer erraten muß, dass die Zahl in der war Bereich von 501 bis 1000, dass der Computer eine Menge Arbeit sparen kann.

Um diese Informationen in Gebrauch genommen, hält das Programm den Überblick über die Bandbreite der möglichen Werte die Zielnummer sein könnte. Wenn erraten die Zahl zu hoch ist, passt das Programm seine obere Schranke nach unten, knapp unterhalb der Vermutung, und wenn die Vermutung zu niedrig war, passt das Programm seine untere nach oben bis knapp über die Vermutung gebunden.

Wenn das Programm wieder errät, ist die Vermutung richtig in der Mitte des möglichen Bereichs, wieder den Bereich in zwei Hälften schneiden. Die Anzahl der möglichen Vermutungen ging von den Original-1000-500 in einer Vermutung, 250 in zwei Vermutungen. Wenn das Programm allerdings nicht Glück hat, und kann es nicht zwei bekommen (was eigentlich ziemlich wahrscheinlich ist), dann durch die dritten, hat es nur 125 Zahlen mehr zu kümmern. Nach der vierten Vermutung, bleiben nur 62 Zahlen in Reichweite. Dies setzt sich fort, und nach acht Vermutungen, nur 3 Zahlen bleiben, und das Programm versucht, die mittlere Zahl für seine neunte Vermutung. Wenn das falsch erweist, nur eine Zahl übrig, und das Programm errät es!

Diese Technik des einen Bereich in zwei Hälften teilt und dann in der engeren Hälfte weiterhin aufgerufen bisection und erscheint in einem weiten Bereich Themen von Interesse für Informatik.


Wie wäre es mit CODE! Da ich will Ihnen nicht Sie der Lernerfahrung berauben, ich werde nur ein paar Schnipsel, die Sie entlang helfen könnte. Python eine Sprache für interaktive Exploration, so starten Sie Ihren Dolmetscher und geben diesen einen Schuss ausgelegt ist. Ich werde Entsendung Beispiele mit den Anweisungen gezeigt, nicht wirklich, dass ein.

Hier ist ein Beispiel für die Verwendung von whileKlausel:

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

Erste Konsole Eingabe vom Benutzer sollte durch die getan werden raw_input()Funktion. Es gibt nur unabhängig von den Benutzertypen. Dies ist ein wenig schwieriger zu zeigen. Um die Dinge zu vereinfachen, nach jeder Zeile von Python , die eine Eingabe erfordert, werde ich geben „Hallo Welt!“ (ohne die Anführungszeichen)

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

Wie wäre es die Kombination von Konzepten!

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

Hoppla. wenig von einem dort Fehler. Sehen Sie, wenn Sie es beheben!

Beantwortet am 14/06/2009 um 05:17
quelle vom benutzer

stimmen
0

Hier ein paar Tipps zum Einstieg:

Durchschnitt = Wert + Wert + Wert [...] / Anzahl der Werte; (Zum Beispiel ((2 + 5 + 3) / (3))

Viele Programmiersprachen verwenden unterschiedlichen Operator Vorrang. Wenn ich die Programmierung immer ich Klammern verwenden, wenn ich über Operatorpräzedenz nicht sicher bin. In meinem Beispiel oben, wenn Sie tun nur 2 + 5 + 3/3, das Programm würde Divisionsoperationen vor der Zugabe tun - so es 2 + 5 + (03.03) evaulate würde, oder 2 + 5 + 1 == 7 .

Überspringen dies für Python Benutzer / * Zweitens: Ihre frühesten Programme von const Korrektheit profitieren können ( hier ist eine gute Erklärung, was es ist und warum es ist sehr gut Praxis). Bitte lesen Sie das und verstehen , warum Sie Konstanten verwenden sollten (oder was auch immer die Python entspricht). Schauen Sie auch „magische Zahlen“ , bis das ist ein großer Bereich, in dem Konstanten verwendet werden. * /

Google „entschuldigen bitte meine liebe Tante Sally“ (Hinweis: Dies ist nur befasst sich mit mathematischen Operatoren und hält meist gilt für Programmiersprachen, für eine umfassendere Untersuchung der Operator Vorrang, der gewählten Sprache der Dokumentation Vorrang nachschlagen - auch beachten, dass die meisten Programme Ich habe keine, in Kraftbetreiber gebaut, aber die meisten Standardbibliotheken haben pow Funktionen).

Apropos Standardbibliothek: Lassen Sie sich mit Standard-Bibliothek Funktionen vertraut (ich habe Python nie benutzt, weiß ich nicht, wie es eine SL implementiert, aber ich wäre sehr überrascht, wenn eine Sprache, die beliebt einen gut entwickelte SL nicht hat). Wenn Sie nicht wissen, was das ist, und Ihr Buch / tutorial hat es nicht, einen neuen zu erhalten. Jede Ressource, die keine Standardbibliothek referenziert ist nicht die Zeit wert.

Schließlich: Während dieser Beitrag aussehen kann, wie ich weiß, wovon ich spreche, ich bin wirklich noch in den frühen Phasen des Lernens, genau wie Sie. Ein paar Dinge, die Sie mögen vielleicht gewöhnen früh (wenn ich diese Teile übersprungen, es ist mein verlangsamte viel Lernen): Die Verwendung von Referenzen und Zeigern (Q für Kommentare: Ist Python hat Zeiger?), Die Differenz zwischen dem Datum in einem Speicherplatz und die tatsächlichen Speicherstelle (oft mal, wird die Position des Wertes in dem Speicher nützlicher sein als der Wert selbst, zumindest wenn das Schreiben von Daten-Strukturen). Insbesondere erhalten auf der Standard-Bibliothek verwendet wird; sucht Kopie, finden usw. Typ Funktionen, die in String-Manipulation.

Eigentlich Ihre ursprüngliche Post rereading, habe ich nicht weiß, das eine Hausaufgabe-Typ Aufgabe war. Wenn Sie das nicht zum Spaß machen, werden Sie wahrscheinlich nie meinen Rat. Denken Sie daran, dass die Programmierung kann sehr lustig sein, wenn Sie nicht es eine lästige Pflicht machen - und nicht frustriert, wenn der Code nicht kompiliert (oder ... interpretieren) oder unerwartete Ergebnisse, usw.

Beantwortet am 14/06/2009 um 05:24
quelle vom benutzer

stimmen
1

Willkommen Überlauf zu Stack!

Der Trick hier ist zu erkennen, dass Ihr Python-Programm wie der Pseudo-Code fast aussehen sollte.

Zuerst wollen wir versuchen, genau zu verstehen, was die Pseudo-Code tut. Wenn wir mit dem Programm beschrieben durch den Pseudo-Code zu interagieren hätten, würde es in etwa so aussehen:

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.

etc.

Als wir unsere Zahl denken, weiß das Programm nur, dass es zwischen 1 und 1000 ist es, dieses Wissen durch Setzen der Variable ‚niedrig‘ auf 1 gesetzt und die Variable ‚hoch‘ bis 1000. Seine erste Vermutung darstellt, ist der Mittelwert dieser Zahlen, die 500 ist.

Nachdem wir das Programm, das unsere Nummer größer als 500 sagen, aktualisiert sie den Wert von ‚niedrig‘ auf 501. Mit anderen Worten wird das Programm weiß, dass unsere Zahl liegt zwischen 501 und 1000. Es dann dem Mittelwert von 501 und 1000 errät, das ist 750. Wir können es sagen, dass unsere Zahl niedriger ist, so dass das Programm den Wert von ‚hoch‘ aktualisiert bis 749 und errät den Durchschnitt von 501 und 749 weiter, und so weiter, bis es richtig errät, oder es hat den möglichen Bereich verengt bis auf eine einzelne Zahl (dh die nächste Vermutung richtig sein wird).

Also zurück, das Programm in Python zu schreiben: Wir übersetzen grundsätzlich nur die Pseudo-Code Zeile für Zeile. Zum Beispiel soll unsere Programmschleife aussehen wie es funktioniert in der pseucode:

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

Es besteht keine Notwendigkeit für eine for-Schleife, wie Sie in Ihrem Code haben.

Nehmen Eingang können wir so etwas tun:

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

Nun ist die Benutzereingabe wird in der Variablen ‚Antwort‘ gespeichert sind, und wir können die Möglichkeiten, wenn Aussagen wie ‚wenn Antwort == -1:‘ behandeln zum Beispiel.

Denken Sie daran, die Anweisungen zu drucken und setzen ‚hoch‘ und ‚niedrig‘ auf ihre Anfangswerte vor die while-Schleife eingeben und Sie sollten alle eingestellt werden.

Viel Glück!

Beantwortet am 14/06/2009 um 06:59
quelle vom benutzer

stimmen
2

Nicht die psudocode genau übereinstimmen, aber es funktioniert. lol;)

Ich weiß, dass dies eine schlechte alte Post, aber das ist die gleiche Zuordnung ich auch bekam. Hier ist, was ich am Ende mit:

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
Beantwortet am 25/09/2010 um 20:02
quelle vom benutzer

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