2015-11-25 3 views
0

Вот мой код до сих пор:Python печатает все, я только хочу, чтобы напечатать последний номер

import sys 
import time 
import random 
from sys import * 
from random import * 
from time import sleep 

def intro(): 
    global lives 
    lives = 2 
    intro1() def intro1(): 
    global lives 
    text1 = 'please enter (Yes or No)' 
    for x in text1: 
      print (x, end='') 
      sys.stdout.flush() 
      sleep(0.007) 
    print() 
    answer = input() 
    if 'yes' in answer: 
     lives = lives + 1 
     text1 = 'Thank you' 
     text2 = '+ 1 life' 
     text3 = lives 
     text4 = ' lives now.' 
     for x in text1: 
      print (x, end='') 
      sys.stdout.flush() 
      sleep(0.007) 
     print() 
     for x in text2: 
      print (x, end='') 
      sys.stdout.flush() 
      sleep(0.007) 
     print() 
     for x in range(text3): 
      print (x, end='') 
      sys.stdout.flush() 
      sleep(0.007) 
     for x in text4: 
      print (x, end='') 
      sys.stdout.flush() 
      sleep(0.007) 
     print() 
     intro1() 
    if 'no' in answer: 
     lives = lives - 1 
     if lives <= 0: 
      text1 = 'Out of lives. Game Over.' 
      for x in text1: 
       print (x, end='') 
       sys.stdout.flush() 
       sleep(0.007) 
      end() 
     elif lives >= 0: 
      text1 = 'That\'s rude' 
      text2 = '- 1 life!' 
      text3 = lives 
      text4 = ' lives left' 
      for x in text1: 
       print (x, end='') 
       sys.stdout.flush() 
       sleep(0.007) 
      print() 
      for x in text2: 
       print (x, end='') 
       sys.stdout.flush() 
       sleep(0.007) 
      print() 
      for x in range(text3): 
       print (x, end='') 
       sys.stdout.flush() 
       sleep(0.007) 
      for x in text4: 
       print (x, end='') 
       sys.stdout.flush() 
       sleep(0.007) 
      print() 
      intro1() 
    else: 
     intro1() def end(): 
    text1 = 'done.' 
    for x in text1: 
     print (x, end='') 
     sys.stdout.flush() 
     sleep(0.007) intro() 

Я знаю, это выглядит очень долго, и сбивает с толку. Программа отлично работает, я ее протестировал. Моя единственная проблема в том, что он печатает все числа.

Ex:

жизни + 1 Спасибо жизнь в настоящее время.

или

Thats грубо - 1 живой 01 жизней осталось.

Я только хочу, чтобы он напечатал последний номер, но я хочу, чтобы он печатался с анимацией, которую у меня есть. Помощь будет принята с благодарностью.

+0

Случайный совет: ваш код анимации один и тот же каждый раз, вы можете использовать его в функции. Затем, если вы поместите строки «text» в список, вы можете перебрать его. Ваш код будет намного короче. – kwinkunks

ответ

1

Вы должны изменить:

for x in range(text3): 
    print (x, end='') 
    sys.stdout.flush() 
    sleep(0.007) 

в

for x in str(text3): 
    print (x, end='') 
    sys.stdout.flush() 
    sleep(0.007) 

Обратите внимание на разницу, range(num) возвращает список чисел, в то время как str(num) преобразует его в строку, из которой вы можете напечатать символ вовремя.

КСТАТИ ... Соблюдая DRY (не повторяй себя) принцип, следует учитывать фактор-аут печать на одной функции,

def type_output(text): 
    for x in str(text): # Use str to coerce the input to a string 
     print (x, end='') 
     sys.stdout.flush() 
     sleep(0.007) 

Таким образом, ваш код станет более понятным.

0

изменение range(text3) до str(text3).

range(text3) возвращает список [0,1,2...text3-1]. Таким образом, цикл for циклически перебирает этот список целых чисел, когда вы хотите перебирать символы в строчном представлении числа. Чтобы исправить это, просто измените целое число text3 на строку и зациклируйте на символы так же, как вы перебираете другие строки.

+1

Предел 'end' не включен, поэтому' range (text3) 'будет генерировать список до' text3-1'. – memoselyk

0

Я думаю, вам не нравится, что ваш код печатает, например. 0123? Если ваш код, например:

for x in range(text3): 
     print (x, end='') 
     sys.stdout.flush() 
     sleep(0.007) 

x in range(text3), что делает возвращается первый 0, то 1, то последовательные числовые значения до 1 меньше, чем целое значение Text3. Посмотрите встроенный в диапазоне функцию в питона документы здесь: https://docs.python.org/3/library/functions.html

Вместо этого, вы должны, вероятно, просто одну строку кода:

print(text3, end='') 

это будет конвертировать Text3 в строку и распечатать его, и вы не получите начальный ноль :-)

Также, где ваш код имеет, например,

for x in text2: 
     print (x, end='') 
     sys.stdout.flush() 
     sleep(0.007) 

Что вы делаете, это печатать содержимое текста2 персонажа за раз. Было бы гораздо проще написать:

print(text2, end='') 

хотя вы не можете до конца = «» если ваш следующий позвоню печати(), чтобы начать новую строку.

Я не знаю, почему у вас есть флеш и короткая задержка там - я не думаю, что они нужны, никогда не видели, что использовали раньше. Ах, я думаю, это анимация, о которой вы говорите. Считаете ли вы, что упростите свою жизнь кодирования, определив функцию один раз, что делает анимированную печать, и просто вызывая это при необходимости?

def aniprint(stringtoprint): 
    for c in stringtoprint: 
     print(c,end='') 
     sys.stdout.flush() 
     sleep(0.007) 

Тогда просто называют его:

aniprint(text1) 
aniprint(text2) 

HTH

Барни
+0

Я думаю, что он пытается создать эффект, который набирают персонажи, поэтому он печатает каждый символ за раз, с задержкой между символами. – memoselyk

0

Когда вы звоните

for x in range(text3): 

Он будет перебирать "список" [0,1], если text3 = 2, [0,1,2], когда text3 = 3 Если вы хотите только 3, попробуйте:

for x in [3]: 

или что-то подобное, но вы можете просто распечатать также без итерации.

Смежные вопросы