2015-03-26 13 views
5

Quindi, ho un programma, che sto finendo ma a quanto pare ho avuto un problema. Nel programma devo farlo ogni volta che inserisco uno 0 nell'input, il programma si fermerà e stamperà i risultati. Ecco il programma prima di continuare dire altro:Come mostrare i risultati di un programma inserendo qualcosa in input?

import collections 
students = collections.defaultdict(list) 

while True: 
    student = input("Enter a name: ").replace(" ","") 
    if student == "0": 
     print ("A zero has been entered(0)") 
     break 

    if not student.isalpha(): 
      print ("You've entered an invalid name. Try again.") 
      continue 

    while True: 
     grade = input("Enter a grade: ").replace(" ","") 
     if grade == "0": 
      print ("A zero has been entered(0)") 
      break 

     if not grade.isdigit(): 
      print ("You've entered an invalid name. Try again.") 
      continue 

     grade = int(grade) 
     if 1 <= grade <= 10: 
      students[student].append(grade) 
      break 

for i, j in students.items(): 
    print ("NAME: ", i) 
    print ("LIST OF GRADES: ", j) 
    print ("AVERAGE: ", round(sum(j)/len(j),1)) 

ho capito un modo per rendere i risultati di arresto del programma e post dopo uno 0 viene inserito nella parte "Enter a name: ". Questo è ciò che viene stampato:

Enter a name: Stacy 
Enter a grade: 8 
Enter a name: 0 
A zero has been entered(0) 
NAME: Stacy 
LIST OF GRADES: [8] 
AVERAGE: 8.0 

ho bisogno di fare lo stesso con la parte "Enter a grade: " ma se cerco di rendere il programma come è ora, questo è ciò che esso stampa:

Enter a name: Stacy 
Enter a grade: 0 
A zero has been entered(0) 
Enter a name: 

Come faccio a far sì che il programma mostri i risultati come fa quando viene immesso uno 0 nell'input del nome?

risposta

1

In uno degli ingressi, verificare se l'ingresso è 0. In caso affermativo, effettuare una chiamata a sys.exit. Questo può essere fatto ovunque, anche quando si controlla il voto. Assicurati di includere entrambe le opzioni (una stringa 0 e una int 0). Inoltre, il motivo per cui stava ancora dicendo A zero has been entered(0) è perché stai uscendo da un ciclo, e poi continuando dall'inizio praticamente.

# Be sure to import sys! 

random_place = input("Whatever is here ") 
if random_place == '0' or random_pace == 0: 
    sys.exit(0) 

Il programma uscirà quindi.

+0

Questo sarebbe solo uscire dal programma senza visualizzare il nome, la lista di grado, e media – JGreenwell

0

Si dovrebbe esaminare le funzioni in quanto potrebbero risparmiare un sacco di problemi qui, tuttavia qui è una versione commentata del codice che uscirà su entrambi gli input è 0 e visualizza il messaggio finale.

import collections 
students = collections.defaultdict(list) 

while True: #combined while loops 
    print ("Enter 0 for name or grade to exit") #you don't say how to exit 
    student = input("Enter a name: ").replace(" ","") 
    if student == "0": 
     print ("A zero has been entered(0)") 
     break 
    grade = input("Enter a grade: ").replace(" ","") 
    if grade == "0": 
     print ("A zero has been entered(0)") 
     break 
    #can combined if student == 0 or grade == 0, but then both inputs must display 

    if not student.isalpha() or not grade.isdigit(): 
     print ("You've entered an invalid name or grade. Try again.") 
     #since these were the same message just combine them 
     #can switch to too if statements if you want seperate messages 
     #Also you might want to add a enter only alpha or digits for... message 
     break 

    grade = int(grade) 
    if 1 <= grade <= 10: 
     students[student].append(grade) 

for i, j in students.items(): 
    print ("NAME: ", i) 
    print ("LIST OF GRADES: ", j) 
    print ("AVERAGE: ", round(sum(j)/len(j),1)) 
+0

Se avrei usato il codice, allora sarebbe male. Scusate. Apprezzo molto il tuo aiuto ma, il problema è che il codice continua a non stampare le risposte dopo aver inserito un voto 0, il nome può essere una cifra (che non può essere) e quando inserisco un 5 in esso e detto era un numero non valido. – Acu

+0

@Acu Quali problemi hai? Questo codice funziona in base al tuo problema per python3 - non hai mai specificato quale stavi usando ma il tuo codice somiglia a python3. Se questo codice continua a non funzionare, devi dire specificamente perché e lavorare con noi per migliorarlo in base alle tue capacità, altrimenti sono solo io a fare i compiti. – JGreenwell

Problemi correlati