2016-06-21 10 views
0

これはおそらく最も醜いコードですが、とにかく私は助けが必要です。なぜループが働くのか分からないからです。 スクリプトのアイデアは簡単です。あなたはスーパーヒーローの名前をつけて、本当の名前をつけます。次に、あなたが望むならば、あなたは "伝記"セクションを選んで、詳細を知ることができます。ループの外で入力を再呼び出しする

import sys 
import os 
super_heros = {'Hulk': 'Bruce Banner',    # Creo lista supereroei 
       'Capitan America': 'Steve Rogers', 
       'Spiderman': 'Peter Parker'} 

hero_biography = {'Bruce Banner': 'David Banner nasce in California. ' 
            'Si laurea con il massimo dei voti in medicina, radiologia, genetica' 
            'e biologia molecolare. ' 
            'A pochi anni dalla laurea, acquisisce una grande fama come medico in malattie' 
            'rare e genetiche, nonché come ricercatore in ambito radiologico, cellulare, e ' 
            'atomico. ' 
            'Per anni insegna scienze genetiche a Princeton e a Stanford, dove acquisisce' 
            'una fama sempre crescente nel campo delle ricerche sugli impulsi emotivi e ' 
            'sui raggi gamma. ' 
            'Le sue ricerche subiscono una grande ispirazione quando legge i primi articoli ' 
            'del dottorRonald Pratt, secondo il quale è possibile ottenere poteri guaritori ' 
            'da una manipolazione genetica. ' 
            'Al termine insegnamento come docente universitario, Banner lavora presso un ' 
            'laboratorio dove è affiancato da Elèna Marks, una vecchia compagna del college', 
        'Peter Parker' : 'Prova'} 

print('Script creato da Federico Di Lembo') 

while True: # Loop per condizione soddisfatta 

    choice = input('Nome Supereroe:') 
    if choice == 'Hulk': 
     print(super_heros['Hulk']) 
    elif choice == 'Capitan America': 
     print(super_heros['Capitan America']) 
    elif choice == 'Spiderman': 
     print(super_heros['Spiderman']) 

    elif choice == 'Esc': # Imposto uscita dal programma 
     sys.exit(0) 
    elif choice == 'Biografia': # Imposto uscita dal loop 
     break 
    else: 
     choice == '' 
     print('Nome inesistente') 

while True: # Imposto Nuovo Loop per la seconda scelta 
    x = 1 
    if x > 0: 
     newchoice = input('Biografia: digitare nome reale del supereroe ==> ') 
    if newchoice == 'Bruce Banner': 
     print(hero_biography['Bruce Banner']) 
     break 
    elif newchoice == 'Peter Parker': 
     print(hero_biography['Peter Parker']) 
    if newchoice == '': 
     newchoice 


while True: 
    x = 1 
    if x > 0: 
     secondnewchoice = input('Desideri continuare la ricerca nella sezione Biografia?') 

    if secondnewchoice == 'No': 
     break 
    if secondnewchoice == 'Si': 
     newchoice 



os.execl(sys.executable, sys.executable, *sys.argv) 

コードの最後の部分では、私はnewchoice入力を "呼び戻す"方法を理解していません。 最後のループでは、質問は「あなたは伝記のセクションに滞在しますか?」と答えています。答えが「はい」「Si」の場合は、ちょうど上のnewchoicheの入力を参照したいと思います。 私は間違っていますか?

英語には申し訳ありません。

答えて

1

whileループは新しいスコープを開始しません。 newchoiceは表示され、設定されたループが完了した後に設定されます。

while True: 
    foo = 3 
    break 
print foo # Outputs 3   

あなたの問題は、あなたが最後のループでnewchoiceで何も実際にではないことであるように思われます。それは文字列値の変数であり、関数呼び出しではありません。おそらくネストされたループが必要です:

while True: # Loop A 
    while True: # Loop B 
     newchoice = input('Biografia: digitare nome reale del supereroe ==> ') 
     if newchoice == '': 
      break # Exit loop B, moving on to loop C 
     elif newchoice not in hero_biography: 
      continue 
     else: 
      print(hero_biography[newchoice]) 

    while True: # Loop C 
     stay = input('Desideri ...') 
     if stay in ("No", "Si"): 
      break # Exit loop C 
    if stay == "No": 
     break # Exit loop A 
+0

ありがとう、それは動作します! –

関連する問題