2016-04-13 18 views
0

Başa dönebilmek için bir "while" döngüsüne yerleştirmem gerektiğini biliyorum. Ancak, kullanıcı gerektiğinden daha fazla karakter girdiyse, yeniden başlatmak için bir süre döngüm var. Bu durumu değiştirmeli miyim? ya da bir fonksiyon eklemeden bunu düzeltmek mümkün mü?Döngünümün yeniden başlatılmamasının neden anlama geldiğini anlama

net olmadığı için benim hatam -edit-: İşte benim gerçek kod var

abb_dict = { 
    'lol': 'laughing out loud', 
    'bfn': 'bye for now', 
    'cuz': 'because', 
    'omw': 'on my way', 
    'tbh':'to be honest', 
    'afk':'away from keyboard', 
    'brb':'be right back', 
    'afaik':'as far as i know', 
    'np':'no problem', 
    'rofl':'rolling on floor laughing', 
    'asap': 'as soon as possible',  
} 

for k, v in abb_dict.items(): # list all the abbreviations available to be translated 
    print k, v 
tweet_str = raw_input('Enter the sentence with an abbreviation in it :\n').lower() 

while len(tweet_str) > 160: ## if tweet_str passes 160 characters it will display a message 
    print "Too long, keep it less than 160 characters" 
    tweet_str= raw_input('Enter the sentence with an abbreviation in it :\n').lower()# prompts user to re-enter new string 

for k in abb_dict: # looks for any key variable in dictionary 
     if k in tweet_str: # if the key is seen in the user input 
      print k, abb_dict[k] # prints key variable along with dictionaries value which is the definition of the abbreviation 

for key, value in abb_dict.iteritems(): 
    tweet_str = tweet_str.replace(key, value) #replaces abbreviations with their definition 
print tweet_str 
+1

gerçek kodunuz veya sahte kod mı? – wnnmaw

+3

Anında yanıt, '> 100',' 100'den büyük ',' 0'dan küçük olmamak 'anlamına gelir, – roganjosh

+0

Ayrıca, girinti. 'For' döngüsü ve takip eden her şeyin 'while' döngüsünde olması gerekiyorsa, bu bir problem değildir. – jpmc26

cevap

0

, bu başlangıç ​​almalısınız:

abb_dict = { 
    'lol': 'laughing out loud', 
    'bfn': 'bye for now', 
    'cuz': 'because', 
    'omw': 'on my way', 
    'tbh':'to be honest', 
    'afk':'away from keyboard', 
    'brb':'be right back', 
    'afaik':'as far as i know', 
    'np':'no problem', 
    'rofl':'rolling on floor laughing', 
    'asap': 'as soon as possible',  
} 

user_wants_to_play = True 
while user_wants_to_play: 
    check = raw_input('Do you want to play? y/n:') 
    if check == 'y': 
     tweet_str = raw_input('Enter a statement with an abbreviation: ') 
     words = tweet_str.split(' ') 
     rtn_sentence = [] 
     for word in words: 
      try: 
       replacement = abb_dict[word] 
       word = replacement 
       rtn_sentence.append(word) 
      except: 
       rtn_sentence.append(word) 
     print ' '.join(rtn_sentence) 
    else: 
     user_wants_to_play= False 
+0

Referans için teşekkür ederiz. Python için hala yeni olduğum için henüz "try" veya "except" ifadeleriyle çalışmadım. Bu yüzden onları kullanmayacağım. Şu andaki programımı değiştireceğim ve mantığınızdan yola çıkmaya çalışacağım. – juan

+0

Eğer sözlükler kullanıyorsanız, eğer başarısız olursa, ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' komutunu döndürür. Temel olarak burada, 'try''de ne yapıyor?' Bu kısaltma için bütün cümleyi biliyorum? ' Eğer çalışırsa, size cümle verir. '' Dışarıda '' Hayır, yok, sözü olduğu gibi tut. Bu tür bir yapıdan uzun süre kaçamazsınız ... – roganjosh

+0

Ayrıca, bu kod kendi kendine yeten bir program olarak çalışmalıdır. Bir betiğe kopyalayıp yapıştırırsanız, istediğini yapmalı. Bunu gayet güzelleştirdim; neler olduğunu görmek için bazı 'print' ifadelerini yapıştırın. – roganjosh

0

dizesinin uzunluğu 100'den büyük

kod ise döngü yalnızca çalışacak ederken:

len(str) > 100 

olmalıdır:

len(str) < 100 

Dizenin uzunluğu dizgenin uzunluğu 100'den azsa, yorumunuza göre yürütülmesini istiyorsanız.

+0

üzerine inşa etmek için benim cevabımla kaplı olduğunu düşünüyorum, bu yüzden aptalım, şimdi her şeyle düzgün çalışması için kodumu düzeltmem gerekiyor. – juan

0

Şu anda doğrusal bir programınız var.

Bir kullanıcı girdisi toplar.

Kullanıcı girişi çok büyükse, küçük bir giriş alana kadar girdi sormaya devam eder.

Daha sonra girişe bazı işlemler yapar

Size tekrarlamak tüm sistemi istiyorsanız, bir dış döngü ve iyi çıkış kriterleri (gerekir


biter döngü sona yaptığında). Aşağıdaki psuedo-kodu gibi bir şey. Yorumlarınıza dayanarak

str = raw_input 
while toLower(str) != "exit" 
    while len(str) > 100 
    ... 
    #your other code 
    ... 
    str = raw_input 
wend 
+0

Bu, '> 've' <'karıştırması ile yaptığım yorumda bahsettiğim aynı sorundan muzdariptir ve daha sonra OP'nin amaçlanan çıktısını tahmin etmek için dev sıçramaları alır – roganjosh

+0

Yorumları kendi kendine çelişkilidir. "len> 100" iken, "#loops 100'den az" yorumunu ve baskı yorumunu "100'den fazla print cümlesi #print mesajı" Anlaşmazlıktan çok kabul edilen iki ifadeyle birlikte gittim. YMMV –

+0

Anlaşılana kadar cevap verme çabasına gitme: Bu konuda çok daha büyük cevaplarla yanmıştım http://stackoverflow.com/questions/34878226/compare-2-lists-and-create- yeni-list-ile-farklı-sonuç-in-python/34880659 # 34880659 – roganjosh