PaizaラーニングでBランクを目指して勉強(Python)

Qiita初投稿！
Bランクレベルアップメニューを解いていきます。

## 整数の足し算

[問題リンク](https://paiza.jp/works/mondai/prob60/substring_upper_1)

a b を足し算

input  　　a b
output 　　a + b


```python
n = input()

a = 0
for i in n.split():
    a += int(i)

print(a)
```

for分の range のところに .split() を入れられると思わなかった。

## 文字の長さ

```python
word = input()

print(len(word))
```

## 一文字目だけ出力
```python
word = input()
print(word[0])
```

## 大文字に変換
```python
word = input()
print(word.upper())
```

関数とメソッドの違いがわからない…
upper(word)　ではだめな理由が…

[ここにわかりやすく書かれていました](https://gammasoft.jp/blog/difference-method-vs-function/)

print() とか len()　が関数
変数.join()　とか　リスト.append() とか　.(ドット)がつくのがメソッドみたい
（例外はあるようです）

## AからBの数を出力
```python
n = input().split()

a = int(n[0])
b = int(n[1])

for i in range(a,b+1):
    print(i)
```

## 範囲内を大文字

**入力例** 
5 8
text text text


**問題**
５文字目から８文字目まで大文字に変換

**期待される出力**
text TEXt text

---

難しくて解けなかった…
回答を見ながらコードを修正

```python
n = input().split()
p = input()

print(p[0:int(n[0]) - 1],end="")
print(p[int(n[0]) - 1:int(n[1])].upper(),end="")
print(p[int(n[1]):])
```

３回に分けてprintするのが意外とアナログで思いつかなかった。
(例)文字列とかリスト[5 : 8]　コロンで範囲指定できるの、習ったかな…
完全に忘れてたか、知らなかった。


## リストの出力
```python
li = ["Nara", "Shiga", "Hokkaido", "Chiba"]

for i in range(4):
    print(li[i])
```

## 一文字ずつ出力
```python
word = input()

length = int(len(word))

for i in range(length):
    print(word[i])
```

文字数を変数にしてfor文で出力しました。

```python
word = input()

for i in word:
    print(i)
```
解答見たら、もっと簡単にコーディングできたみたいでした:joy:

## 文字の重複をカウント

**入力例** 
a
aaaabbbbcccc

**問題**
２行目の入力に１行目の文字が何文字含まれているか数える

**期待される出力**
4

```python
number = input()
string = input()

count = 0

for i in string:
    if i == number:
        count += 1

print(count)
```
答え見ずに解けた！うれしい！

逆に解答が
len関数で長さを測って…
変数を駆使していてよくわからなかった…


## n文字目とn+1文字目を出力

※ n の数が文字列より大きい場合は何も出力しない

```python
num = int(input())
word = input()

if num < int(len(word)):
    print(word[num - 1] + " " + word[num])
```
これも答え見ずに解けて嬉しかったです！

## 文字の重複カウント
**問題**
１行目の文字列 a が、２行目の文字列 b に何回現れるかを出力

**入力例** 
AA
AAAaaaaAA

**出力**
3

```python
key = input()
string = input()

count = 0

for i in range(len(string) - len(key) + 1): #ここが謎　1文字だったら±0 それ以上は - になる
    word = string[i : i + len(key)] # string[keyの長さ分]を変数に代入
    
    if word == key: # ループ中に key と word が同じなったとき+1
        count += 1

print(count)
```
難しくて全然わからなかった:sob:
答え見てもわからないところがいっぱい…

```python
# 上下省略
for i in range(len(string)): #まさかのこれでも正解だった
```
解答の詳細を聞きたい！

## リストの２番目だけ出力

```python
count = int(input())

for i in range(count):
    print(input().split()[1])
```
解答見て単純化したコード
split()からいきなり[1]できるとは驚いた


## ソートして出力

**入力例** 
3（数字何個か）
2 3 1

**出力**
1
2
3

```python
n = int(input())
string = input().split()

li = []

for i in string:
    li.append(int(i))

li.sort()

for i in range(n):
    print(li[i])
```
答え見ちゃったー
ソート関数しってたような、しらなかったような…

## 文字と整数の組のソート

**入力例** 
3
G 0
S 3
E -2

**出力**
E
G
S

```python
n = int(input())
dic = {} # 辞書

for i in range(n):
    parts = input().split()
    dic[int(parts[1])] = parts[0] # 辞書のキーに代入 

dic = sorted(dic.items())

for i in dic:
    print(i[1])
```

急にめちゃくちゃ難しくなった気がする:joy:
答えみても理解が追い付かない…

辞書のキーに代入した後の出力
{1: 'A', 2: 'B'}

辞書復習しないと

## アルファベット探し

**問題** 
入力１行目X　入力２行目Y  X~Yの間に入力３行目Cが
含まれていたら true を出力
なければ false を出力

**入力例** 
A
F
D

**出力**
true

```python
start = input()
end = input()
target = input()

startNum = 1
endNum = 1
targetNum = 1

result = "false"

li = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]

for i in li:
    if i == start:
        break
    else:
        startNum += 1

for i in li:
    if i == end:
        break
    else:
        endNum += 1

for i in li:
    if i == target:
        break
    else:
        targetNum += 1

if startNum <= targetNum <= endNum:
    result = "true"

print(result)
```
自力で解けて嬉しい！
有料プラン抜けたので、Fainal問題だけ解いていきますw


---

随時追記しています