41

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

leofun01 написав:
ur_naz написав:
while True:

:|

ur_naz, а тепер заґуґли стрічку
Python do while loop
і почитай, що в документації написано.

Документацію читати - не по лобу стукати.

42

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

пропонуєте костиляйзер? це погано, але тут дещо інша історія

43

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

ur_naz написав:

пропонуєте костиляйзер? це погано, але тут дещо інша історія

Ви або поясніть конкретно що не так, або не перетворюйте ще одну хорошу тему в срач.
Я не кажу що ви не праві а я правий. Але я й нерозумію що вам не подобається.

Подякували: leofun01, koala, Irbis3

44

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

чи вам не зрозуміла різниця і кінцевим циклом і безкінцевим?

45

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

ur_naz написав:

чи вам не зрозуміла різниця і кінцевим циклом і безкінцевим?

В конкретному випадку коли виконання циклу повинно завершитись при натисканню на клавішу '0' я ту різницю не вважаю принциповою.

46 Востаннє редагувалося koala (23.03.2020 00:01:51)

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

Пане ur_naz, в Python немає окремого оператора циклу з післяумовою, і while True: ... if ...:break - рекомендований спосіб робити такі цикли. Нащо ви людям погане радите?

Подякували: leofun01, Irbis2

47

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

то може поясните, що робить while True:

В конкретному випадку

і як це зрозуміти

48

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

ur_naz написав:

то може поясните, що робить while True:

В конкретному випадку

і як це зрозуміти

while True то безкінесний цикл. З котрого в даному випадку виходиться за допомогою конструкції

    if char == '0':
        break

Якщо ж би у нас був цикл котрий би сам змінював змінну char і мав би завершуватися коли змінна би набула якогось значення то булоб до цільніше використовувати

while (char ==x):

але в цьому випадку змінну char змінює користувач

char = getch.getch()
Подякували: koala1

49

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

гарний код не повинен  зобов'язувати заглиблюватись в себе. а у вас цей принцип не діє. в подальшому це призведе до великих проблем з кодом

50 Востаннє редагувалося pluszz (23.03.2020 05:28:19)

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

#!-*- coding:utf-8 -*-
import getch# встановити pip install getch модуль для зчитування однієї натиснутої клавіші
import random #запускаю модуль рандом(уже є в пітоні, якщо немає треба встановити)
"""
Програма рандомно виводить на екран або аверс або реверс(Орел чи Решка)
"""
while True: # Безкінечна петля
    print('-' * 50)
    print(random.choice(['АВЕРС','РЕВЕРС']).center(50,'-'))#Рандомний вибір реверс-аверс
    print('-' * 50)
    print('Натисніть любу клавішу щоб підкинути монету натисніть 0 щоб вийти')#Запрошуємо користувача натиснути на клавішу
    continue_game = getch.getch()#Зчитуємо яку клавішу натиснув користувач і записуєм в змінну continue_game
    if continue_game == '0':#...Якщо натиснуто 0...
        break#То вийти з цикла
    #Інакше продовжуєм

51

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

ur_naz написав:

гарний код не повинен  зобов'язувати заглиблюватись в себе. а у вас цей принцип не діє. в подальшому це призведе до великих проблем з кодом

Вам уже сказали: це особливість Python - цикли з післяумовою об'єднані з циклами з виходом усередині, які, хоч і є структурними, але, здається, не мають власної конструкції будь-де. Тут немає більшого заглиблення і не буде, а наявне є типовим і рекомендованим. Нащо ви людям голови дурите?

Подякували: leofun011

52

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

pluszz написав:

Пане Irbis дозволив собі модифікувати. Надіюсь ви не проти.

#!-*- coding:utf-8 -*-
import getch# встановити pip install getch
import random #запускаю модуль рандом(уже є в пітоні, якщо немає треба встановити)

while True:                  
    print('-' * 50)
    print(random.choice(['АВЕРС','РЕВЕРС']).center(50,'-'))
    print('-' * 50)
    char = getch.getch()
    if char == '0':
        break

нічого не зрозумів але дуже цікаво.
якщо не важко, що таке getch(бо я дивився англомовні відео, але з англійською
not very)

53

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

koala написав:

Є така чудова функція random.choice.

print('-' * 50)
print(random.choice(['АВЕРС','РЕВЕРС']).center(50,'-'))
print('-' * 50)

