89880


Python初心者です。  
非常に見づらくてすみません。

# 質問の内容について

標準入力でlistと入力されたときにプリントしたいのですが他のプログラムが邪魔をしてエラーが出ます  
内容が伝わるかわからないですが、下のコードのｘを入力したようにlistでも同じことをプログラムの一番下で書きたかったのですがうまくいきません。  
`elif choice == 'list':`の文を入れたいですがどこに入れればエラーが出ないでしょうか。  
これが質問の内容です。  
標準入力の内容によって条件分岐しているプログラムです。(コマンドのようなものです)account→purchaseの流れは固定です。

**エラーの内容について**  
どこが原因なのかはある程度分かっています  
この`name = choice_list[1]`がlist index out of rangeというエラーの原因のようです。  
`choice_list`、`command`、`name` 、`cash`がif文の上にあると同じくエラーが出るためこの位置にあるのですが、`elif
choice == 'list':`文をxの上に持ってくると上のregister_listの内容が反映されないので、プログラムの流れ的にも`elif
command == 'purchase':`の下に入れているのですが。

[code]

    if choice == 'x':
            print("Thank you.")
            break 
        choice_list = choice.split(sep = " ")
        command = choice_list[0]
        name    = choice_list[1]
        cash    = choice_list[2]
    
[/code]


CC BY-SA 4.0
2022-07-09T14:23:51.013
89869
2022-07-12T01:37:16.667
2022-07-12T01:37:16.667
question
python
標準入力でlistと選択したときにプリントしたいがlist index out of rangeが出る


> 標準入力でlistと入力されたとき

に`name = choice_list[1]`で`IndexError: list index out of
range`が発生しないようにするにはその文が実行されないようにすれば良いです。今回は`choice`が`"x"`または`"list"`でない場合に

[code]

            command = choice_list[0]
            name    = choice_list[1]
            cash    = choice_list[2]
    
[/code]

が実行されるように書き換えました。

[code]

    account=[]
    account_list=[]
    info_list=[]
    register_list=[]
    from collections import defaultdict
    key1=["command","name","cash"]
    
    while True:
        choice = input("Shop>")
        
    #xを入力するとプログラムが終了する
        if choice == 'x':
            print("Thank you.")
            break 
            
        elif choice == 'list':
             print(register_list)
    
        else:
            choice_list = choice.split(sep = " ")
            command = choice_list[0]
            name    = choice_list[1]
            cash    = choice_list[2]
        
    
    #標準入力でaccount　名前　残高と入力するとnameとcashを表示
    #同じnameが存在する場合は警告文を出し、アカウントを作成しない  
            if command == 'account':
                if choice in account:
                    print("Duplicated account.")
                else:
                    account.append(choice)
                    account_list.append(list())
                    account_str = ",".join(map(str,account))
                    point = cash
                    print(name+ " " + cash)
    
    #標準入力でpurchase　名前　金額と入力すると名前が金額分の買い物をする
    #point(残高)が0より大きい場合はポイントの残高を表示する=current_point
    #use_pointで何ポイント利用するか入力する(標準入力)
    #ポイントの残高が足りない場合は警告文を出し再度入力する
            elif command == 'purchase':
                 print("Current point:"+str(point))
    
                 while True:
    
                     use_point = input("How many points to use?")
                     use_point = int(use_point)
                 
    #use_pointが0以上残高以下の場合金額とポイント残高からuse_pointを減算
    #ポイント利用分を除く買い物金額の10％のポイントを新たに獲得し残高に加算→表示
                     if  int(use_point) > int(point):         
                         print("Insufficient points.")
                         use_point = int(use_point)
    
                     else:    
                         billed = int(cash)-int(use_point)
                         billed = int(billed)
                         new_point=int(billed)*0.1
                         new_point=int(new_point)
                         point=int(point)-int(use_point)+int(new_point)
                         account_dict = defaultdict(dict)
                         account_dict[name]=str(point)
                         info_list += list(account_dict.items())
                         register_list = list(dict(info_list).items())
                         print(register_list)
                         print(str(billed)+" billed.Add "+str(new_point)+"points.Current points:"+str(point))
                         break
    
[/code]


CC BY-SA 4.0
2022-07-10T05:18:56.007
89880
2022-07-10T05:18:56.007
39819
89869
answer