ви праві, так код набагато менший

Прихований текст
import random #запускаю модуль рандом(уже є в пітоні, якщо немає треба встановити)

avers  = 1 #аверсу надаєм значення 1
revers = 2 #реверсу надаєм значення 2
moneta = 0 #
playGame = True

while (playGame == True):                  #поки (playGame == True) цикл повторюється
    moneta = random.randint(avers, revers) #комп'ютер загадує число від 1 до 2
                      
    print('-' * 50)
    print(random.choice(['АВЕРС','РЕВЕРС']).center(50,'-'))
    print('-' * 50)
  
    if (input('Натистіть Enter - щоб підкинути монету ще , 0 - щоб вийти') == '0'):
        playGame = False #якщо натиснуто 0, то playgame = False, і цикл переривається.

54

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

Вам уже сказали: це особливість Python

от пан Аверс Ірбіс усе розуміє, а ви ні...
А тепер знайдите помилки тут:

import random #запускаю модуль рандом(уже є в пітоні, якщо немає треба встановити)

def WantToPlay():

   return '0' != input('Натистіть Enter - щоб підкинути монету ще , 0 - щоб вийти')
   
def PlayGame():   

    side = random.choice(['АВЕРС','РЕВЕРС'])

    # ???                 
    print('-' * 50)
    print(side.center(50,'-'))
    print('-' * 50)


################################################################################

while WantToPlay():
    PlayGame()
    

55

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

  1. Воно пише "ще", хоча ще жодного разу не підкидало. Хай запитує після першого підкидання - ніби очевидно, що якщо людина запускає програму, то хоче підкидання, немає сенсу питати перед ним.

  2. Я натискаю 0, але воно не виходить, доки я не натисну Enter. А Enter - це ніби-то підкидання монети.

  3. Натискання Ctrl+C призводить до виходу, але цього ніде не сказано.

  4. Натискання 0,0,Enter чомусь призводить до підкидання. Як і будь-якої іншої комбінації, крім 0,Enter та Ctrl+C. А написано лише про Enter.

До останніх пунктів я б не чіплявся, якби це була програма початківця, який тільки почав вивчати програмування.

56

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

  1. То проблеми рефакторінгу. Не суттєво. Я б сказав би, якби до цього "програма" не  підкидала б без моєї згоди.

  2. Слушно. І виходить що вся архітектура не вірна. треба чекати не на символ, а на keyPressed.

57

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

ur_naz написав:

1.То проблеми рефакторінгу. Не суттєво. Я б сказав би, якби до цього "програма" не  підкидала б без моєї згоди.

Ні. Рефакторінг - це зміна коду без зміни поведінки. Зайвий запит згоди користувача - це зміна поведінки. Це якраз суттєво, бо ви саме через це почали цю суперечку. Ви не ту задачу розв'язуєте.

ur_naz написав:

2. Слушно. І виходить що вся архітектура не вірна. треба чекати не на символ, а на keyPressed.

А оце, як на мене, якраз треба виправляти в документації/повідомленнях. Тобто замість "0-вихід, Enter-ще раз"  треба написати "введіть 0 для виходу чи що завгодно (або нічого), щоб повторити, і натисніть Enter".

58

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

я почав суперечку не з цього приводу. ІК я навіть не чипав. Хоча мабуть з цього потрібно було почати:
1. Програма повинна привітатись і розказати коротко про те, для чого вона і що робить.
2. Програма повинна отримати згоду на початок роботи

Бо якщо вона форматувала б диски уявляєте наслідки?
Форматувати ще один диск?

Подякували: Irbis1

59

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

ок.ща буде версія 2.0

60

Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)

import random #запускаю модуль рандом

print('***ця програма зможе вирішити будь-яку суперечку***') #ознайомлення користувача
while (True):  #безкінечний цикл

    if (input('---БАЖАЄТЕ ПІДКИНУТИ МОНЕТКУ?---(YES - a/NO - Ctrl+c)') == 'a'): #якщо натиснуто"а", то цикл виконується

        print('-' * 50)
        print(random.choice(['АВЕРС','РЕВЕРС']).center(50,'-'))  #програма рандомно вибирає одне з двох значень, і виводить на екран
        print('-' * 50)
#цикл повторюється, комп'ютер чекає відповідь користувача - продовжити цикл, чи завершити.